Normal olabilirlik oranı testlerini kullanabilirsiniz. İşte basit bir örnek. İlk olarak, parametrelerinize göre 10 kişiden gözlem oluşturalım:
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)))
Şimdi yarısının farklı asimptotlara ve orta nokta parametrelerine sahip olmasına izin verin:
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)
Modele dayanarak tüm bireyler için yanıt değerlerini simüle edebiliriz:
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")
İki grup arasındaki açık farkları, modellerin alabilmesi gereken farklılıkları görebiliriz. Şimdi önce grupları görmezden gelerek basit bir modele uymaya çalışalım :
> fm1 = nls(y ~ SSlogis(time, Asym, xmid, scal), data=d)
> coef(fm1)
Asym xmid scal
0.6633042 28.5219166 5.8286082
Belki de beklendiği gibi, tahminler Asym
ve xmid
iki grup için gerçek parametre değerleri arasındadır. (Bununla birlikte, durum yanlıştır, çünkü ölçek parametresi de değiştirildiğinden, model yanlış tanımlamasını ayarlamak için.) Şimdi iki grup için farklı parametrelerle tam bir model yerleştirelim:
> 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
İki model iç içe olduğundan, olasılık oranı testi yapabiliriz:
> 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
Son derece küçük p- değeri, basit modelin çok basit olduğunu açıkça göstermektedir; İki grup yok onların parametreleri farklıdır.
Bununla birlikte, iki ölçek parametresi tahmini, neredeyse .1'lik bir farkla neredeyse aynıdır. Belki de sadece bir ölçek parametresine ihtiyacımız var? (Elbette cevabın evet olduğunu biliyoruz, çünkü verileri simüle ettik.)
(İki asimptot parametresi arasındaki fark da sadece .1'dir, ancak standart hataları dikkate aldığımızda büyük bir fark vardır - bkz summary(fm2)
.)
Bu nedenle scale
, iki grup için ortak bir parametreye, ancak daha önce olduğu gibi farklı Asym
ve xmid
parametrelere sahip yeni bir model takıyoruz:
> 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
Ve indirgenmiş model tam modelde iç içe olduğundan, tekrar olabilirlik oranı testi yapabiliriz:
> 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
Büyük p değeri, azaltılmış modelin beklendiği gibi tam modele uyduğunu gösterir.
Elbette, sadece Asym
, sadece xmid
veya her ikisi için farklı parametre değerlerine gerek olup olmadığını kontrol etmek için benzer testler yapabiliriz . Ben olacağını söyledi değil parametreleri ortadan kaldırmak için böyle aşamalı regresyon yapıyor öneriyoruz. Bunun yerine, tam modeli ( fm2
) basit modele ( fm1
) karşı test edin ve sonuçlardan memnun olun. Farklılıkları ölçmek için grafikler yararlı olacaktır.