Ошибка модели для нелинейной модели смешанных эффектов от Пиньеро и Бейтса

Я работал с Моделями смешанных эффектов в S и S-Plus Пиньеро и Бейтса и обнаружил много проблем, заставляющих работать модели из книги.

Последним является использование функции постоянной плюс мощности для моделирования гетероскедастической внутригрупповой ошибки в наборе данных Theo (стр. 393). Ошибка возникает в конце упражнения по построению модели. Первые три модели работают в R, а последняя — нет.

library(nlme)
fm1Theo.nlme <- nlme( model = conc ~ SSfol(Dose, Time, lKe, lKa, lCl), 
                      data = Theoph,
                      fixed = lKe + lKa + lCl ~ 1,
                      random = lKe + lKa + lCl ~ 1)
fm2Theo.nlme <- update(fm1Theo.nlme, random = pdDiag(list(lKe ~ 1, lKa ~ 1, lCl ~ 1)))
fm3Theo.nlme <- update(fm2Theo.nlme, random = pdDiag(list(lKa ~ 1, lCl ~ 1)))
fm4Theo.nlme <- update(fm3Theo.nlme, weights = varConstPower(power=0.1))

... выдает сообщение об ошибке

Error in eigen(val, only.values = TRUE) : 
  infinite or missing values in 'x'
In addition: Warning messages:
1: In nlminb(c(coef(nlmeSt)), function(nlmePars) -logLik(nlmeSt, nlmePars),  :
  NA/NaN function evaluation
2: In nlminb(c(coef(nlmeSt)), function(nlmePars) -logLik(nlmeSt, nlmePars),  :
  NA/NaN function evaluation
3: In nlminb(c(coef(nlmeSt)), function(nlmePars) -logLik(nlmeSt, nlmePars),  :
  NA/NaN function evaluation
4: In nlminb(c(coef(nlmeSt)), function(nlmePars) -logLik(nlmeSt, nlmePars),  :
  NA/NaN function evaluation

Может ли кто-нибудь пролить свет на это сообщение и как я могу заставить его работать?


person llewmills    schedule 26.12.2018    source источник


Ответы (1)


Похоже, что то, что должно было быть положительным, во время оптимизации стало отрицательным: такие функции, как sqrt и log, при применении к отрицательным числам возвращают NaN. Не копая глубже, я попытался изучить модель дисперсии, которая должна возвращать положительные значения. Установка более высокого начального значения для const решает проблему:

fm4Theo.nlme <- update(fm3Theo.nlme, weights = varConstPower(const = 0.5, power = 0.1))
person Julius Vainora    schedule 26.12.2018
comment
еще раз спасибо @Julius Vainora. Кажется, что в нелинейных моделях требуется гораздо больше настроек, чем в линейных. Где ты всему этому научился? Кстати, я только что выложил другую модель из той же книги, которая также не сошлась. - person llewmills; 27.12.2018
comment
@llewmills, на самом деле ничего конкретного, мой опыт работы в области эконометрики / статистики, так что я думаю, что это всего понемногу. Конечно, часто бывает довольно много проб и ошибок. В вашем случае fm4Theo.nlme по сравнению с fm3Theo.nlme добавляет только эту модель дисперсии (отсюда главный подозреваемый), которая имеет параметры и должна возвращать положительные значения. Затем я нашел еще один параметр в varConstPower. Итак, одно привело к другому. - person Julius Vainora; 27.12.2018
comment
Что ж, надеюсь, ваши решения помогут другим людям, работающим над книгой в R. - person llewmills; 27.12.2018