10.5 Imputación por regresión
La imputación por regresión se basa en la construcción de un modelo de regresión a partir de las variables auxiliares disponibles en el conjunto de datos, que se utiliza para predecir los valores faltantes de la variable de interés. Para llevar a cabo la imputación por regresión, se selecciona una variable objetivo que tenga valores faltantes y se identifican las variables predictoras que tienen una correlación significativa con la variable objetivo. Se ajusta un modelo de regresión utilizando las variables predictoras y la variable objetivo disponible, y se utilizan los coeficientes del modelo para predecir los valores faltantes de la variable objetivo.
Para ejemplificar, imputemos la variable ingreso tomando como covariables las variable zona, sexo y estado de empleo; se utiliza un modelo de regresión lineal múltiple, como se muestra a continuación:
encuesta$Income_imp <- encuesta$Income_missing
encuesta_obs <- filter(encuesta,!is.na(Income_missing))
encuesta_no_obs <- filter(encuesta, is.na(Income_missing))
mod <- lm(Income ~ Zone + Sex + Expenditure, data = encuesta_obs)
Una vez ajustado el modelo, se realiza el proceso de predicción como se muestra a continuación:
imp <- predict(mod, encuesta_no_obs)
encuesta_no_obs$Income_imp <- imp
encuesta <- bind_rows(encuesta_obs, encuesta_no_obs)
Ahora, se hace el cálculo de la variable ingreso completa e imputada:
encuesta %>%
summarise(
Income_ = mean(Income),
Income_sd = sd(Income),
Income_imp_ = mean(Income_imp),
Income_imp_sd = sd(Income_imp)
)
Income_ | Income_sd | Income_imp_ | Income_imp_sd |
---|---|---|---|
604.2494 | 513.1078 | 611.7477 | 498.3293 |
Teniendo un sesgo relativo de 1.2%. Haciendo el mismo ejercicio por zona tenemos:
encuesta %>%
group_by(Zone) %>%
summarise(
Income_ = mean(Income),
Income_sd = sd(Income),
Income_imp_ = mean(Income_imp),
Income_imp_sd = sd(Income_imp)
)
Zone | Income_ | Income_sd | Income_imp_ | Income_imp_sd |
---|---|---|---|---|
Rural | 469.1217 | 336.5861 | 476.1361 | 317.3999 |
Urban | 730.8793 | 609.0304 | 738.8311 | 594.5319 |
Por último, los ejercicios gráficos se realizan a continuación:
dat_plot7 <- tidyr::gather(
encuesta %>%
dplyr::select(Zone, Sex, Income, Income_imp),
key = "Caso",
value = "Income2",-Zone,-Sex
)
p1 <- ggplot(dat_plot7, aes(x = Income2, fill = Caso)) +
geom_density(alpha = 0.2) +
theme_bw() +
theme(legend.position = "bottom") +
geom_vline(xintercept = mean(encuesta$Income),
col = "red") +
geom_vline(xintercept = mean(encuesta$Income_imp),
col = "blue")
p1