ฉันจะใส่โมเดลเอฟเฟกต์แบบไม่เชิงเส้นสำหรับข้อมูลการวัดซ้ำโดยใช้ nlmer () ได้อย่างไร


12

ฉันพยายามวิเคราะห์ข้อมูลการวัดซ้ำ ๆ และพยายามดิ้นรนเพื่อให้มันทำงานRได้ ข้อมูลของฉันเป็นหลักต่อไปนี้ฉันมีสองกลุ่มการรักษา ทุกวิชาในแต่ละกลุ่มมีการทดสอบทุกวันและได้รับคะแนน (เปอร์เซ็นต์ที่ถูกต้องในการทดสอบ) ข้อมูลอยู่ในรูปแบบยาว:

Time Percent Subject   Group
   1       0    GK11 Ethanol
   2       0    GK11 Ethanol
   3       0    GK11 Ethanol
   4       0    GK11 Ethanol
   5       0    GK11 Ethanol
   6       0    GK11 Ethanol

ข้อมูลมีลักษณะเป็นเส้นโค้งโลจิสติกส์วัตถุไม่ดีในสองสามวันตามด้วยการปรับปรุงอย่างรวดเร็วตามด้วยที่ราบสูง ฉันต้องการทราบว่าการรักษามีผลต่อกราฟประสิทธิภาพการทดสอบหรือไม่ ความคิดของฉันคือการใช้nlmer()ในแพคเกจในlme4 Rฉันสามารถใส่ไลน์สำหรับแต่ละกลุ่มโดยใช้สิ่งต่อไปนี้

print(nm1 <- nlmer(Percent ~ SSlogis(Time,Asym, xmid, scal) ~ Asym | Subject,
salinedata, start = c(Asym =.60,  xmid = 23, scal = 5)), corr = FALSE)

ฉันสามารถเปรียบเทียบกลุ่มโดยดูที่การประมาณค่าพารามิเตอร์และการเบี่ยงเบนมาตรฐานของบรรทัดที่ประมาณไว้ แต่ฉันไม่แน่ใจว่านี่เป็นวิธีที่เหมาะสมที่จะทำ ความช่วยเหลือใด ๆ ที่จะได้รับการชื่นชมอย่างมาก.

คำตอบ:


4

คุณสามารถใช้การทดสอบอัตราส่วนความน่าจะเป็นปกติ นี่คือตัวอย่างง่ายๆ ก่อนอื่นเรามาสร้างข้อสังเกตจาก 10 คนตามพารามิเตอร์ของคุณ:

Asym = .6
xmid = 23
scal = 5

n = 10
time = seq(1,60,5)

d = data.frame(time=rep(time,10),
               Asym, xmid, scal, group=0)
d$subj = factor(rep(1:n, each=length(time)))

ทีนี้ให้ครึ่งหนึ่งของพวกเขามีพารามิเตอร์กำกับและจุดกึ่งกลางที่แตกต่างกัน:

ind = (nrow(d)/2):nrow(d)
d$Asym[ind] = d$Asym[ind] + .1
d$xmid[ind] = d$xmid[ind] + 10
d$group[ind] = 1
d$group=factor(d$group)

เราสามารถจำลองค่าการตอบสนองสำหรับบุคคลทั้งหมดโดยยึดตามรูปแบบ:

set.seed(1)
d = transform(d, y = Asym/(1+exp((xmid-time)/scal)) +
                     rnorm(nrow(d), sd=.04))
library(lattice)
xyplot(y~time | group, group=subj,
       data=d, type=c("g","l"), col="black")

สปาเก็ตตี้แปลงข้อมูล

เราสามารถเห็นความแตกต่างที่ชัดเจนระหว่างสองกลุ่มความแตกต่างที่แบบจำลองควรเลือกได้ ตอนนี้เรามาลองสร้างแบบจำลองง่ายๆโดยไม่สนใจกลุ่ม:

> fm1 = nls(y ~ SSlogis(time, Asym, xmid, scal), data=d)
> coef(fm1)
      Asym       xmid       scal 
 0.6633042 28.5219166  5.8286082

อาจเป็นไปได้ตามที่คาดไว้การประมาณAsymและxmidอยู่ระหว่างค่าพารามิเตอร์จริงสำหรับทั้งสองกลุ่ม (นั่นอาจเป็นกรณีที่ไม่ชัดเจนแม้ว่าจะมีการเปลี่ยนแปลงพารามิเตอร์มาตราส่วนเพื่อปรับเปลี่ยนรูปแบบการสะกดคำผิด) ตอนนี้เรามาลองแบบเต็มโดยใช้พารามิเตอร์ที่แตกต่างกันสำหรับทั้งสองกลุ่ม:

> fm2 = nls(y ~ SSlogis(time, Asym[group], xmid[group], scal[group]),
          data=d,
          start=list(Asym=rep(.6,2), xmid=rep(23,2), scal=rep(5,2)))
