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