【问题标题】:error in nlme package [closed]nlme 包中的错误[关闭]
【发布时间】:2014-06-05 10:19:10
【问题描述】:

我试图使用 r 中的 nlme 包来做一个多级线性模型。

对于 6 个不同的位置(州),我将产量作为响应变量,将降雨量作为预测变量,持续 60 年。我想看看降雨是否对所有地区的产量产生相同程度的影响或不同的影响。原则上,我试图查看产量与降雨量的斜率是否在不同地点之间存在显着差异。因此降雨是我的随机效应。我这样构建模型:

  # baseline model which only includes intercept
  mdl1<-gls(yield ~ 1,data = data, method="ML")

  #intercept as random effect
  mdl2<-lme(yield ~ 1,data=data,random = ~1|state,method="ML")  

  # slope as random effect
  mdl3<-lme(yield ~ rain, data = data, random = ~rain|state,method="ML")

  ##compare the three model
  anova(mdl1,mdl2,mdl3)
  #this shows me when I add slope as random effect, my model shows better fit compared to baseline model (mdl1)

一切正常。当我使用另一个预测变量(计数数据)进行相同的分析时,问题就开始了。

 # baseline model which only includes intercept: Works fine
 mdl4<-gls(yield ~ 1,data = data, method="ML")

 #intercept as random effect - works fine
mdl5<-lme(yield ~ 1,data=data,random = ~1|state,method="ML")  

 # include different predictor (break) this time instead of rain
 mdl6<-lme(yield ~ break, data = data, random = ~break|state,method="ML")

当我运行 mdl 6 时,这给了我错误

 Error in lme.formula(res_yld ~ brk, data = data, random = ~brk | state,  : 
 nlminb problem, convergence error code = 1
 message = iteration limit reached without convergence (10)

我完全不知道为什么会这样。我的第一个预测器一切正常,但这不适用于另一个预测器。我在这里做错了什么?我尝试在网上阅读此内容,但这些帖子对我来说不是很清楚。我真的很感激任何人都可以解决这个问题。谢谢

【问题讨论】:

  • 除了下面的答案之外,我还建议 (1) 绘制您的数据以直观地了解此响应值是否存在奇怪之处(例如异常点或组、强非线性等) ; (2) 可能尝试lme4::lmer(yield ~ break+(break|state), data = data, REML=FALSE); (3) 如果您需要更多帮助,请发布可重现的示例。

标签: r nlme


【解决方案1】:

从错误信息中,您可以看到在算法收敛之前达到了最大迭代次数。从文档中,您似乎可以通过以下方式增加它:

lmeControl(msMaxIter = 50)

但请注意,缓慢收敛也可能指向不适定问题。因此,请检查您是否确实可以从数据中估算出您要估算的内容。

【讨论】:

  • 感谢您的评论。我会试试这个。你把 lmeControl(msMaxIter = 50) 选项放在哪里?是在模型内还是单独?
  • @user3013423 根据文档,您只需单独运行它。
猜你喜欢
  • 2021-01-18
  • 2016-05-29
  • 1970-01-01
  • 2010-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多