lmer()での「モデルの収束に失敗しました」という警告


21

次のデータセットでは、サイト、季節、期間、およびそれらの相互作用に関して応答(効果)が変化するかどうかを確認したかったのです。統計に関するいくつかのオンラインフォーラムでは、線形混合効果モデルを使用するよう勧められましたが、問題は各ステーション内で複製がランダム化されるため、連続する季節にまったく同じ場所からサンプルを収集する機会がほとんどないことです(たとえば、モンスーン後のs1のrepl-1は、モンスーンのものとは異なる場合があります。同じ被験者を季節ごとに繰り返し測定する臨床試験(被験者内設計)とは異なります。ただし、サイトと季節をランダムな要因と見なして、次のコマンドを実行し、警告メッセージを受け取りました。

Warning messages:
1: In checkConv(attr(opt, "derivs"), optpar,ctrl=controlpar,ctrl=controlcheckConv, 
: unable to evaluate scaled gradient
2: In checkConv(attr(opt, "derivs"), optpar,ctrl=controlpar,ctrl=controlcheckConv, 
: Model failed to converge: degenerate Hessian with 1 negative eigenvalues

誰も私が問題を解決するのを助けることができますか?コードは次のとおりです。

library(lme4)
read.table(textConnection("duration season  sites   effect
                          4d    mon s1  7305.91
                          4d    mon s2  856.297
                          4d    mon s3  649.93
                          4d    mon s1  10121.62
                          4d    mon s2  5137.85
                          4d    mon s3  3059.89
                          4d    mon s1  5384.3
                          4d    mon s2  5014.66
                          4d    mon s3  3378.15
                          4d    post    s1  6475.53
                          4d    post    s2  2923.15
                          4d    post    s3  554.05
                          4d    post    s1  7590.8
                          4d    post    s2  3888.01
                          4d    post    s3  600.07
                          4d    post    s1  6717.63
                          4d    post    s2  1542.93
                          4d    post    s3  1001.4
                          4d    pre s1  9290.84
                          4d    pre s2  2199.05
                          4d    pre s3  1149.99
                          4d    pre s1  5864.29
                          4d    pre s2  4847.92
                          4d    pre s3  4172.71
                          4d    pre s1  8419.88
                          4d    pre s2  685.18
                          4d    pre s3  4133.15
                          7d    mon s1  11129.86
                          7d    mon s2  1492.36
                          7d    mon s3  1375
                          7d    mon s1  10927.16
                          7d    mon s2  8131.14
                          7d    mon s3  9610.08
                          7d    mon s1  13732.55
                          7d    mon s2  13314.01
                          7d    mon s3  4075.65
                          7d    post    s1  11770.79
                          7d    post    s2  4254.88
                          7d    post    s3  753.2
                          7d    post    s1  11324.95
                          7d    post    s2  5133.76
                          7d    post    s3  2156.2
                          7d    post    s1  12103.76
                          7d    post    s2  3143.72
                          7d    post    s3  2603.23
                          7d    pre s1  13928.88
                          7d    pre s2  3208.28
                          7d    pre s3  8015.04
                          7d    pre s1  11851.47
                          7d    pre s2  6815.31
                          7d    pre s3  8478.77
                          7d    pre s1  13600.48
                          7d    pre s2  1219.46
                          7d    pre s3  6987.5
                          "),header=T)->dat1


m1 = lmer(effect ~ duration + (1+duration|sites) +(1+duration|season),
          data=dat1, REML=FALSE)

@Ian_Fin。編集していただきありがとうございます。実は、私は上記のように、Rコードを含む方法がわからない
Syamkumar。

回答:


47

収束の失敗に関する警告を受け取らないという意味で発生する問題を「解決」するのはかなり簡単です。デフォルトのBOBYQAオプティマイザーを使用せず、代わりに以前の以前のバージョンでデフォルトで使用されたNelder-Mead最適化ルーチンを使用することを選択し1.0.xます。またはoptimxL-BFGS-Bルーチンを直接実行できるようにパッケージをインストールするか、nlminblme4ver。より前のバージョンと同じ1)。例えば:

m1 = lmer(effect~duration+(1+duration|sites)+(1+duration|season), 
          data = dat1, REML = FALSE, 
          control = lmerControl(optimizer ="Nelder_Mead")
library(optimx)
m1 = lmer(effect~duration+(1+duration|sites)+(1+duration|season), 
          data = dat1, REML = FALSE, 
          control = lmerControl(
                           optimizer ='optimx', optCtrl=list(method='L-BFGS-B')))
m1 = lmer(effect~duration+(1+duration|sites)+(1+duration|season), 
          data = dat1, REML = FALSE, 
          control = lmerControl(
                           optimizer ='optimx', optCtrl=list(method='nlminb')))

すべて正常に動作します(警告なし)。興味深い質問は次のとおりです。

  1. そもそもこれらの警告を受けた理由
  2. 使用したREML = TRUEときに警告が表示されなかった理由。

簡潔に、1. duration固定効果と因子のランダムな傾きの両方を定義したため、これらの警告を受け取りsitesましたseason。モデルは効果的に自由度を使い果たし、定義した勾配と切片の間の相関を推定しました。次のようなやや単純なモデルを使用した場合:

m1 = lmer(effect~duration+ (1+duration|sites) + (0+duration|season) + (1|season),
          data=dat1, REML = FALSE)

収束の問題は発生しません。このモデルは、それぞれの非相関ランダム切片とランダム勾配を効果的に推定しますseason

REML = FALSEバツy=バツβ+Zγ+ϵKKバツ=0yKyZKZZ

最後の注意点は、seasonそもそもランダム効果として使用するのが理にかなっているかどうかわかりません。結局のところ、季節は非常に多いので、固定効果として扱うこともできます。


ところで、コミュニティへようこそ!
usεr11852が復活モニック言う

1
@ Syamkumar.R:クール、助けてくれてうれしいです。これがあなたの質問に答えると信じるなら、あなたは答えを受け入れることを考えることができます。
usεr11852は回復モニック言う

どうもありがとうございました!!3番目のバリアント-- REML = FALSE, glmerControl(optimizer ='optimx', optCtrl=list(method='nlminb'))実際に収束問題を解決しましたglmer
好奇心が強い

0

質問は技術的なものではなく統計的なものです。実際、固定効果モデルの代わりにランダム効果モデルを使用しましたが、因子をランダム効果として扱うには、少なくとも5レベルまたは6レベルまたは複製が必要なので、ランダム因子として扱うべきではないと思います(参照ここではグループの最小推奨数は、ランダム効果の要因は何ですか?)。

上記のデータセットには、ランダム効果モデルには不十分な3つのサンプル/サイト/シーズンのみが含まれています。データセットでは、4日と7日は同じ時間で実行される2つの別々の並行実験に属します。したがって、期間(4日間と7日間)でデータセットを調査し、ここで効果(応答変数)をモデル化するのに十分な要因として、季節とサイトを使用して各期間で2ウェイアノバを実行します。モデルは次のようにする必要があります。

lm(day_4_effect~sites*season, data=dat1)

lm(day_7_effect~sites*season, data=dat1)

Bodo Winter(http://www.bodowinter.com/tutorial/bw_LME_tutorial2.pdf)と、問題の解決に協力してくれた@usεr11852に感謝します

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.