10.6 Imputación por el vecino más cercano
En la imputación por el vecino más cercano, los valores faltantes se reemplazan por valores de otras observaciones que son similares a la observación con valores faltantes. La imputación por el vecino más cercano se basa en la idea de que los registros similares tienden a tener valores similares para una determinada variable. La técnica consiste en encontrar los \(k\) registros más similares a la observación con valores faltantes en función de las variables disponibles en el conjunto de datos y utilizar los valores de estas observaciones para estimar el valor faltante.
Para calcular la similitud entre observaciones, se pueden utilizar diferentes medidas de distancia, como la distancia euclidiana o la distancia de Manhattan. La técnica también permite ajustar el valor de \(k\), que representa el número de vecinos más cercanos utilizados para estimar el valor faltante.
Es importante destacar que la imputación por el vecino más cercano es una técnica relativamente simple y fácil de implementar. Sin embargo, su eficacia puede verse limitada por la cantidad y la calidad de los datos disponibles, así como por la elección de los parámetros (como el valor de \(k\) y la medida de distancia) que pueden afectar significativamente los resultados obtenidos. Por lo tanto, es importante evaluar cuidadosamente la calidad de los datos y los resultados obtenidos antes de utilizar esta técnica.
Teniendo en cuenta lo anterior, se presentan 3 pasos a tener en cuenta al momento de utilizar esta técnica:
- Definir una magnitud de distancia (Distancia euclidiana, k-media, K-Medioides, entre otras).
- Para la \(i\)-ésimo elemento identificar el donante, cual será el más cercano al receptor según la magnitud de distancia previamente definida.
- Se imputa el valor faltante con la información del donante identificado previamente.
Para ejemplificar esta metodología, se va a imputar la variable ingresos utilizando como variable de apoyo los gastos del individuo. Se utilizará como distancia la euclidiana.
encuesta$Income_imp <- encuesta$Income_missing
encuesta_obs <- filter(encuesta,!is.na(Income_missing))
encuesta_no_obs <- filter(encuesta, is.na(Income_missing))
for (ii in 1:nrow(encuesta_no_obs)) {
Expen_ii <- encuesta_no_obs$Expenditure[[ii]]
don_ii <- which.min(abs(Expen_ii - encuesta_obs$Expenditure))
encuesta_no_obs$Income_imp[[ii]] <-
encuesta_obs$Income_missing[[don_ii]]
}
encuesta <- bind_rows(encuesta_obs, encuesta_no_obs)
Haciendo el cálculo del promedio de los ingresos para los datos completos y estimados se tienen los siguientes resultados:
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 | 610.505 | 513.6812 |
Se observa que hay una diferencia de 6 unidades monetarias entre el promedio real y el estimado. Realizando este 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 | 477.9160 | 344.1316 |
Urban | 730.8793 | 609.0304 | 734.7559 | 607.0266 |
Obteniéndose diferencias de 7 unidades monetarias en el ingreso para la zona rural y de 4 para la urbana. Además, se puede observar que la distribución de los datos imputados son muy próximos que los datos reales.
dat_plot8 <- tidyr::gather(
encuesta %>%
dplyr::select(Zone, Sex, Income, Income_imp),
key = "Caso",
value = "Income2",-Zone,-Sex
)
p1 <- ggplot(dat_plot8, 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