【问题标题】:Trouble with Convergence in Non-Linear Mixed-Effects Model from Pinheiro and BatesPinheiro 和 Bates 的非线性混合效应模型中的收敛问题
【发布时间】:2018-12-26 22:33:48
【问题描述】:

我持续存在的问题(参见herehere)使 Pinheiro 和 Bates 的第 8 章中的非线性混合效应模型收敛继续。这次是 Quinidine 数据集(第 385 页)。这又是一个迭代的模型构建练习。我在使用该系列的第三个模型时遇到了问题。

library(nlme)
fm1Quin.nlme <- nlme(conc ~ quinModel(Subject, time, conc, dose, interval, lV, lKa, lCl),
                     data = Quinidine, 
                     fixed = lV + lKa + lCl ~ 1,
                     random = pdDiag(lV + lCl ~ 1),
                     groups = ~ Subject,
                     start = list(fixed = c(5, -0.3, 2)),
                     na.action = na.pass, # R does not have the function na.include
                     naPattern = ~ !is.na(conc))
fm1Quin.fix <- fixef(fm1Quin.nlme)
fm2Quin.nlme <- update(fm1Quin.nlme, 
                       fixed = list(lCl ~ glyco, lKa + lV ~ 1),
                       start = c(fm1Quin.fix[3], 0, fm1Quin.fix[2:1]))
fm2Quin.fix <- fixef(fm2Quin.nlme)

现在是麻烦的模型

fm3Quin.nlme <- update(fm2Quin.nlme,
                       fixed = list(lCl ~ glyco + Creatinine, lKa + lV ~ 1),
                       start = c(fm2Quin.fix[1:2], 0.2, fm2Quin.fix[3:4]),
                       control = nlmeControl(maxIter = 50))

我尝试在nlmeControl 中设置更高的最大迭代次数,但不断收到类似的错误消息

Error in nlme.formula(model = conc ~ quinModel(Subject, time, conc, dose,  : 
  maximum number of iterations (maxIter = 50) reached without convergence
In addition: Warning messages:
1: In nlme.formula(model = conc ~ quinModel(Subject, time, conc, dose,  :
  Singular precision matrix in level -1, block 1
2: In nlme.formula(model = conc ~ quinModel(Subject, time, conc, dose,  :
  Singular precision matrix in level -1, block 1
3: In nlme.formula(model = conc ~ quinModel(Subject, time, conc, dose,  :
  Singular precision matrix in level -1, block 1
4: In nlme.formula(model = conc ~ quinModel(Subject, time, conc, dose,  :
  Singular precision matrix in level -1, block 1
5: In nlme.formula(model = conc ~ quinModel(Subject, time, conc, dose,  :
  Singular precision matrix in level -1, block 1
6: In nlme.formula(model = conc ~ quinModel(Subject, time, conc, dose,  :
  Singular precision matrix in level -1, block 1
7: In nlme.formula(model = conc ~ quinModel(Subject, time, conc, dose,  :
  Singular precision matrix in level -1, block 1

似乎使这些非线性模型在 R 中收敛比使用线性混合效应模型需要更多的技巧。非常感谢任何帮助。

【问题讨论】:

  • fm1Quin.fix 当前未定义。
  • 对不起@Julius Vainora,我已经添加了这个。它仍然无法收敛。

标签: r nlme


【解决方案1】:

这次我们可以借助两件事来实现收敛:不同的初始值和pnlsTol的不同值:

fm3Quin.nlme <- update(fm2Quin.nlme,
                       fixed = list(lCl ~ glyco + Creatinine, lKa + lV ~ 1),
                       start = c(3.0291, -0.3631, 0.1503, -0.7458, 5.2893),
                       control = nlmeControl(pnlsTol = 0.0011))

注意pnlsTol的默认值是0.001,所以变化很小。起始值实际上是书中提供的最佳解决方案,所以这是一种作弊。但是,fm3Quin.nlme 收敛到稍微不同的值...在这种情况下,我的猜测是该函数非常非线性,并且实现的最优值非常接近其他更大的值,因此收敛复杂。 (我猜这是因为需要增加pnlsTol 并指定好的初始值。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-22
    • 1970-01-01
    • 2017-04-03
    • 2015-05-26
    • 2017-09-28
    • 2018-07-26
    • 1970-01-01
    相关资源
    最近更新 更多