Estos datos ejemplifican un escenario en donde se seleccionan candidatos a un empleo, y los candidatos completan un test de IQ, durante su entrevista de trabajo y posteriormente un supervisor evalua su rendimiento despu茅s de un periodo de 6 meses. En el ejemplo hay 4 columnas de Rendimiento, una que ser铆a la completa y otras tres que se han borrado los datos considerando los 3 tipos de datos missing que hemos estudiado (MCAR, MAR, MNAR).
Averigua a qu茅 columna corresponde los datos MCAR, MAR y MNAR y explica por qu茅. Despu茅s cambia el nombre de las columnas por Rendimiento_MCAR, Rendimiento_MAR y Rendimiento_MNAR.
vis_miss(datos)ggplot(data = datos, aes (x = IQ, y = Rendimiento_1))+geom_miss_point()ggplot(data = datos, aes (x = IQ, y = Rendimiento_2))+geom_miss_point()ggplot(data = datos, aes (x = IQ, y = Rendimiento_3))+geom_miss_point()library(VIM)marginplot(datos[c(1,3)])marginplot(datos[c(1,4)])marginplot(datos[c(1,5)])
Rendimiento_1: Este es de tipo MCAR. Los datos faltantes son completamente aleatorios. Est谩n distribuidoa a lo largo de la variable observada IQ y no corresponden a ning煤n patr贸n espec铆fico. Los boxplots de los missing vs. no missing no se diferencian.
Rendimiento_2: Este es de tipo MAR. Los datos faltantes corresponden a los candidatos con las puntuaciones IQ menores. Existe una clara asociaci贸n con la variable observada (IQ). Los boxplots de los datos missing vs. no missing se diferencian mucho.
Rendimiento_3: Este tipo es MNAR. Los datos faltantes corresponden a los candidatos con el rendimiento menor, pero CUIDADO esto no lo sabr铆amos si no tuvieramos la variable completa. Imagina por ejemplo que la compa帽铆a contrat贸 a los 20 candidatos y a continuaci贸n despidi贸 a un n煤mero de individuos por bajo rendimiento previo a las evaluaciones de los 6 meses. Los datos missing estar铆an asociados con una variable no observada (haber sido despedido).
Compara la media entre las 3 variables de Rendimiento_MCAR_MAR_MNAR con Rendimiento_completo. 驴Qu茅 observas?
summary(datos)
La media de rendimiento completo es 10.35. Si no hacemos nada con los datos y solo borramos los missing, vemos como la media de los MAR y MNAR son mucho m谩s altas debido a que los datos faltantes corresponden a valores bajos de rendimiento.
Si borramos los NAs para cada una de las variables Rendimiento_MCAR_MAR_MNAR y calculamos el coeficiente de correlaci贸n y regresi贸n lineal simple para predecir el IQ. 驴Qu茅 diferencias observas en comparaci贸n con Rendimiento_completo?
Tanto en la correlaci贸n como en el modelo de regresi贸n vemos como var铆a la asociaci贸n seg煤n el tipo de datos faltantes siendo los de tipo MNAR los que provocan la p茅rdida total de correlaci贸n y asociaci贸n.
Haz un gr谩fico para ver como se ajusta la recta de regresi贸n en cada uno de los casos.
library(ggplot2)library(patchwork)y_min <-min(datos$Rendimiento_completo)y_max <-max(datos$Rendimiento_completo)ggp1 <-ggplot(datos,aes(IQ, Rendimiento_completo))+geom_point()+stat_smooth(method ="lm",se=TRUE, formula = y ~ x, geom ="smooth")+ylim(y_min, y_max) ggp2 <-ggplot(datos,aes(IQ, Rendimiento_MCAR))+geom_point()+stat_smooth(method ="lm",se=TRUE, formula = y ~ x, geom ="smooth")+ylim(y_min, y_max)ggp3 <-ggplot(datos,aes(IQ, Rendimiento_MAR))+geom_point()+stat_smooth(method ="lm",se=TRUE, formula = y ~ x, geom ="smooth")+ylim(y_min, y_max)ggp4 <-ggplot(datos,aes(IQ, Rendimiento_MNAR))+geom_point()+stat_smooth(method ="lm",se=TRUE, formula = y ~ x, geom ="smooth")+ylim(y_min, y_max)ggp1+ggp2+ggp3+ggp4
Imputa por la media y por el modelo de regresi贸n simple las tres variables rendimiento y compara los resultados.
####MCAR######Mediadatos$Rendimiento_MCAR_media<-datos$Rendimiento_MCARmean(datos$Rendimiento_MCAR, na.rm =TRUE) datos$Rendimiento_MCAR_media[is.na(datos$Rendimiento_MCAR_media)] <-mean(datos$Rendimiento_MCAR_media, na.rm =TRUE) ##Gr谩fico para representar las diferencias ggplot(datos, aes(x = Rendimiento_MCAR, fill ="Rendimiento_MCAR"))+geom_density(alpha =0.5)+geom_density(aes(x = Rendimiento_MCAR_media, fill ="Rendimiento_MCAR_media"), alpha =0.5)# Imputaci贸n por Regresion linealmodel1 <-lm(Rendimiento_MCAR ~ IQ, data = datos) predictions <-predict(model1,newdata = datos [is.na(datos$Rendimiento_MCAR),]) datos$Rendimiento_MCAR_model1 <- datos$Rendimiento_MCAR datos$Rendimiento_MCAR_model1[is.na(datos$Rendimiento_MCAR)]<- predictions##Gr谩fico para representar las diferenciasggplot(datos, aes(x = Rendimiento_MCAR, fill ="Rendimiento_MCAR"))+geom_density(alpha =0.5)+geom_density(aes(x = Rendimiento_MCAR_model1, fill ="Rendimiento_MCAR_model1"), alpha =0.5)##Gr谩fico para representar las diferenciasggplot(datos, aes(x = Rendimiento_MCAR, fill ="Rendimiento_MCAR"))+geom_density(alpha = 0.5) + geom_density(aes(x = Rendimiento_MCAR_media, fill = "Rendimiento_MCAR_media"), alpha = 0.5) +
geom_density(aes(x = Rendimiento_MCAR_model1, fill ="Rendimiento_MCAR_model1"), alpha =0.5)##Gr谩fico para representar las diferenciasggplot(datos, aes(x = Rendimiento_MCAR, fill ="Rendimiento_MCAR"))+geom_density(alpha = 0.5) + geom_density(aes(x = Rendimiento_MCAR_model1, fill = "Rendimiento_MCAR_model1"), alpha = 0.5) +
geom_density(aes(x = Rendimiento_completo, fill ="Rendimiento_completo"), alpha =0.5)###En este caso la imputaci贸n por regresi贸n lineal simple parece correcta####MAR#####Mediadatos$Rendimiento_MAR_media<-datos$Rendimiento_MARmean(datos$Rendimiento_MAR, na.rm =TRUE) datos$Rendimiento_MAR_media[is.na(datos$Rendimiento_MAR_media)] <-mean(datos$Rendimiento_MAR_media, na.rm =TRUE) ##Gr谩fico para representar las diferencias ggplot(datos, aes(x = Rendimiento_MAR, fill ="Rendimiento_MAR"))+geom_density(alpha =0.5)+geom_density(aes(x = Rendimiento_MAR_media, fill ="Rendimiento_MAR_media"), alpha =0.5)# Regresion linealmodel1 <-lm(Rendimiento_MAR ~ IQ, data = datos) predictions <-predict(model1,newdata = datos [is.na(datos$Rendimiento_MAR),]) datos$Rendimiento_MAR_model1 <- datos$Rendimiento_MAR datos$Rendimiento_MAR_model1[is.na(datos$Rendimiento_MAR)]<- predictionsggplot(datos, aes(x = Rendimiento_MAR, fill ="Rendimiento_MAR"))+geom_density(alpha = 0.5) + geom_density(aes(x = Rendimiento_MAR_model1, fill = "Rendimiento_MAR_model1"), alpha = 0.5)
##Los datos faltantes corresponden a los que tienen IQs m谩s bajos, ##por tanto imputa todos los valores muy bajosggplot(datos, aes(x = Rendimiento_MAR, fill ="Rendimiento_MAR"))+geom_density(alpha = 0.5) + geom_density(aes(x = Rendimiento_MAR_media, fill = "Rendimiento_MAR_media"), alpha = 0.5) +
geom_density(aes(x = Rendimiento_MAR_model1, fill ="Rendimiento_MAR_model1"), alpha =0.5)ggplot(datos, aes(x = Rendimiento_MAR, fill ="Rendimiento_MAR"))+geom_density(alpha =0.5)+geom_density(aes(x = Rendimiento_MAR_media, fill ="Rendimiento_MAR_media"), alpha =0.5)+geom_density(aes(x = Rendimiento_MAR_model1, fill ="Rendimiento_MAR_model1"), alpha =0.5)+geom_density(aes(x = Rendimiento_completo, fill ="Rendimiento_completo"), alpha =0.5)##Aqu铆 lo que ocurre es que como todos los datos missing corresponden a los que tienen bajo IQ, ##se imputan todos como muy bajo rendimiento.#**Regresi贸n con incertidumbre**. #*Podemos regresar la incertidumbre a las imputaciones sumando el error de predicci贸n. # La idea es simular observaciones bajo el modelo:#*model1 <-lm(Rendimiento_MAR ~ IQ, data = datos) summary(model1)set.seed(3)rnorm(sum(is.na(datos$Rendimiento_MAR)), 0, sd =2.39) datos$Rendimiento_MAR_model1_inc <- datos$Rendimiento_MAR datos$Rendimiento_MAR_model1_inc[is.na(datos$Rendimiento_MAR)]<- predictions + rnorm(sum(is.na(datos$Rendimiento_MAR)), 0, sd = 2.39)
ggplot(datos, aes(x = Rendimiento_MAR, fill ="Rendimiento_MAR"))+geom_density(alpha = 0.5) + geom_density(aes(x = Rendimiento_MAR_model1, fill = "Rendimiento_MAR_model1"), alpha = 0.5) +
geom_density(aes(x = Rendimiento_MAR_model1_inc, fill ="Rendimiento_MAR_model1_inc"), alpha =0.5)ggplot(datos, aes(x = Rendimiento_MAR, fill ="Rendimiento_MAR"))+geom_density(alpha = 0.5) + geom_density(aes(x = Rendimiento_MAR_model1, fill = "Rendimiento_MAR_model1"), alpha = 0.5) +
geom_density(aes(x = Rendimiento_MAR_model1_inc, fill ="Rendimiento_MAR_model1_inc"), alpha =0.5)+geom_density(aes(x = Rendimiento_completo, fill ="Rendimiento_completo"), alpha =0.5)##La imputaci贸n con error estoc谩stico mejora bastante##MNAR###Mediadatos$Rendimiento_MNAR_media<-datos$Rendimiento_MNARmean(datos$Rendimiento_MNAR, na.rm =TRUE) datos$Rendimiento_MNAR_media[is.na(datos$Rendimiento_MNAR_media)] <-mean(datos$Rendimiento_MNAR_media, na.rm =TRUE) ##Gr谩fico para representar las diferencias ggplot(datos, aes(x = Rendimiento_MNAR, fill ="Rendimiento_MNAR"))+geom_density(alpha = 0.5) + geom_density(aes(x = Rendimiento_MNAR_media, fill = "Rendimiento_MNAR_media"), alpha = 0.5)
# Regresion linealmodel1 <-lm(Rendimiento_MNAR ~ IQ, data = datos) predictions <-predict(model1,newdata = datos [is.na(datos$Rendimiento_MNAR),]) datos$Rendimiento_MNAR_model1 <- datos$Rendimiento_MNAR datos$Rendimiento_MNAR_model1[is.na(datos$Rendimiento_MNAR)]<- predictionsggplot(datos, aes(x = Rendimiento_MNAR, fill ="Rendimiento_MNAR"))+geom_density(alpha =0.5)+geom_density(aes(x = Rendimiento_MNAR_model1, fill ="Rendimiento_MNAR_model1"), alpha =0.5)ggplot(datos, aes(x = Rendimiento_MNAR, fill ="Rendimiento_MNAR"))+geom_density(alpha =0.5)+geom_density(aes(x = Rendimiento_MNAR_media, fill ="Rendimiento_MNAR_media"), alpha =0.5)+geom_density(aes(x = Rendimiento_MNAR_model1, fill ="Rendimiento_MNAR_model1"), alpha =0.5)+geom_density(aes(x = Rendimiento_completo, fill ="Rendimiento_completo"), alpha =0.5)##*Pasa un poco lo mismo que en el caso de MAR, se imputan los que tienen bajo rendimiento##*con un modelo que asume bajo rendimiento para los que tiene IQmodel1 <-lm(Rendimiento_MNAR ~ IQ, data = datos) summary(model1)set.seed(3)rnorm(sum(is.na(datos$Rendimiento_MAR)), 0, sd =2.11) datos$Rendimiento_MNAR_model1_inc <- datos$Rendimiento_MNAR datos$Rendimiento_MNAR_model1_inc[is.na(datos$Rendimiento_MNAR)]<- predictions + rnorm(sum(is.na(datos$Rendimiento_MNAR)), 0, sd = 2.11)
ggplot(datos, aes(x = Rendimiento_MNAR, fill ="Rendimiento_MNAR"))+geom_density(alpha =0.5)+geom_density(aes(x = Rendimiento_MNAR_model1_inc, fill ="Rendimiento_MNAR_model1_inc"), alpha =0.5)ggplot(datos, aes(x = Rendimiento_MNAR, fill ="Rendimiento_MNAR"))+geom_density(alpha =0.5)+geom_density(aes(x = Rendimiento_MNAR_model1_inc, fill ="Rendimiento_MNAR_model1_inc"), alpha =0.5)+geom_density(aes(x = Rendimiento_completo, fill ="Rendimiento_completo"), alpha =0.5)###Ninguno se ha ajustado relativamente bien a los datos