Page cover

Tratamiento de datos perdidos (Imputación Simple)

En este apartado vamos a ver como realizar una imputación simple de los datos perdidos

Imputación de datos perdidos

Aunque siempre se puede analizar un conjunto de datos después de eliminar todos los valores perdidos, esto puede causar varios problemas. Aquí tienes dos ejemplos:

  • Al eliminar todas las observaciones con valores perdidos o variables con una gran cantidad de datos perdidos, puedes reducir tu poder o capacidad para realizar algunos tipos de análisis, como se ha visto en el apartado anterior.

  • Dependiendo de por qué faltan tus datos, el análisis solo de datos no faltantes podría conducir a resultados sesgados o engañosos. Por ejemplo, como se vió anteriormente, faltan datos de algunos pacientes sobre si han tenido síntomas importantes como fiebre o tos. Pero, como posibilidad, tal vez esa información no se registró para personas que obviamente no estaban muy enfermas (MAR/MNAR). En ese caso, si simplemente eliminamos esas observaciones, estaríamos excluyendo a algunas de las personas más saludables en nuestro conjunto de datos y eso podría sesgar realmente cualquier resultado.

A continucación veremos distintas formas de imputación y cuándo son más recomendables unas respecto a otras.

Imputación usando la media (v.continuas) o moda (v.categóricas o v.discretas)

Esta es la forma más sencilla de imputación cuando puedes asumir que los datos son MCAR y el % de datos faltante es pequeño. Si las variables son continuas puedes simplemente establecer los valores perdidos usando la media de esa variable.

Vamos a asumir que las mediciones de temperatura (temp) faltantes en nuestro conjunto de datos son MCAR y que por tanto los podemos imputar con la media ya que el % de datos faltantes es pequeño ( 3%)

¡Cuidado! en muchas situaciones reemplazar los datos con la media puede generar sesgos si el porcentaje de missing es elevado.

Imputamos por la media y comprobamos gráficamente la distribución:

data$temp_imp<-data$temp #Nueva variable
mean(data$temp_imp, na.rm = TRUE) #Media
# 38.55829
data$temp_imp[is.na(data$temp_imp)] <- mean(data$temp_imp, na.rm = TRUE) #Imputación

##Gráfico para representar las diferencias  
ggplot(data, aes(x = temp, fill = "temp")) +  
geom_density(alpha = 0.5) +  
geom_density(aes(x = temp_imp, fill = "temp_imp"), alpha = 0.5) 

Tras imputar por la media se ve como la distribución se desplaza hacia el valor 38.5 que es el valor de la media. Quizás esta forma no sea la mejor, puesto que hay claramente una distribución bimodal con un pico en 37 seguramente correspondiente a los que no tienen fiebre y un pico en 39 correspondiente a aquellos que si tienen fiebre. En el siguiente apartado veremos como mejorar esta imputación.

Imputación por la moda en variables categóricas o discretas:

En el caso de las variables categóricas la forma de imputar valores perdidos de forma sencilla es usando la moda. Por ejemplo, asumimos que los valores faltantes de la variable gender (variable categórica) son MCAR y sólo tienen un 5% de missing, por tanto se podrían representar por la categoría más frecuente ("f" en este caso):

Vemos que la categoría female "f" aumenta respecto a la de male "m" ya que un 5% ya es un número considerable, pero no distorsiona demasiado, así que se podría dar por válido en el caso de querer un método de imputación muy sencillo.

Imputación usando modelos de regresión

Un método algo más avanzado es utilizar algún tipo de modelo estadístico para predecir cuál podría ser el valor perdido y reemplazarlo con el valor predicho.

Dependiendo de si la variable que queremos imputar es continua o categórica, usaremos un modelo de regresión lineal (continua) o regresión logística/multinomial (categórica).

En este caso, vamos a ver como imputar la variable temp con valores predichos usando una regresión lineal con la variable fever como predictora para compararlo con la imputación por la media que veíamos en el apartado anterior.

Lo primero será comprobar que los valores faltantes de la variable temp no lo son en la variable fever, si no, esos valores no se podrán imputar:

Después ajustamos un modelo de regresión lineal de la forma temp ~ fever

En esta regresión, el modelo explica un un 74% de la variabilidad de temp (R2 = 0.74) con un p-valor muy pequeño, señalando que existe una asociación entre las dos variables. Por tanto este modelo se puede usar para predecir de la siguiente forma:

temp=36.97+2.05(fever=yes)temp = 36.97 + 2.05*(fever=yes)

Cuando los individuos no tiene fiebre (fever=no) la predicción será 36.97 y cuando si tengan (fever=yes) la predicción será 36.97+2.05 = 39.02

En el prmer gráfico se pueden ver los dos picos correspondientes a los dos valores de la predicción y en el segundo la comparación con la imputación por la media, viendo claramente como el modelo de regresión hace una imputación mucho más robusto ya que tiene en cuanto información extra sobre si los individuos tienen o no tienen fiebre.

Imputación mediante regresión lineal + error estocástico

La imputación por regresión reemplaza los valores perdidos por la predicción puntual del modelo. Eso suele infraestimar la variabilidad (las imputaciones quedan “demasiado perfectas”). Para aproximar mejor la dispersión real, podemos añadir un término aleatorio a cada predicción:

Este término aleatorio añade un error estocástico a nuestras predicciones. Este error estocástico es una variable aleatoria que sigue una distribución normal donde σ^\hat{\sigma} es el error estándar residual del modelo de ajuste

En este caso, como se ha metido un error estocástico, vemos un ajuste casi igual a la distribución original de la variable sin imputar

Last updated