10.2 Imputación por la media no condicional.
La imputación por la media no condicional consiste en reemplazar los valores faltantes con la media aritmética de la variable completa, sin tener en cuenta ninguna otra variable. Es decir, la media se calcula a partir de todos los valores disponibles en la variable en cuestión, independientemente de las características de los demás datos.
Para efectos de ejemplificar la solución del problema a los datos faltantes en una encuesta de hogares con un patrón MCAR generemos la siguiente base de datos:
encuesta <- full_join(
encuesta,
encuesta_MCAR %>%
dplyr::select(HHID, PersonID, Income, Employment) %>%
mutate(
Income_missing = Income,
Employment_missin = Employment,
Employment = NULL,
Income = NULL
)
)
El código anterior utiliza la función full_join
de la librería dplyr
de R
para combinar los dos conjuntos de datos. La combinación se realiza mediante la unión completa, que devuelve todas las filas de ambas tablas, uniendo las filas con valores coincidentes y rellenando con valores faltantes para las columnas que no tienen una coincidencia en ambas tablas. Ahora bien, para tener como referencia el porcentaje de datos faltantes, se ejecuta el siguiente comando:
Zone | Income |
---|---|
Rural | 0.2079208 |
Urban | 0.1927835 |
Sex | Income |
---|---|
Female | 0.1837945 |
Male | 0.2191465 |
La imputación por la media no condicional es un método bastante simple y rápido, y puede ser útil en ciertas situaciones, especialmente cuando la variable en cuestión no tiene una distribución muy sesgada o cuando los valores faltantes son relativamente pocos en comparación con el tamaño de la muestra. Sin embargo, el método de imputación por la media no condicional también tiene limitaciones y puede no ser adecuado en todas las situaciones, especialmente cuando hay sesgos o patrones en los datos faltantes o cuando los datos están altamente correlacionados. Adicionalmente, este método no afecta el promedio, pero si afecta la variabilidad, el sesgo y los percentiles. A continuación, se ejemplifica con los datos de ejemplo este método:
promedio <- mean(encuesta$Income_missing, na.rm = TRUE)
encuesta %<>% dplyr::mutate(Income_imp = ifelse(is.na(Income_missing),
promedio, Income_missing))
sum(is.na(encuesta$Income_imp))
## [1] 0
En el código anterior la imputación se realiza utilizando la media aritmética de los valores no faltantes en Income_missing
y se almacena en una nueva variable llamada Income_imp
. La primera línea del código calcula la media aritmética de los valores no faltantes en la columna Income_missing
y la almacena en una variable llamada promedio
. La última línea cuenta el número de valores faltantes en la nueva columna Income_imp
de la base de datos encuesta. Como es natural, después de la imputación, no existen valores faltantes.
dat_plot4 <- tidyr::gather(
encuesta %>% dplyr::select(Zone, Sex, Income, Income_imp),
key = "Caso",
value = "Income2",
-Zone,
-Sex
)
p1 <- ggplot(dat_plot4, 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
En la gráfica anterior se puede observar que la distribución real y la imputada para la variable de interés cambia de manera significativa; esto muestra que este método, para este conjunto de datos no es el más apropiado dado lo sesgado de la distribución de la variable ingresos. Un caso similar al anterior ocurre si graficamos la variable ingreso por zona y sexo. A continuación, se muestran los diagramas de cajas para revisar la distribución de los datos, arrojando nuevamente las conclusiones obtenidas con el gráfico anterior:
p1 <- ggplot(dat_plot4, aes(x = Caso, y = Income2)) +
geom_hline(yintercept = mean(encuesta$Income),
col = "red") + geom_boxplot() +
facet_grid(Zone ~ Sex) + theme_bw()
p1