Rの非線形混合効果回帰


14

驚いたことに、Googleを使用して次の質問に対する答えを見つけることができませんでした。

私はいくつかの個人からのいくつかの生物学的データを持っていますが、それはおおよそS字状の成長挙動を示しています。したがって、標準のロジスティック成長を使用してモデル化したい

P(t) = k*p0*exp(r*t) / (k+p0*(exp(r*t)-1))

p0はt = 0での開始値、kはt-> infinityでの漸近極限、rは成長速度です。私が見る限り、nlsを使用してこれを簡単にモデル化することができます(私の理解が不足しています:時間とデータをスケーリングすることにより、標準のロジット回帰を使用して類似のものをモデル化できないのはなぜですか?編集:ニック、どうやら、例えばプロポーションですが、めったにhttp://www.stata-journal.com/article.html?article=st0147この接線に関する次の質問は、モデルが異常値を処理できるかどうかです> 1)。

ここで、3つのパラメーターk、p0、およびrに対する固定(主にカテゴリー)およびランダム(個別のID、場合によってはスタディID)の効果を許可したいと思います。nlmeはこれを行う最良の方法ですか?SSlogisモデルは、私がやろうとしていることに対して賢明なようです、それは正しいですか?次のいずれかが賢明なモデルから始まりますか?開始値を正しく取得できないようで、update()はランダムな効果に対してのみ機能し、固定された効果に対しては機能しないようです-ヒントはありますか?

nlme(y ~ k*p0*exp(r*t) / (k+p0*(exp(r*t)-1)), ## not working at all (bad numerical properties?)
            data = data,
            fixed = k + p0 + r ~ var1 + var2,
            random = k + p0 + r ~ 1|UID,
            start = c(p0=1, k=100, r=1))

nlme(y ~ SSlogis(t, Asym, xmid, scal), ## not working, as start= is inappropriate
            data = data,
            fixed = Asym + xmid + scal ~ var1 + var2, ## works fine with ~ 1
            random = Asym + xmid + scal ~ 1|UID,
            start = getInitial(y ~ SSlogis(Dauer, Asym, xmid, scal), data = data))

特定の非線形混合モデルおよび一般的な非線形モデルは初めてなので、推奨事項を読んだり、初心者の質問を含むチュートリアル/ FAQへのリンクを読んでください。


2
kを既知と見なす場合、P / kで母集団をスケーリングできます。kが推定されるものである場合、それだけでは問題が標準のロジット回帰ではないことを意味します。
ニックコックス

1
ニック、ありがとう。はい、最終的には、kを推定し、回帰に含める必要があると思います。ロジット回帰分析の使用に興味があったのは、純粋にアカデミックでした。非線形モデリングに進む前に、これは良いモデルであると考えましたが、Googleを使用して非バイナリデータのロジット回帰の例を見つけることができませんでした。連続データを含むロジットリンクなどのglmerを使用するのは悪い考えとなる何らかの理由(エラーに関する分布の仮定など)があるかどうか疑問に思っていました。
ロブ・ホール

3
連続的な比率である応答のロジットモデリングはしばらく前から存在していましたが、一見したところあまり知られていないようです。たとえば、stata-journal.com / sjpdf.html?articlenum = st0147の Baumを参照してください。それでもあなたの状況ではありません。Rの実装についてコメントすることはできません。
ニックコックス

この興味深いリンクをくれたニックに感謝します-それは私のためにいくつかのことを片付けます。残念ながら、私はあなたの反応をまだ支持できないようです。(ケースで人々は、以下が私のために働いたの直接リンクにアクセスする手間がありますstata-journal.com/article.html?article=st0147を
ロブ・ホール

1
ロジスティック成長は、単調な上昇曲線を意味します。データが一致しない場合、正確に何をしているかに応じて、フィット感が低下したり、ソフトウェアが再生されなくなります。
ニックコックス

回答:


12

この質問をしてから学んだことを共有したかった。nlmeは、Rで非線形混合効果をモデル化する合理的な方法のようです。単純な基本モデルから始めます。

library(nlme)
data <- groupedData(y ~ t | UID, data=data) ## not strictly necessary
initVals <- getInitial(y ~ SSlogis(t, Asym, xmid, scal), data = data)
baseModel<- nlme(y ~ SSlogis(t, Asym, xmid, scal),
    data = data,
    fixed = list(Asym ~ 1, xmid ~ 1, scal ~ 1),
    random = Asym + xmid + scal ~ 1|UID,
    start = initVals
)

次に、更新を使用してモデルの複雑さを増やします。開始パラメーターを操作するには少し注意が必要です。順序を把握するには多少の調整が必要な場合があります。Asymのvar1の新しい固定効果が、Asymの通常の固定効果に従う方法に注意してください。

 nestedModel <- update(baseModel, fixed=list(Asym ~ var1, xmid ~ 1, scal ~ 1), start = c(fixef(baseModel)[1], 0, fixef(baseModel)[2], fixef(baseModel)[3]))

lme4は、私のデータセットの外れ値に対してより堅牢であり、より複雑なモデルに対してより信頼性の高い収束を提供するように見えました。ただし、関連する尤度関数を手動で指定する必要があるという欠点があるようです。以下は、Asymのvar1(バイナリ)の固定効果を持つロジスティック成長モデルです。同様の方法で、xmidとscalに固定効果を追加できます。結果-固定効果-ランダム効果として二重式を使用してモデルを指定する奇妙な方法に注意してください。

library(lme4) ## careful loading nlme and lme4 concurrently
customLogitModel <- function(t, Asym, AsymVar1, xmid, scal) {
    (Asym+AsymVar1*var1)/(1+exp((xmid-t)/scal))
}

customLogitModelGradient <- deriv(
    body(customLogitModel)[[2]], 
    namevec = c("Asym", "AsymVar1", "xmid", "scal"), 
    function.arg=customLogitModel
)

## find starting parameters
initVals <- getInitial(y ~ SSlogis(t, Asym, xmid, scal), data = data)

# Fit the model
model <- nlmer(
    y ~ customLogitModelGradient(t=t, Asym, AsymVar1, xmid, scal, var1=var) ~ 
    # Random effects with a second ~
    (Asym | UID) + (xmid | UID) + (scal | UID), 
    data = data, 
    start = c(Asym=initVals[1], AsymVar1=0, xmid=initVals[2], scal=initVals[3])
)

1
投稿してくれたRobに感謝します。実際、私がデータでやろうとしていることはまさにそれです。AsymのnestedModelのvar1が何で、どのように計算したのかわかりません。

これは、Asymにある変数の効果を含める方法の単なる例です。「以下は、Asymにvar1(バイナリ)の固定効果を持つロジスティック成長モデルです。」たとえば、0と1の2つの値を持つ変数「Treated」があるため、「var1」を「Treated」に置き換えます。
PA6OTA
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.