nlmeのエラー

nlme ライブラリの IGF データの場合、次のエラーメッセージが表示されます。

lme(conc ~ 1, data=IGF, random=~age|Lot)
Error in lme.formula(conc ~ 1, data = IGF, random = ~age | Lot) : 
  nlminb problem, convergence error code = 1
  message = iteration limit reached without convergence (10)

しかし、このコードではすべてが問題ありません

lme(conc ~ age, data=IGF)
Linear mixed-effects model fit by REML
  Data: IGF 
  Log-restricted-likelihood: -297.1831
  Fixed: conc ~ age 
 (Intercept)          age 
 5.374974367 -0.002535021 

Random effects:
 Formula: ~age | Lot
 Structure: General positive-definite
            StdDev      Corr  
(Intercept) 0.082512196 (Intr)
age         0.008092173 -1    
Residual    0.820627711       

Number of Observations: 237
Number of Groups: 10 

IGFgroupedData なので、両方のコードが同じです。私はなぜ最初のコードがエラーを生成するのか混乱しています。あなたの時間と助けてくれてありがとう。

10
@ジョンコルビー:私は本書からこのコードを取りました。
追加された 著者 MYaseen208,
最初の例で反復制限を増やしてみましたか? ?lmeControl を参照してください。
追加された 著者 Hong Ooi,
私はこれを素早く見て、何も私に飛び出しません。あなたは、このパッケージに精通している人の集中度がはるかに高い r-sig-mixed-models メーリングリストでもっとうまくいくかもしれません...
追加された 著者 Ben Bolker,
以下の回答とコメントを参照してください。あなたの最初のモデルには、固定効果としての年齢や、2番目のモデルが持つランダムな効果の制約はありません。
追加された 著者 John Colby,
また、非常に基本的なモデルだけでなく、このパッケージを掘り下げたい場合は、付属の SとS-Plusの混合エフェクトモデルのコピーを入手することを強くおすすめします。 。これらのトピックすべてに関する章と例があります。非常に徹底的。
追加された 著者 John Colby,

2 答え

データをプロットすると、 age の効果がないことがわかります。そのため、 age のランダムな効果に合わせようとするのは奇妙です。収束していないのも不思議ではありません。

library(nlme)
library(ggplot2)

dev.new(width=6, height=3)
qplot(age, conc, data=IGF) + facet_wrap(~Lot, nrow=2) + geom_smooth(method='lm')

enter image description here

あなたがしたいことは、 Lot がインターセプトに与えるランダムな効果をモデル化することだと思います。固定効果として age を含めることはできますが、それは重要ではなく、投げ捨てられます。

> summary(lme(conc ~ 1 + age, data=IGF, random=~1|Lot))
Linear mixed-effects model fit by REML
 Data: IGF 
       AIC      BIC    logLik
  604.8711 618.7094 -298.4355

Random effects:
 Formula: ~1 | Lot
        (Intercept) Residual
StdDev:  0.07153912 0.829998

Fixed effects: conc ~ 1 + age 
                Value  Std.Error  DF  t-value p-value
(Intercept)  5.354435 0.10619982 226 50.41849  0.0000
age         -0.000817 0.00396984 226 -0.20587  0.8371
 Correlation: 
    (Intr)
age -0.828

Standardized Within-Group Residuals:
        Min          Q1         Med          Q3         Max 
-5.46774548 -0.43073893 -0.01519143  0.30336310  5.28952876 

