通常の尤度比検定を使用できます。簡単な例を示します。まず、パラメーターに基づいて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")
2つのグループ間の明確な違い、モデルが認識できるはずの違いを確認できます。まず、グループを無視して、単純なモデルを当てはめてみましょう。
> fm1 = nls(y ~ SSlogis(time, Asym, xmid, scal), data=d)
> coef(fm1)
Asym xmid scal
0.6633042 28.5219166 5.8286082
予想通りおそらく、の推定値Asym
とは、xmid
二つのグループのための実際のパラメータ値の間のどこかにあります。(ただし、スケールパラメータも変更されているため、モデルの仕様の不備を調整するため、これは明らかではありません。)次に、2つのグループに異なるパラメータを使用して、完全なモデルを適合させます。
> 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
2つのモデルはネストされているため、尤度比検定を実行できます。
> 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値は、単純なモデルが単純すぎることを明確に示しています。2つのグループのパラメーターは異なります。
ただし、2つのスケールパラメータの推定値はほぼ同じで、違いはわずか.1です。おそらく、必要なスケールパラメータは1つだけですか?(もちろん、データをシミュレートしたので、答えは「はい」です。)
(2つの漸近線パラメーターの違いも.1ですが、標準誤差を考慮に入れると、これは大きな違いsummary(fm2)
です。を参照してください。)
そのscale
ため、前のように、2つのグループに共通のパラメーターを使用して、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値は、期待どおり、縮小モデルが完全モデルと同様にフィットすることを示します。
もちろん、同様のテストを実行して、just Asym
、just、xmid
または両方に異なるパラメーター値が必要かどうかを確認できます。とはいえ、このような段階的な回帰を行ってパラメーターを削除することはお勧めしません。代わりに、fm2
単純なモデル(fm1
)に対して完全なモデル()をテストし、結果に満足してください。差異を定量化するには、プロットが役立ちます。