nlmer()を使用して反復測定データの非線形混合効果モデルをどのように近似しますか?


12

私は繰り返し測定データを分析しようとしており、それをで機能させるのに苦労していRます。私のデータは基本的に次のとおりです。2つの治療グループがあります。各グループのすべての被験者は毎日テストされ、スコア(テストの正解率)が与えられます。データは長い形式です:

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")

データのスパゲッティプロット

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つのグループに共通のパラメーターを使用して、Asymxmidパラメーターが異なる新しいモデルを適合させます。

> 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)に対して完全なモデル()をテストし、結果に満足してください。差異を定量化するには、プロットが役立ちます。


それは素晴らしい答えです。少数の個人が2回測定され、個人内の相関を制御したい場合、この分析をどのように変更しますか?あなたが助けることができるならば、私はあなたの2セントに感謝します!(stats.stackexchange.com/questions/203040/...
ノヴァ

このアプローチはnlmer()、時間をかけてサンプルの繰り返し測定を説明するために使用する方法とどのように比較しますか?あなたは戦略の同じ種類を行うが、ランダム効果で1つのモデルに合うことができるsubjectし、groupランダムな効果を持つ別のモデル対subjectのみと比較します。
Stefan Avey
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.