regresion - Reinicie la estimación del modelo de efectos mixtos con los valores estimados previamente
para que sirven los modelos lineales generalizados (1)
Este fue un error confirmado en lme4 y según los comentarios
He registrado un problema en github.com/lme4/lme4/issues/55 - Andrie Jul 2 ''13 a las 15:42
Esto debería arreglarse ahora para lmer (aunque no para glmer, que es un poco más complicado). - Ben Bolker Jul 14
Eso fue cuando la versión era <0.99999911-6; lme4 en CRAN ha tenido versiones> 1.0-4 desde el 21 de septiembre de 2013.
Estoy usando lmer()
en el paquete lme4
para estimar modelos de efectos mixtos. Esto funciona bien, pero ahora quiero ejecutar el proceso de estimación para un número fijo de iteraciones, luego reanudo el proceso especificando los valores de inicio, según lo calculado por el último proceso de estimación.
De acuerdo con la ayuda para el ?lmer
esto es posible, estableciendo los argumentos:
-
start
- estos son los nuevos valores de inicio, y de acuerdo con la ayuda uno puede extraer el valor en la ranuraST
de un modelo ajustado y usarlos, es decir, usarx@ST
-
maxiter
- suministrado como un argumento nombrado paracontrol
Entonces, por ejemplo, supongamos que quiero ajustar un lme
usando los datos del iris
, uno puede intentar esto:
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(ST=x@ST)
# Update model
twoStep <- lmer(frm, data=iris,
verbose=TRUE, control=list(maxIter=100), model=TRUE,
start=start)
Esto funciona. Eche un vistazo a la salida, donde la primera columna es la REML, es decir, la máxima verosimilitud del efecto aleatorio. Observe especialmente que el REML en el modelo 2 comienza donde termina el modelo 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(ST=x@ST)
> # 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
Sin embargo, cuando tengo un valor diferente de maxIters
esto ya no funciona:
x <- lmer(frm, data=iris,
verbose=TRUE, control=list(maxIter=3), model=FALSE)
start <- list(ST=x@ST)
twoStep <- lmer(frm, data=iris,
verbose=TRUE, control=list(maxIter=100), model=TRUE,
start=start)
Observe que el valor de REML se reinicia en 264 , es decir, el comienzo:
> 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(ST=x@ST)
> # 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
Pregunta: ¿Cómo puedo reiniciar confiablemente lmer()
con los valores de inicio obtenidos a partir de un modelo ajustado previamente?
Información de la sesión:
packageVersion("lme4")
[1] ‘0.999999.2’