Подтвердить что ты не робот

Перезапустить модель смешанной модели с предварительно оцененными значениями

Я использую lmer() в пакете lme4 для оценки моделей смешанных эффектов. Это хорошо работает, но теперь я хочу запустить процесс оценки для фиксированного количества итераций, а затем возобновить процесс, указав начальные значения, рассчитанные последним процессом оценки.

В соответствии с помощью для ?lmer это возможно, установив аргументы:

  • start - это новые стартовые значения, и в соответствии с помощью вы можете извлечь значение в слот ST из модели и использовать их, т.е. использовать [email protected]
  • maxiter - поставляется как именованный аргумент control

Итак, предположим, что я хочу поместить lme с использованием данных iris, можно попробовать следующее:

library(lme4)

# Fit model with limited number of iterations

frm <- "Sepal.Length ~ Sepal.Width | Species"

x <- lmer(frm, data=iris, 
          verbose=TRUE, control=list(maxIter=1), model=FALSE)

# Capture starting values for next set of iterations
start <- list([email protected])

# Update model
twoStep <-  lmer(frm, data=iris, 
          verbose=TRUE, control=list(maxIter=100), model=TRUE, 
          start=start)

Это работает. Взгляните на вывод, где первый столбец - это REML, то есть максимальный вероятность случайного эффекта. Обратите внимание, прежде всего, что REML в модели 2 начинается там, где заканчивается модель 1:

> x <- lmer(frm, data=iris, 
+           verbose=TRUE, control=list(maxIter=1), model=FALSE)
  0:     264.60572: 0.230940 0.0747853  0.00000
  1:     204.22878: 0.518239  1.01025 0.205835
  1:     204.22878: 0.518239  1.01025 0.205835

> # Capture starting values for next set of iterations
> start <- list([email protected])

> # Update model
> twoStep <-  lmer(frm, data=iris, 
+           verbose=TRUE, control=list(maxIter=100), model=TRUE, 
+           start=start)
  0:     204.22878: 0.518239  1.01025 0.205835
  1:     201.51667: 0.610272  2.00277 0.286049
  2:     201.46706: 0.849203  1.94906 0.358809
  3:     201.44614: 0.932371  1.88581 0.482423
  4:     201.39421:  1.00909  1.71078 0.871824
  5:     201.36543:  1.00643  1.60453  1.01663
  6:     201.31066:  1.00208  1.35520  1.27524
  7:     201.28458:  1.08227  1.22335  1.35147
  8:     201.24330:  1.50333 0.679759  1.31698
  9:     201.11881:  1.95760 0.329767 0.936047

Однако, когда у меня другое значение maxIters, это больше не работает:

x <- lmer(frm, data=iris, 
          verbose=TRUE, control=list(maxIter=3), model=FALSE)
start <- list([email protected])
twoStep <-  lmer(frm, data=iris, 
                 verbose=TRUE, control=list(maxIter=100), model=TRUE, 
                 start=start)

Обратите внимание, что значение REML перезапускается при 264, то есть в начале:

> x <- lmer(frm, data=iris, 
+           verbose=TRUE, control=list(maxIter=3), model=FALSE)
  0:     264.60572: 0.230940 0.0747853  0.00000
  1:     204.22878: 0.518238  1.01025 0.205835
  2:     201.94075:  0.00000  1.51757 -1.18259
  3:     201.71473:  0.00000  1.69036 -1.89803
  3:     201.71473:  0.00000  1.69036 -1.89803

> # Capture starting values for next set of iterations
> start <- list([email protected])

> # Update model
> twoStep <-  lmer(frm, data=iris, 
+           verbose=TRUE, control=list(maxIter=100), model=TRUE, 
+           start=start)
  0:     264.60572: 0.230940 0.0747853  0.00000
  1:     204.22878: 0.518238  1.01025 0.205835
  2:     201.94075:  0.00000  1.51757 -1.18259
  3:     201.71473:  0.00000  1.69036 -1.89803
  4:     201.64641:  0.00000  1.82159 -2.44144
  5:     201.63698:  0.00000  1.88282 -2.69497
  6:     201.63649:  0.00000  1.89924 -2.76298
  7:     201.63649: 4.22291e-08  1.90086 -2.76969
  8:     201.63649: 4.22291e-08  1.90086 -2.76969

Вопрос: Как я могу надежно перезапустить lmer() с начальными значениями, полученными из ранее установленной модели?


Информация о сеансе:

packageVersion("lme4")
[1] ‘0.999999.2’
4b9b3361

Ответ 1

Это подтвержденная ошибка в lme4 и в соответствии с комментариями

Я зарегистрировал проблему на github.com/lme4/lme4/issues/55 - Andrie Jul 2 '13 at 15:42

Это должно быть исправлено сейчас для lmer (хотя и не для мерцания, что немного сложнее). - Бен Болкер 14 июля

Это было тогда, когда версия была < 0.99999911-6; lme4 на CRAN с версией версии 1.0-4 с 21 сентября 2013 года.