简体   繁体   中英

Trouble with Convergence in Non-Linear Mixed-Effects Model from Pinheiro and Bates

My ongoing problems (see here and here ) making the nonlinear mixed effects models in Chapter 8 of Pinheiro and Bates converge continue. This time with the Quinidine dataset (p. 385). Once again this is an iterative model-building exercise. I am having trouble with the third model in the series.

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)

Now for the troublesome model

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))

I tried setting the maximum number of iterations higher in nlmeControl but keep getting similar error messages

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

It seems as if there is more finesse required in getting these nonlinear models to converge in R than with the linear mixed-effects models. Any help much appreciated.

This time we may achieve convergence with the help of two things: different initial values and a different value for 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))

Note that the default value of pnlsTol is 0.001, so the change is really tiny. The starting values are actually the ones provided in the book as the optimal solution, so it's kind of cheating. However, fm3Quin.nlme converges to a slightly different values... In this case my guess would be that the function is very nonlinear and the achieved optimum is very close to other much larger values, hence the complicated convergence. (I'm guessing this because of the need to increase pnlsTol and to specify good initial values.)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM