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.
<- which(!is.na(encuesta$Income_missin))
donante <- which(is.na(encuesta$Income_missin))
receptor $Income_imp <- encuesta$Income_missin
encuestaset.seed(1234)
for(ii in receptor){
<- sample(x = donante, size = 1)
don_ii $Income_imp[ii] <- encuesta$Income_missin[don_ii]}
encuestasum(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:
%>% summarise(
encuesta 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:
%>%group_by(Zone) %>% summarise(
encuesta 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:
%>%group_by(Sex) %>% summarise(
encuesta 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:
<- tidyr::gather(
dat_plot6 %>% dplyr::select(Zone,Sex,Income, Income_imp),
encuesta key = "Caso", value = "Income2", -Zone,-Sex)
<- ggplot(dat_plot6, aes(x = Income2, fill = Caso)) +
p1 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:
<- ggplot(dat_plot6, aes(x= Caso, y = Income2)) +
p1 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:
<- which(!is.na(encuesta$Income_missin))
donante <- which(is.na(encuesta$Income_missin))
receptor $Employment_imp <- encuesta$Employment_missin
encuesta<- prop.table(
(prop table(na.omit(encuesta$Employment_missin))))
Unemployed | Inactive | Employed |
---|---|---|
0.0425815 | 0.3739188 | 0.5834997 |
set.seed(1234)
<- sample(size = length(receptor),
imp c("Unemployed", "Inactive","Employed"),
prob = prop, replace = TRUE )
$Employment_imp[receptor] <- imp
encuestasum(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.