คุณสามารถใช้การทดสอบอัตราส่วนความน่าจะเป็นปกติ นี่คือตัวอย่างง่ายๆ ก่อนอื่นเรามาสร้างข้อสังเกตจาก 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
) และมีความสุขกับผลลัพธ์ ในการหาปริมาณความแตกต่างใด ๆ แปลงจะเป็นประโยชน์