¿Cómo puedo obtener efectos aleatorios agrupados para lmer después de una imputación múltiple?
Estoy usando ratones para imputar múltiples un marco de datos. Y lme4 para un modelo mixto con intercepción aleatoria y pendiente aleatoria. Agrupar lmer funciona bien, excepto que no agrupa los efectos aleatorios. He buscado mucho una solución sin suerte. Probé el paquete mi, sin embargo, solo veo resultados agrupados para la estimación y std.error. Intenté exportar objetos de ratones a spss sin suerte. Vi un poco de discusión sobre Zelig. Pensé que eso podría resolver mi problema. Sin embargo, no pude descubrir cómo usar el paquete con datos imputados para lmer.
Sé que el paquete de ratones solo admite la combinación de los efectos fijos. ¿Hay alguna solución?
Imputación múltiple:
library(mice)
Data <- subset(Data0, select=c(id, faculty, gender, age, age_sqr, occupation, degree, private_sector, overtime, wage))
ini <- mice(Data, maxit=0, pri=F) #get predictor matrix
pred <- ini$pred
pred[,"id"] <- 0 #don't use id as predictor
meth <- ini$meth
meth[c("id", "faculty", "gender", "age", "age_sqr", "occupation", "degree", "private_sector", "overtime", "wage")] <- "" #don't impute these variables, use only as predictors.
imp <- mice(Data, m=22, maxit=10, printFlag=TRUE, pred=pred, meth=meth) #impute Data with 22 imputations and 10 iterations.
Modelo multinivel:
library(lme4)
fm1 <- with(imp, lmer(log(wage) ~ gender + age + age_sqr + occupation + degree + private_sector + overtime + (1+gender|faculty))) #my multilevel model
summary(est <- pool(fm1)) #pool my results
Actualizar resultados de lmer agrupados:
> summary(est <- pool(fm1))
est se t df Pr(>|t|) lo 95 hi 95 nmis fmi lambda
(Intercept) 7,635148e+00 0,1749178710 43,649905006 212,5553 0,000000e+00 7,2903525425 7,9799443672 NA 0,2632782 0,2563786
Gender -1,094186e-01 0,0286629154 -3,817427078 117,1059 2,171066e-04 -0,1661834550 -0,0526537238 NA 0,3846276 0,3742069
Occupation1 1,125022e-01 0,0250082538 4,498601518 157,6557 1,320753e-05 0,0631077322 0,1618966049 NA 0,3207350 0,3121722
Occupation2 2,753089e-02 0,0176032487 1,563966385 215,6197 1,192919e-01 -0,0071655902 0,0622273689 NA 0,2606725 0,2538465
Occupation3 1,881908e-04 0,0221992053 0,008477365 235,3705 9,932433e-01 -0,0435463305 0,0439227120 NA 0,2449795 0,2385910
Age 1,131147e-02 0,0087366178 1,294719230 187,0021 1,970135e-01 -0,0059235288 0,0285464629 0 0,2871640 0,2795807
Age_sqr -7,790476e-05 0,0001033263 -0,753968159 185,4630 4,518245e-01 -0,0002817508 0,0001259413 0 0,2887420 0,2811131
Overtime -2,376501e-03 0,0004065466 -5,845581504 243,3563 1,614693e-08 -0,0031773002 -0,0015757019 9 0,2391179 0,2328903
Private_sector 8,322438e-02 0,0203047665 4,098760934 371,9971 5,102752e-05 0,0432978716 0,1231508962 NA 0,1688478 0,1643912
Falta esta información, que obtengo cuando ejecuto lmer sin imputación múltiple:
Random effects:
Groups Name Variance Std.Dev. Corr
Faculty (Intercept) 0,008383 0,09156
Genderfemale0,002240 0,04732 1,00
Residual 0,041845 0,20456
Number of obs: 698, groups: Faculty, 17
fuente
Respuestas:
Puede hacerlo un poco a mano si aprovecha la
lapply
funcionalidad de R y la estructura de lista que devuelve elAmelia
paquete de imputación múltiple. Aquí hay un script de ejemplo rápido.Amelia
es similar amice
lo que puede sustituir sus variables desde lamice
llamada aquí; este ejemplo es de un proyecto en el que estaba trabajando.a.out
es el objeto de imputación, ahora necesitamos ejecutar el modelo en cada conjunto de datos imputado. Para hacer esto, usamos lalapply
función en R para repetir una función sobre los elementos de la lista. Esta función aplica la función, que es la especificación del modelo, a cada conjunto de datos (d) en la lista y devuelve los resultados en una lista de modelos.Ahora creamos un data.frame a partir de esa lista, simulando los valores de los efectos fijos y aleatorios usando las funciones FEsim y REsim del paquete merTools
Los data.frames anteriores incluyen estimaciones separadas para cada conjunto de datos, ahora necesitamos combinarlos usando un colapso como colapso de argumento
Ahora también podemos extraer algunas estadísticas sobre la varianza / covarianza de los efectos aleatorios en los valores imputados. Aquí he escrito dos funciones extractoras simples para hacer esto.
Y ahora podemos aplicarlos a los modelos y almacenarlos como un vector:
Actualizar
Las funciones a continuación te llevará mucho más cerca de la salida proporcionada por
arm::display
operando en la lista delmer
oglmer
objetos. Esperemos que esto se incorpore almerTools
paquete en un futuro cercano:fuente
lmerModList
alprint
método que combina los resultados de las listas de modelos.También puede usar la función testEstimates después de la imputación con ratones, testEstimates (as.mitml.result (fm1), var.comp = T) $ var.comp
fuente