Сообщение об ошибке в примере NLME присутствует в R, но не в S - PullRequest
0 голосов
/ 19 октября 2018

Я работаю через Модели смешанных эффектов в S и S-Plus в R, но часть кода не дает результатов в текстовом виде.В главе 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?

1 Ответ

0 голосов
/ 27 декабря 2018

Мы можем справиться с этим, изменив параметр 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 является довольно распространенным способом решения таких проблем конвергенции, см., Например,

...