我正在通过S中的混合效果模型和R中的S-Plus进行工作,但是某些代码无法以文本形式生成结果。在第6章中,其中一个示例未能与所提供的代码融合。
该示例是对Phenobarb
包随附的nlme
数据集执行的非线性混合效果模型。
library(nlme)
fm1Pheno.nlme <- nlme(model = conc ~ phenoModel(Subject, time, dose, lCl, lV),
data = Phenobarb,
fixed = lCl + lV ~ 1,
random = pdDiag(lCl + lV ~ 1),
start = c(-5,0),
na.action = na.pass,
naPattern = ~ !is.na(conc))
fm1Pheno.nlme
第一个模型运行良好,但是第二个模型基于第一个模型
fm2Pheno.nlme <- update( fm1Pheno.nlme,
fixed = list(lCl ~ Wt, lV ~ Wt + ApgarInd),
start = c(-5.0935, 0, 0.34259, 0, 0),
control = list(pnlsTol = 1e-6) )
..返回错误
Error in nlme.formula(model = conc ~ phenoModel(Subject, time, dose, lCl, :
maximum number of iterations (maxIter = 50) reached without convergence
第二个模型显然适用于S,但不适用于R。有人可以提出解决方案吗?错误是由于S和R之间的某些差异引起的吗?
最佳答案
我们可以通过调整pnlsTol
参数来解决此问题:
fm2Pheno.nlme <- update(fm1Pheno.nlme,
fixed = list(lCl ~ Wt, lV ~ Wt + ApgarInd),
start = c(-5.0935, 0, 0.34259, 0, 0),
control = list(pnlsTol = 0.019))
要了解为什么这样做,请尝试将
msVerbose = TRUE
添加到control
,并查看在公差参数较低的情况下值如何保持跳跃。增加pnlsTol
是解决此类收敛问题的一种非常普遍的方法,请参见,例如,关于r - R中出现nlme示例中的错误消息,但S中不出现,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52884290/