R nlme错误

R nlme错误,r,R,对于来自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) 但是这个代码一切

对于来自
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 

由于IGF
IGF
groupedData
,因此这两个代码是相同的。我不明白为什么第一个代码会产生错误。感谢您的时间和帮助。

如果您绘制数据,您可以看到年龄没有影响,因此尽管如此,尝试拟合年龄的随机影响似乎很奇怪。难怪它没有收敛

library(nlme)
library(ggplot2)

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

我想你要做的是模拟截距上的
Lot
的随机效应。我们可以尝试将
年龄
作为一种固定效应,但我们会发现它并不显著,可以被丢弃:

>总结(lme(浓度1+年龄,数据=IGF,随机=1 |批次))
线性混合效应模型的REML拟合
资料来源:IGF
AIC BIC logLik
604.8711 618.7094 -298.4355
随机效应:
公式:~1 |批
(截取)剩余
标准差饷租值:0.07153912 0.829998
固定效果:conc~1+年龄
值标准误差DF t值p值
(截距)5.354435 0.10619982 226 50.41849 0.0000
年龄-0.000817 0.00396984 226-0.20587 0.8371
相关性:
(国际)
年龄-0.828
集团内标准化残差:
最小第一季度中期第三季度最大
-5.46774548 -0.43073893 -0.01519143  0.30336310  5.28952876 
观察次数:237
组别数目:10

我觉得这里的另一个老答案不令人满意。我区分了在统计上年龄没有影响的情况和相反我们遇到计算错误的情况。就我个人而言,我把这两个案例混为一谈,犯了职业上的错误。R已经发出了后者的信号,我想深入探讨这是为什么

OP指定的模型是具有随机斜率和截距的增长模型。包括大截距,但不包括大年龄坡度。通过拟合随机坡度而不添加其“大”项所施加的一个令人讨厌的约束是,您强制随机坡度具有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)
这里的错误是显而易见的。设置迭代次数可能很有诱惑力
LME控制
有许多迭代估计。但即使这样也不行:

> 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)
第一个术语是REML(我想)。第二项到第四项是类
lmeststructin
lmeststruct
modelStruct
中名为
lmeSt
的对象的参数。如果使用Rstudio的调试器检查此对象的属性(问题的关键),您将看到此处爆炸的是随机效果组件<代码>coef(lmeSt)在50次迭代后生成

struct.Lot1 struct.Lot2 struct.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
中的端口例程因其非信息性错误而受到批评。David Gay(贝尔实验室)的文本在这里。端口文档表明,使用10亿iter max“x”可能有太多的免费组件,导致错误7。请参阅§5。与其修正算法,不如问一下是否有近似的结果可以产生类似的结果。例如,很容易将
lmList
对象拟合为随机截距和随机斜率方差:

> fit <- lmList(conc ~ age | Lot, data=IGF)
> cov(coef(fit))
            (Intercept)          age
(Intercept)  0.13763699 -0.018609973
age         -0.01860997  0.003435819
使用更简单的
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的随机效应相关性被简单地设置为这些值,因为它大大简化了优化(以及估计的统计效率)


综上所述,这并不意味着年龄没有影响,正如前面所说的,这个论点可以由数字结果来支持。

我快速看了一下这个,没有任何东西跳出来。在
r-sig-mixed-models
邮件列表中,您可能会有更好的运气,其中熟悉此软件包的人更为集中……您是否尝试过在第一个示例中增加迭代限制?请参阅
?lmeControl
。请参阅下面的答案和注释。你的第一个模型没有固定的年龄效应,也没有第二个模型所具有的随机效应约束。此外,如果你想深入研究这个包,而不仅仅是非常基本的模型,我强烈建议你买一本随附的书S和S-Plus中的混合效应模型。它有关于所有这些主题的章节和例子。非常透彻。@JohnColby:我从书中摘录了这段代码。你的分析肯定回答了数据中发生了什么的问题,但仍然有一个有趣的问题,关于实际拟合的模型之间的差异是什么。查看上述成功模型的结果,您可以看到它确实符合年龄的随机效应(尽管与批次间截距变化存在完美的相关性,表明模型拟合过度…),OP帖子中的模型确实适用于拟合
年龄
斜率,在该坡度上具有
Lot
的随机效应。如果数据支持,这是一件好事。在这种情况下,举一个很好的例子,请使用lme(身高~年龄,数据=Oxboys,随机=1+年龄|受试者)。这也是
ggplot2
一书§4.9.3中的示例。OP文章中的第一个模型不起作用,它对固定效果结构中未指定的内容具有随机效果。我甚至不认为这意味着什么
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