La imputación utilizando medias internas no es una buena idea, ya que dará lugar a errores estándar sesgados (demasiado pequeños) y posiblemente a estimaciones sesgadas.
Suponiendo que los datos faltan al azar, una idea mucho mejor es utilizar la imputación múltiple. La dirección mice
en R tiene la capacidad de imputar variables continuas en un marco de efectos mixtos con un único efecto aleatorio (variable de agrupación) - basta con especificar 2l.norm
como variable de agrupación. Por ejemplo, supongamos que nuestro modelo de análisis es
> require(mice)
> require(lme4)
> m0 <- lmer(teachpop~sex+texp+popular + (1|school), data=popmis)
> confint(m0)
2.5 % 97.5 %
.sig01 0.44905533 0.62574295
.sigma 0.54368549 0.59259188
(Intercept) 2.03118933 2.67864796
sex -0.07108881 0.09183821
texp 0.03024598 0.06505065
popular 0.22257646 0.32572600
Debido a la falta de datos en el predictor popular
este modelo puede estar sesgado. Así que utilizaremos la imputación múltiple:
> ini <- mice(popmis, maxit=0)
> (pred <- ini$pred)
pupil school popular sex texp const teachpop
pupil 0 0 0 0 0 0 0
school 0 0 0 0 0 0 0
popular 1 1 0 1 1 0 1
sex 0 0 0 0 0 0 0
texp 0 0 0 0 0 0 0
const 0 0 0 0 0 0 0
teachpop 0 0 0 0 0 0 0
Es la matriz predictora por defecto para el modelo de imputación. Sólo popular
tiene valores perdidos, y vamos a imputarlos utilizando un modelo mixto donde school
es el factor de agrupación, y las demás variables son efectos fijos. Para ello, utilizamos -2
contar mice
que la escuela es la variable de agrupación, y 2
para los efectos fijos:
> pred["popular",] <- c(0, -2, 0, 2, 2, 2, 0)
> (pred)
Así que ahora tenemos:
pupil school popular sex texp const teachpop
pupil 0 0 0 0 0 0 0
school 0 0 0 0 0 0 0
popular 0 -2 0 2 2 2 0
sex 0 0 0 0 0 0 0
texp 0 0 0 0 0 0 0
const 0 0 0 0 0 0 0
teachpop 0 0 0 0 0 0 0
Hemos configurado la matriz de predicción, por lo que ahora podemos crear 10 conjuntos de datos imputados múltiples utilizando la función 2l.norm
para imputar valores para popular
> imp <- mice(popmis, meth = c("","","2l.norm","","","",""), pred = pred, maxit=10, m = 10)
Ahora ejecutamos el modelo mixto en cada uno de los conjuntos de datos imputados:
> fit <- with(imp, lmer(teachpop~sex+texp+popular + (1|school)))
...y poner en común los resultados:
> summary(pool(fit))
est se t df Pr(>|t|) lo 95 hi 95 nmis
(Intercept) 2.73951576 0.165053863 16.597708 1991.5874 0.000000e+00 2.41581941 3.06321211 NA
sex 0.08620420 0.031042794 2.776947 915.1865 5.599307e-03 0.02528087 0.14712753 0
texp 0.05682495 0.009713717 5.849970 1991.4452 5.733929e-09 0.03777484 0.07587506 0
popular 0.16696926 0.018760706 8.899945 1980.9159 0.000000e+00 0.13017647 0.20376205 848