11.3 Imputación por Hot-deck y Cold-deck

La imputación Hot deck consiste en reemplazar los valores faltantes de una o más variables para un no encuestado (llamado receptor) con valores observados de un encuestado (el donante) que es similar al no encuestado con respecto a las características observadas en ambos casos.

La técnica se basa en la idea de que las observaciones similares pueden tener valores similares para las variables de interés. En el enfoque por hot-deck, se selecciona una observación donante que sea similar a la observación receptora en términos de características relevantes (por ejemplo, edad, género, ubicación geográfica, etc.), y se utiliza su valor observado para imputar el valor faltante en la observación receptora.

El término “hot-deck” se refiere a una tarjeta perforada que se utilizaba en los primeros sistemas informáticos para almacenar y recuperar datos. En el enfoque por hot-deck, las observaciones se organizan en una “pila” o “mazo” de tarjetas, y las observaciones similares se seleccionan de esta pila para imputar los valores faltantes.

La imputación por hot-deck es una técnica relativamente simple y eficaz para imputar valores faltantes en conjuntos de datos pequeños o medianos, y se utiliza comúnmente en encuestas y estudios de investigación social. Sin embargo, puede ser menos efectiva en conjuntos de datos grandes o complejos, donde puede ser difícil encontrar observaciones similares o donde las características relevantes son difíciles de definir o medir de manera confiable.

Por otro lado, el método llamado Cold-deck por analogía con Hot-deck consiste en reemplazar el valor faltante por valores de una fuente no relacionada con el conjunto de datos en consideración. El método de imputación Cold-deck es una técnica de imputación de datos faltantes que se basa en la sustitución de los valores faltantes por valores observados de una fuente externa, tal como un conjunto de datos históricos, registros administrativos u otras fuentes de datos secundarios.

A diferencia del método de imputación por hot-deck, que utiliza información de la propia muestra para imputar los valores faltantes, el método de imputación cold-deck se basa en la utilización de información externa para sustituir los valores faltantes. La fuente de datos externa se utiliza para imputar los valores faltantes en la muestra de estudio.

El término “cold-deck” hace referencia a la tarjeta perforada que se utilizaba en los primeros sistemas informáticos para almacenar y recuperar datos. En el método de imputación cold-deck, los valores faltantes se imputan a partir de los datos de la “pila fría” o “mazo frío” de tarjetas perforadas, que corresponden a los datos históricos o a la fuente externa de datos.

El método de imputación cold-deck se utiliza a menudo cuando la muestra de estudio es pequeña o no hay suficientes observaciones similares para aplicar el método de imputación por hot-deck. Sin embargo, el método de imputación cold-deck tiene algunas limitaciones, como la posibilidad de que los datos externos no sean representativos de la muestra de estudio y la posibilidad de introducir errores en los datos imputados si la fuente de datos externa no es fiable o no es adecuada para la variable de interés.

Imputación por hot-deck

Iniciamos los ejemplos en esta sección con el método hot-deck. A continuación, se presenta un código computacional que ejemplifica, para los datos que estamos usando en el capítulo, el uso del método hot-deck.

donante <- which(!is.na(encuesta$Income_missin))
receptor <- which(is.na(encuesta$Income_missin))
encuesta$Income_imp <- encuesta$Income_missin
set.seed(1234)
for(ii in receptor){
don_ii <- sample(x = donante, size = 1)
encuesta$Income_imp[ii] <- encuesta$Income_missin[don_ii]}
sum(is.na(encuesta$Income_imp))
## [1] 0

El código mostrado anteriormente se describe a continuación:

  • La primera línea del código selecciona las observaciones que no tienen valores faltantes en la variable “Income_missin” utilizando la función which y el operador ! (not) donante <- which(!is.na(encuesta$Income_missin))

  • La segunda línea selecciona las observaciones que tienen valores faltantes en la variable “Income_missin” utilizando la función which y el operador is.na. receptor <- which(is.na(encuesta$Income_missin))

  • La tercera línea crea una nueva variable “Income_imp” en la encuesta, que se utilizará para almacenar los valores imputados encuesta\(Income_imp <- encuesta\)Income_missin

  • La cuarta línea utiliza la función set.seed para establecer una semilla aleatoria para asegurar la reproducibilidad del proceso de imputación. set.seed(1234)

  • Se utiliza un bucle for para iterar a través de cada observación receptora. Dentro del bucle, se utiliza la función sample para seleccionar una observación donante aleatoria de entre las observaciones que no tienen valores faltantes en la variable “Income_missin”.

Una vez realizada la imputación, se calcula la media y la desviación de los datos completos e imputados:

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 618.2937 528.2157

Como en los métodos de imputación anterior, calculemos el sesgo relativo de la imputación el cual fue de 2.3%:

100*(604.2494-618.2937)/604.2494
## [1] -2.324256

Ahora bien, haciendo el mismo ejercicio, pero esta vez desagregada 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 503.7127 368.9137
Urban 730.8793 609.0304 725.6691 623.9875

El sesgo relativo de la estimación en la zona rural es de 7.4% y en al zona urbana es de 0.7%.

100*(469.1217-503.7127)/469.1217
## [1] -7.373566
100*(730.8793-725.6691)/730.8793
## [1] 0.7128674

El mismo ejercicio se puede realizar por sexo:

encuesta %>%group_by(Sex) %>%  summarise(
  Income_ = mean(Income),
  Income_sd = sd(Income),
  Income_imp_ = mean(Income_imp),
  Income_imp_sd = sd(Income_imp))
Sex Income_ Income_sd Income_imp_ Income_imp_sd
Female 589.2330 504.3041 602.8075 503.0951
Male 621.7771 522.9428 636.3699 555.8522

Como en los ejercicios anteriores, a continuación, se muestra la gráfica de la distribución de los datos tanto los completos como los imputados observándose que la distribución de los datos imputados es muy similar a la de los datos no imputados:

dat_plot6 <- tidyr::gather(
  encuesta %>% dplyr::select(Zone,Sex,Income, Income_imp),
  key = "Caso", value = "Income2", -Zone,-Sex)

p1 <- ggplot(dat_plot6, 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

El mismo ejercicio anterior se realiza por zona y sexo obteniendo resultados similares a los abtenidos en el gráfico anterior:

p1 <- ggplot(dat_plot6, aes(x= Caso, y = Income2)) + 
   geom_hline(yintercept = mean(encuesta$Income),
              col = "red") +  geom_boxplot() +
  facet_grid(Zone~Sex) + theme_bw()
p1

A continuación, se implementa el método de imputación pero para la variable empleado. Los códigos computacionales son similares a los empleados con la variable ingresos:

donante <- which(!is.na(encuesta$Income_missin))
receptor <- which(is.na(encuesta$Income_missin))
encuesta$Employment_imp <- encuesta$Employment_missin
(prop <- prop.table(
  table(na.omit(encuesta$Employment_missin))))
Unemployed Inactive Employed
0.0425815 0.3739188 0.5834997
set.seed(1234)
imp <- sample(size = length(receptor),
  c("Unemployed", "Inactive","Employed"),
       prob = prop, replace = TRUE     )
encuesta$Employment_imp[receptor] <- imp 
sum(is.na(encuesta$Employment_imp))
## [1] 0

Se le deja al lector realizar los ejercicios de comprobación gráfica, como se mostró a lo largo de esta sección.