Я использую 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’