Number of Observations: 237
Number of Groups: 10 
5
追加された
あなたの分析は確かにデータの中で何が起こっているのかという疑問に答えますが、実際には適合しているモデルの違いについてはまだ興味深い質問があります。上記の成功したモデルの結果を見ると、年代のランダムな効果に合っていることがわかります(ただし、モデルが過度に満たされていることを示す、複数のインターセプトのバリエーションとの完全な相関があります)。 ..)
追加された 著者 Ben Bolker,
はい、これは同じモデルであるように見えますが、 lme(c​​onc〜age、data = IGF、random =〜age | Lot)も失敗します。 (私は答えを少しだけ興味があるが、これをさらに続けていくために多くの努力を費やす傾向があるわけではない。それは、以下のカテゴリに分類されるように思われるからだ。 "" Doctor、it私はこれをすると痛い。 ""まあ、しないで... ")
追加された 著者 Ben Bolker,
OPのポストのモデルでは、年齢の勾配と、その勾配に Lot というランダムな効果が適合しています。データがそれをサポートしているなら、それは素晴らしいことです。その場合の良い例は、 lme(height〜age、data = Oxboys、random =〜1 + age | Subject)です。これは ggplot2 の§4.9.3の例でもあります。 OPのポストの最初のモデルは動作しませんが、固定効果構造で指定されていないものに対してはランダムな効果があります。私はそれが理にかなっているとは思わない。
追加された 著者 John Colby,
おお、あなたは今何を言っているのか分かります。それは、その groupedData オブジェクトに指定されているものに基づいて、ランダムな効果に加えられた特別な制約があるからです。 構造:一般的な正定値と言います。モデルを手動で lme(c​​onc = age、data = IGF、random = pdSymm(〜age))と同じように正確に指定します。
追加された 著者 John Colby,

私は他の古い答えがここでは不十分であることがわかります。私は、統計的に年齢が影響を受けていないケースと、逆に計算上のエラーが発生したケースを区別します。個人的に、私はこれら2つのケースを融合させてキャリアミスを犯しました。 Rは後者に信号を送り、私はそれがなぜであるかを知りたいと思います。

OPが指定したモデルは、ランダムなスロープとインターセプトを持つ成長モデルです。グランドインターセプトは含まれていますが、壮大な年齢の勾配ではありません。 「壮大な」項を加えずにランダムな勾配を当てはめることによって課される不安な制約の1つは、ランダムな勾配に0の平均を持たせることです。これは最適化が非常に困難です。限界的モデルは、年齢がモデルの0と統計的に有意な異なる値を持たないことを示している。さらに、固定効果として年齢を追加しても問題は解決されません。

> lme(conc~ age, random=~age|Lot, data=IGF)
Error in lme.formula(conc ~ age, random = ~age | Lot, data = IGF) : 
  nlminb problem, convergence error code = 1
  message = iteration limit reached without convergence (10)

ここでエラーは明らかです。反復回数を上げることが魅力的かもしれません。 lmeControl には多くの反復的推定があります。しかし、それでも動作しません:

> fit <- lme(conc~ 1, random=~age|Lot, data=IGF, 
control = lmeControl(maxIter = 1e8, msMaxIter = 1e8))

Error in lme.formula(conc ~ 1, random = ~age | Lot, 
data = IGF, control = lmeControl(maxIter = 1e+08,  : 
  nlminb problem, convergence error code = 1
  message = singular convergence (7)

したがって、これは正確なものではなく、オプティマイザは範囲外で実行されています。

フィッティングを提案した2つのモデルと、見つかったエラーを診断する方法には、大きな違いがあります。 1つの簡単なアプローチは、問題のあるモデルに対して「冗長」な適合を指定することです。

> lme(conc~ 1, random=~age|Lot, data=IGF, control = lmeControl(msVerbose = TRUE))
  0:     602.96050:  2.63471  4.78706  141.598
  1:     602.85855:  3.09182  4.81754  141.597
  2:     602.85312:  3.12199  4.97587  141.598
  3:     602.83803:  3.23502  4.93514  141.598
   (truncated)
 48:     602.76219:  6.22172  4.81029  4211.89
 49:     602.76217:  6.26814  4.81000  4425.23
 50:     602.76216:  6.31630  4.80997  4638.57
 50:     602.76216:  6.31630  4.80997  4638.57

The first term is the REML (I think). The second through fourth terms are the parameters to an object called lmeSt of class lmeStructInt, lmeStruct, and modelStruct. If you use Rstudio's debugger to inspect attributes of this object (the lynchpin of the problem), you'll see it is the random effects component that explodes here. coef(lmeSt) after 50 iterations produces reStruct.Lot1 reStruct.Lot2 reStruct.Lot3 6.316295 4.809975 4638.570586

上記のように、

> coef(lmeSt, unconstrained = FALSE)

    reStruct.Lot.var((Intercept)) reStruct.Lot.cov(age,(Intercept)) 
                         306382.7                         2567534.6 
            reStruct.Lot.var(age) 
                       21531399.4 

それは

Browse[1]> lmeSt$reStruct$Lot
Positive definite matrix structure of class pdLogChol representing
            (Intercept)      age
(Intercept)    306382.7  2567535
age           2567534.6 21531399

したがって、ランダム効果の共分散は、この特定のオプティマイザにとってここで爆発的なものであることは明らかです。 nlminb のPORTルーチンは、情報がないことから批判されています。 David Gay(Bell Labs)のテキストは、 http://ms.mcmasterです。 ca /〜bolker/misc/port.pdf PORTのドキュメントには、10億イタリックの "xが多すぎるかもしれない"というエラー7が示唆されています。アルゴリズムを修正するのではなく、類似の結果を生じるような近似的な結果があるかどうかを尋ねる必要があります。たとえば、 lmList オブジェクトに合わせて、ランダム切片とランダムスロープの分散を算出するのは簡単です。

> fit <- lmList(conc ~ age | Lot, data=IGF)
> cov(coef(fit))
            (Intercept)          age
(Intercept)  0.13763699 -0.018609973
age         -0.01860997  0.003435819

理想的には、これらはそれぞれの精度の重みによって重み付けされます。

nlme パッケージを使用するには、BFGSを使用した制約のない最適化でそのようなエラーが発生せず、同様の結果が得られることに注意してください。

> lme(conc ~ 1, data=IGF, random=~age|Lot, control = lmeControl(opt = 'optim'))
Linear mixed-effects model fit by REML
  Data: IGF 
  Log-restricted-likelihood: -292.9675
  Fixed: conc ~ 1 
(Intercept) 
   5.333577 

Random effects:
 Formula: ~age | Lot
 Structure: General positive-definite, Log-Cholesky parametrization
            StdDev      Corr  
(Intercept) 0.032109976 (Intr)
age         0.005647296 -0.698
Residual    0.820819785       

Number of Observations: 237
Number of Groups: 10 

このようなモデルの別の構文宣言は、もっと簡単な lme4 パッケージで行うことができます:

library(lme4)
lmer(conc ~ 1 + (age | Lot), data=IGF)

これにより、

> lmer(conc ~ 1 + (age | Lot), data=IGF)
Linear mixed model fit by REML ['lmerMod']
Formula: conc ~ 1 + (age | Lot)
   Data: IGF
REML criterion at convergence: 585.7987
Random effects:
 Groups   Name        Std.Dev. Corr 
 Lot      (Intercept) 0.056254      
          age         0.006687 -1.00
 Residual             0.820609      
Number of obs: 237, groups:  Lot, 10
Fixed Effects:
(Intercept)  
      5.331 

lmer とそのオプティマイザの属性は、最適化(および推定の統計効率)を簡素化するので、1、0、または-1に非常に近いランダム効果の相関を単純にそれらの値に設定するということです。実質的に。

これをまとめると、以前に述べたように年齢に影響がないことを示唆していません。この議論は数値結果によって裏付けられます。

3
追加された