> coef(fm2)
    Asym1     Asym2     xmid1     xmid2     scal1     scal2 
 0.602768  0.714199 22.769315 33.331976  4.629332  4.749555

เนื่องจากทั้งสองรุ่นซ้อนกันเราสามารถทำการทดสอบอัตราส่วนความน่าจะเป็น:

> anova(fm1, fm2)
Analysis of Variance Table

Model 1: y ~ SSlogis(time, Asym, xmid, scal)
Model 2: y ~ SSlogis(time, Asym[group], xmid[group], scal[group])
  Res.Df Res.Sum Sq Df  Sum Sq F value    Pr(>F)    
1    117    0.70968                                 
2    114    0.13934  3 0.57034  155.54 < 2.2e-16 ***
---
Signif. codes:  0***0.001**0.01*0.05 ‘.’ 0.1 ‘ ’ 1

p-value ที่เล็กมากแสดงให้เห็นอย่างชัดเจนว่าโมเดลที่เรียบง่ายนั้นง่ายเกินไป ทั้งสองกลุ่มไม่แตกต่างกันในพารามิเตอร์ของพวกเขา

อย่างไรก็ตามการประมาณค่าพารามิเตอร์ทั้งสองนั้นเกือบจะเหมือนกันโดยมีความแตกต่างเพียง 0.1 บางทีเราต้องการเพียงพารามิเตอร์ระดับเดียวเท่านั้น (แน่นอนเรารู้คำตอบคือใช่เนื่องจากเรามีข้อมูลจำลอง)

(ความแตกต่างระหว่างพารามิเตอร์ของเส้นกำกับสองเส้นก็แค่ 0.1 เท่านั้น แต่นั่นก็แตกต่างกันมากเมื่อเรานำข้อผิดพลาดมาตรฐานมาพิจารณา - ดูsummary(fm2))

ดังนั้นเราจึงเหมาะกับโมเดลใหม่โดยมีscaleพารามิเตอร์ร่วมสำหรับทั้งสองกลุ่ม แต่แตกต่างกันAsymและxmidพารามิเตอร์เหมือนก่อนหน้านี้:

> fm3 = nls(y ~ SSlogis(time, Asym[group], xmid[group], scal),
          data=d,
          start=list(Asym=rep(.6,2), xmid=rep(23,2), scal=5))
> coef(fm3)
     Asym1      Asym2      xmid1      xmid2       scal 
 0.6035251  0.7129002 22.7821155 33.3080264  4.6928316

และเนื่องจากตัวแบบที่ลดลงซ้อนอยู่ในแบบเต็มเราสามารถทำการทดสอบอัตราส่วนความน่าจะเป็นได้อีกครั้ง:

> anova(fm3, fm2)
Analysis of Variance Table

Model 1: y ~ SSlogis(time, Asym[group], xmid[group], scal)
Model 2: y ~ SSlogis(time, Asym[group], xmid[group], scal[group])
  Res.Df Res.Sum Sq Df     Sum Sq F value Pr(>F)
1    115    0.13945                             
2    114    0.13934  1 0.00010637   0.087 0.7685

ค่าp ที่มีขนาดใหญ่บ่งชี้ว่าโมเดลที่ลดลงนั้นพอดีกับโมเดลเต็มตามที่คาดไว้

แน่นอนว่าเราสามารถทำการทดสอบที่คล้ายกันเพื่อตรวจสอบว่าจำเป็นต้องใช้ค่าพารามิเตอร์ที่แตกต่างกันสำหรับเพียงAsymแค่xmidหรือทั้งสองอย่าง ที่กล่าวว่าฉันจะไม่แนะนำให้ทำถดถอยแบบขั้นตอนนี้เพื่อกำจัดพารามิเตอร์ ให้ทดสอบโมเดลเต็ม ( fm2) เทียบกับโมเดลที่เรียบง่าย ( fm1) และมีความสุขกับผลลัพธ์ ในการหาปริมาณความแตกต่างใด ๆ แปลงจะเป็นประโยชน์


นั่นเป็นคำตอบที่ดี คุณจะเปลี่ยนแปลงการวิเคราะห์นี้อย่างไรถ้ามีคนสองสามคนวัดสองครั้งและคุณต้องการควบคุมความสัมพันธ์ภายในบุคคล หากคุณสามารถช่วยฉันขอขอบคุณสองเซ็นต์ของคุณ! ( stats.stackexchange.com/questions/203040/… )
Nova

วิธีนี้เปรียบเทียบกับการใช้nlmer()เพื่อบัญชีสำหรับการวัดซ้ำกับตัวอย่างเมื่อเวลาผ่านไปได้อย่างไร คุณสามารถทำกลยุทธ์ประเภทเดียวกัน แต่พอดีกับ 1 โมเดลที่มีเอฟเฟกต์แบบสุ่มสำหรับsubjectและgroupเทียบกับโมเดลอื่นที่มีเอฟเฟกต์แบบสุ่มสำหรับsubjectและเปรียบเทียบเท่านั้น
Stefan Avey
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.