Son muy pocas las ocasiones en que las variables de un conjunto de datos están libres de observaciones faltantes (NAs o missing values). Es usual que al abordar una data nos interese saber la cantidad de ausencias, y también su caracterización, es decir, si esa (no respuesta) obedece a un patrón específico o es atribuible a causas aleatorías.
El conteo de valores faltantes por variable, en un data frame, puede realizarse con pocas líneas de código como en el siguiente ejemplo, hecho con una data ficticia y funciones de la familia apply:
# datos ficticios set.seed(4363) datos <- replicate(100, sample(c(rchisq(5, runif(1, 1, 100)), NA), 10, replace = TRUE), simplify = FALSE) datos <- do.call(rbind, datos)Luego el total de no respuesta por variable sería:
datos <- data.frame(datos) unlist(lapply(datos, function(x) sum(is.na(x)))) # V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 # 18 18 18 15 15 19 14 14 15 14El paquete magritr puede hacer más cómoda la escritura de códigos como este:
library(magrittr)# pipeline datos %>% lapply(., function(x) sum(is.na(x))) %>% unlist() # o con la función más estricta vapply datos %>% vapply(., function(x) sum(is.na(x)), numeric(1)) # V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 # 18 18 18 15 15 19 14 14 15 14En caso de requerir un gráfico:
n <- length(datos) cols <- colorRamps::blue2yellow(n) # seleccionar colores mp <- datos %>% vapply(., function(x) sum(is.na(x)), numeric(1)) %>% sort() %>% barplot(., axes = FALSE, horiz = TRUE, las = 1, col = rev(cols), main = "Valores Faltantes\nEn El Dataset") height <- vapply(datos, function(x) sum(is.na(x)), numeric(1)) %>% sort() text(height, mp, labels = height, col = ifelse(height >= median(height), "#FFFFFF", "#8B0000"), pos = 2, cex = 1.5) # disponer los resultados en las barras
La caracterización involucra más cosas, por supuesto el conocimiento acerca del método en que se generaron los datos puede ser crucial, son usuales tambien análisis descriptivos en los que paquetes cómo car o rpart pueden resultar bastante útiles. Por ejemplo, el paquete Hmisc ofrece la posibilidad de efectuar un rápido cluster de las observaciones faltantes usando Hmisc::naclus(datos), pero en este caso no añadiría informacion alguna, dada la forma en que fueron generados estos datos, lo cual siempre resulta ser bastante relevante.
Comentarios
Publicar un comentario