Obteniendo predicciones de efectos fijos solo del modelo mixto en datos nuevos en R


8

Me gustaría construir predicciones para un modelo mixto (logística a través de glmer) en un nuevo conjunto de datos usando solo los efectos fijos, manteniendo los efectos aleatorios en 0. Pero tengo problemas para configurar la matriz del modelo para poder calcularlos.

Dado que la clase mer no tiene un método de predicción, y dado que quiero omitir los efectos aleatorios para las predicciones en el nuevo conjunto de datos, creo que necesito construir una matriz modelo para los efectos fijos de la misma estructura utilizada en el original modelo, pero utilizando los nuevos datos. Luego multiplique por los coeficientes de efectos fijos en el modelo.

La parte de efectos fijos de mi fórmula modelo contiene factores y términos de interacción entre efectos fijos numéricos, por lo que es un poco más complicado que simplemente extraer las variables fijas de la matriz. Por ejemplo, necesito asegurarme de que el factor de expansión de contraste sea el mismo que el original, que los términos de interacción estén correctamente listados, etc.

Entonces, mi pregunta es: ¿cuál es el enfoque general más directo para construir una nueva matriz modelo que imite la estructura de la matriz modelo original utilizada para crear el modelo?

He intentado model.matrix (my.model, data = newdata) pero parece que devuelve la matriz del modelo original, no una basada en newdata.

Código de muestra:

library(lme4)

cake2 <- head(cake) # cake2 is "new" data frame for future predictions

# recipe is a fixed effect factor, temp is fixed effect numeric, replicate is random effect
m <- lmer(angle ~ temp + recipe + (1 | replicate), data=cake)
summary(m)

nrow(cake2)         # but new data frame has 6 rows
nrow(cake)          # original data frame has 270 rows

# attempt to make new model matrix using different data frame
mod.mat.cake2 <- model.matrix(m, data=cake2)
nrow(mod.mat.cake2) # 270 rows, same as orig data frame

Probé otros métodos, como extraer los términos de la fórmula y construir una nueva fórmula a partir de eso, pero parecía demasiado complicado y frágil en el manejo de factores y términos de interacción.

¿Cómo puedo hacer que mod.mat.cake2 sea una matriz de modelo de efectos fijos basada en la fórmula en m, pero usando valores de cake2? ¿O hay una manera más fácil de obtener predicciones solo de efectos fijos de un modelo anterior?

Toda ayuda es apreciada. Gracias.


Enfoque muy crudo pero simple: si el tiempo de cálculo no es un factor importante (es decir, no tiene que hacer esto muchas veces), puede ajustar los nuevos datos lm()y extraer la matriz del modelo del ajuste, y aplicarlo al coeficientes del modelo del ajuste anterior.
Macro

Respuestas:


13

Tal vez esto es trampa, pero

fixedformula <- as.formula(lme4.0:::nobars(formula(m))[-2])
model.matrix(fixedformula,newdata=cake2)

Nota:

  • Estoy usando lme4.0aquí, que es la versión R-forja de "viejo" (CRAN) lme4: se puede sustituir lme4por lme4.0en el código anterior
  • la nueva versión (r-forge / development) de lme4tiene un predictmétodo: en ese caso

    predict(m,re.form=NA,newdata=cake2)

funciona bien ( re.form=NAestablece todos los efectos aleatorios a cero, equivalentes a level=0los anteriores predict.lme)


1
Gracias Ben Tuve problemas para que la primera solución funcionara correctamente. Pero cambiar a la versión de desarrollo de lme4 y usar la función predic / REform = NA hace el truco sin tener que meterse con los detalles de la matriz del modelo. Hay un par de características que aún no parecen implementarse en la versión de desarrollo que estaba usando en mi código (en particular, parece que no puedo extraer el efecto aleatorio postVars tan fácilmente), pero prefiero ser capaz de usar la función de predicción y esperar hasta que el nuevo lme4 esté completo para las otras piezas.
coronel.triq

Puede ser obvio, pero si pudieras escribir un ejemplo (muy) pequeño y autónomo de lo que quieres hacer que no funciona en la versión de desarrollo y
enviármelo
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.