Ir al contenido principal

R: Valores Faltantes en un Data Frame (Missing Values)


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  14
El 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  14 
En 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

Entradas populares de este blog

Optimizadores y Máximo Verosimil en R.

El proceso mediante el cual se obtienen estimaciones a partir de un conjunto de datos, frecuentemente involucra también un proceso de optimización. En lo más básico, por ejemplo, estimadores como la media o la mediana minimizan la suma de desviaciones al cuadrado y la suma de las desviaciones absolutas respectivamente Generalmente, se admite como un esquema rutinario del trabajo estadístico al momento de indagar sobre algún aspecto atinente a una población, asumir un modelo probabilístico, cuyos parámetros, siendo desconocidos, deben estimarse mediante la obtención de datos y posterior cálculo de los valores que mejor representen la data previamente recolectada. En ese último punto se halla frecuentemente implicada la optimización. La estimación por Máximo Verosimil, es generalmente obtenida mediante la aplicación de optimizadores no lineales, que son algoritmos que, por lo general, minimizan la función que se les pasa como argumento, debido a esto, para maximizar la función de verosi...

Extraccion de tablas de PDF con R tabulizer

No son extrañas las situaciones en las que los datos, que se desea analizar, se encuentran contenidos en tablas de archivos PDF. En general, desde hace tiempo, situaciones como esa no representan un obstaculo insalvable; existen herramientas eficaces para extraer la data y ponerla en disposición de ser procesada, en alguna forma que sea de interés. En R, existen varios paquetes, que ofrecen medios para extraer datos de documentos PDF: pdftools y tabulizer, son dos bastante conocidos y descargados muchas veces. Este ejercicio, involucra la extracción de los datos de una tabla, contenida en un PDF, además de el procesamiento correspondiente para disponer los datos, en una forma que resulte adecuada para efectuar operaciones en ellos: producir gráficos o agregados. Descargué un archivo contenido en la página: https://www.worldwater.org/water-data/ Concretamente la tabla 10, llamada: Bottled Water Consumption by Country, 1997 to 2004 library(tabulizer) library(magrittr) El comando tab...