Pinheiro和Bates的非线性混合效应模型中的收敛问题

时间:2018-12-26 22:33:49

标签: r nlme

我不断遇到的问题(请参见herehere)使Pinheiro和Bates的第8章中的非线性混合效应模型收敛。这次使用main数据集(第385页)。再次,这是一个迭代的模型构建练习。我在系列中的第三个模型上遇到了麻烦。

Quinidine

现在麻烦的模型了

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

似乎要使这些非线性模型收敛于R所需要的技巧要比线性混合效应模型还要多。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:3)

这一次,我们可以借助两件事实现收敛:不同的初始值和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并指定良好的初始值。)