Los datos faltantes se entienden como valores que debían haberse registrado, pero no lo hicieron. Es importante comprender cómo lidiar con ellos, ya que pueden tener efectos muy relevantes en los análisis que se realicen.
La pérdida de datos necesariamente conlleva a la pérdida de información y por lo tanto, a una menor precisión en la estimación de los parámetros de interés.
Algunos de los problemas causados por datos faltantes:
Datos faltantes completamente aleatorios (MCAR): la existencia de valores perdidos es independiente de los datos, por ejemplo, cuando se toma una muestra aleatoria de una población donde cada individuo tiene la misma probabilidad de pertenecer a la muestra, los datos faltantes de los miembros de la muestra con MCAR. La frecuencia con la que esto acontece es casi nula.
Datos faltantes aleatorios(MAR): la probabilidad de ser un dato faltante es la misma dentro de los grupos definidos por los datos observados. Por ejemplo, cuando al tomar la muestra de la población se considera, la probabilidad de ser incluida depende de alguna propiedad conocida. Este tipo de datos faltantes es el más común y más usado.
Datos faltantes no aleatorios (MNAR): la probabilidad de ser un dato faltante se debe a razón desconocidas. Tomando como caso de la opinión pública donde las personas con argumentos débiles responden con una menor frecuencia creando espacios en blanco o dejando respuestas vacías.
Ignorar datos faltantes:
Imputar datos faltantes:
mice
pueden usarse dependiendo de la
estructura de los datos y el patrón de ausencia.Existen diversos métodos para realizar imputación. Estos métodos consisten en estimar los valores faltantes por medio de la información del conjunto completo de variables o bien de algunas variables especialmente seleccionadas. Deben aplicarse con gran precaución porque pueden introducir relaciones inexistentes en los datos reales.
Los principales métodos de imputación de datos faltantes se pueden clasificar en las siguientes categorías:
1. Imputación univariada (basada en una sola variable)
2. Imputación multivariada (usando múltiples variables)
3. Métodos basados en modelos probabilísticos
4. Imputación basada en aprendizaje automático
Ejemplificaremos los diferentes métodos de imputación con ayuda de la
base de datos denominada Niveles_tratados
.
Cargamos los datos:
Data <- read.csv("Niveles_tratados.csv",header=T,na.strings=" ")
Visualizaciones de datos faltantes
library(visdat)
vis_miss(Data)
# Datos faltantes por columna
library(naniar)
gg_miss_var(Data)
Realizaremos imputaciones para cada variable por separado.
library(mice)
# Imputación con la media
Imput_mean <- mice(Data,method="mean",print=F) # variables continuas
Complete_mean <- mice::complete(Imput_mean)
# Imputación con la moda
Imput_mode <- mice(Data,method="cart",print=FALSE) # variables categóricas (Árboles de decisión)
Complete_mode <- mice::complete(Imput_mode)
Ahora comparamos el comportamiento de los datos originales y los datos imputados.
library(ggplot2)
library(plotly)
library(dplyr)
library(tidyr)
### 1. Para Variables Continuas
# Convertir los datos en formato largo
data_long <- bind_rows(
Data %>% select(PM2.5, CN, SO2) %>% mutate(Origen = "Original"),
Complete_mean %>% select(PM2.5, CN, SO2) %>% mutate(Origen = "Imputado")) %>%
pivot_longer(cols = c(PM2.5, CN, SO2), names_to = "Variable", values_to = "Valor")
# Crear el gráfico de densidad
p1 <- ggplot(data_long, aes(x = Valor, color = Origen, fill = Origen, text = paste("Origen:", Origen))) +
geom_density(alpha = 0.2) +
facet_wrap(~Variable, scales = "free") +
labs(title = "Comportamiento de la Imputación", x = "Variables", y = "Densidad") +
theme_minimal()
ggplotly(p1, tooltip = c("text", "x", "y"))
### 2. Para Variable Categórica
# Crear un data.frame con los conteos antes y después de la imputación
data_cat <- bind_rows(
Data %>% select(Nivel_Contaminacion) %>% mutate(Origen = "Original"),
Complete_mode %>% select(Nivel_Contaminacion) %>% mutate(Origen = "Imputado")) %>%
filter(!is.na(Nivel_Contaminacion)) # Eliminar NA de los datos originales para comparación justa
# Crear el gráfico de barras corregido
p2 <- ggplot(data_cat, aes(x = Nivel_Contaminacion, fill = Origen, text = paste("Origen:", Origen))) +
geom_bar(position = "dodge") +
labs(title = "", x = "Nivel de Contaminación",y = "Frecuencia") +
theme_minimal()
ggplotly(p2,tooltip = c("text", "x", "y"))
# Imputación con regresión predictiva (sin variabilidad)
Imput_reg1 <- mice(Data, method = "norm.predict", print = FALSE)
Complete_reg1 <- mice::complete(Imput_reg1)
# Imputación con regresión y bootstrap (con variabilidad)
Imput_reg2 <- mice(Data, method = "norm.boot", print = FALSE)
Complete_reg2 <- mice::complete(Imput_reg2)
Ahora comparamos el comportamiento de los datos originales y los datos imputados.
library(ggplot2)
library(plotly)
library(dplyr)
library(tidyr)
# Convertir los datos en formato largo
data_long <- bind_rows(
Data %>% select(PM2.5, CN, SO2) %>% mutate(Origen = "Original"),
Complete_reg1 %>% select(PM2.5, CN, SO2) %>% mutate(Origen = "Regresión Predictiva"),
Complete_reg2 %>% select(PM2.5, CN, SO2) %>% mutate(Origen = "Regresión Bootstrap")) %>%
pivot_longer(cols = c(PM2.5, CN, SO2), names_to = "Variable", values_to = "Valor")
# Crear gráfico de densidad
p <- ggplot(data_long, aes(x = Valor, color = Origen, fill = Origen, text = paste("Origen:", Origen))) +
geom_density(alpha = 0.2) +
facet_wrap(~Variable, scales = "free") +
labs(title = "Comportamiento de la Imputación", x = "Variables", y = "Densidad") +
theme_minimal()
# Convertir a gráfico interactivo sin duplicaciones en el tooltip
ggplotly(p, tooltip = c("text", "x", "y"))
En este ejemplo, se aplicaron tres métodos de imputación multivariada
para estimar los valores faltantes en los datos. Se utilizó regresión
múltiple (norm.predict
), que predice valores basándose en
una ecuación lineal, MICE (pmm
), que genera imputaciones
iterativas para cada variable considerando la relación con las demás, y
Random Forest (rf
), que utiliza múltiples árboles de
decisión para estimar los valores ausentes.
library(ranger)
# Imputación con Regresión Múltiple
Imput_reg_mult <- mice(Data, method = "norm.predict", m = 5, print = FALSE)
Complete_reg_mult <- mice::complete(Imput_reg_mult)
# Imputación con MICE
Imput_mice <- mice(Data, method = "pmm", m = 5, print = FALSE)
Complete_mice <- mice::complete(Imput_mice)
# Imputación con Random Forest
Imput_rf <- mice(Data, method = "rf", m = 5, print = FALSE)
Complete_rf <- mice::complete(Imput_rf)
Ahora comparamos el comportamiento de los datos originales y los datos imputados.
# Convertir los datos imputados a formato largo
data_long <- bind_rows(
Data %>% select(PM2.5, CN, SO2) %>% mutate(Origen = "Original"),
Complete_reg_mult %>% select(PM2.5, CN, SO2) %>% mutate(Origen = "Regresión Múltiple"),
Complete_mice %>% select(PM2.5, CN, SO2) %>% mutate(Origen = "MICE"),
Complete_rf %>% select(PM2.5, CN, SO2) %>% mutate(Origen = "Random Forest")) %>%
pivot_longer(cols = c(PM2.5, CN, SO2), names_to = "Variable", values_to = "Valor")
# Crear gráfico de densidad
p <- ggplot(data_long, aes(x = Valor, color = Origen, fill = Origen, text = paste("Método:", Origen))) +
geom_density(alpha = 0.2) +
facet_wrap(~Variable, scales = "free") +
labs(title = "Comparación de Imputación Multivariada", x = "Variables", y = "Densidad") +
theme_minimal()
# Convertir a gráfico interactivo
ggplotly(p, tooltip = c("text", "x", "y"))