#Exploración de datos categóricos En este capítulo vamos a trabajar sobre las diferentes formas en las que podemos resumir una o dos variables cualitativas o categóricas. Seguiremos usando la EPH y vamos a calcular algunas tablas.

Librerías

Cargamos los paquetes que vamos a utilizar:

library(tidyverse)
library(eph)

Datos y los etiqueto

Importamos la base de individuos de la EPH del 2do. trimestre de 2021 y la etiquetamos.

df <- get_microdata(year = 2021, trimester = 2, type = "individual")
df <- organize_labels(df=df, type='individual') # Vamos a etiquetar la base
df <- df %>% mutate_at(vars(CH03, CH04, CH07:CAT_INAC), ~as.character(.))

Explorando los datos

Distribuciones de frecuencia simples (una variable)

A continuación, vamos a concentrarnos en la exploración de datos categóricos a través de medidas resumen, tablas y visualizaciones.

R base tiene funciones para generar la tabla de frecuencias de una variable:

  • table: para hacer las frecuencias simples
  • prop.table: para hacer las frecuencias proporcionales.
table(df$CH04)
## 
## Mujer Varon 
## 24483 22602
prop.table(table(df$CH04))
## 
##     Mujer     Varon 
## 0.5199745 0.4800255

Ahora bien, en la clase 2 también vimos el uso de las funciones group_by y summarize. ¿Qué realizaban?


Nos devuelven las frecuencias de las categorías de una variable. Esto nos permite ver también la moda de una variable categórica. Si queremos ordenar las frecuencias en orden ascendente hay que usar la función arrange().

df %>% group_by(ESTADO)%>%
  summarize(n=n())%>%
  arrange(n)%>%
  mutate(frec_acum = cumsum(n))
## # A tibble: 5 × 3
##   ESTADO                                                             n frec_acum
##   <chr>                                                          <int>     <int>
## 1 Entrevista individual no realizada (no respuesta al cuestiona…    89        89
## 2 Desocupado                                                      1737      1826
## 3 Menor de 10 anios.                                              6086      7912
## 4 Ocupado                                                        19408     27320
## 5 Inactivo                                                       19765     47085

Podemos hacer el cálculo por proporción con operaciones matematicas.

freq_prop <- df %>% group_by(ESTADO)%>%
  summarize(n=n())%>%
  arrange(n)%>%
  mutate(frec_acum = cumsum(n))%>%
  ungroup()%>%
  mutate(total = sum(n), #Creo una columna que contenga el total de observaciones
         perc = (n/total)*100,
         perc_acum = (frec_acum/total)*100) #Calculo el porcentaje

freq_prop
## # A tibble: 5 × 6
##   ESTADO                                      n frec_acum total   perc perc_acum
##   <chr>                                   <int>     <int> <int>  <dbl>     <dbl>
## 1 Entrevista individual no realizada (no…    89        89 47085  0.189     0.189
## 2 Desocupado                               1737      1826 47085  3.69      3.88 
## 3 Menor de 10 anios.                       6086      7912 47085 12.9      16.8  
## 4 Ocupado                                 19408     27320 47085 41.2      58.0  
## 5 Inactivo                                19765     47085 47085 42.0     100
¿Qué nos dice esta distribución?

Gráficos con ggplot()

Una de las grandes ventajas de tidyverse es el paquete para realizar gráficos, ggplot. Incluye funciones para realizar uan gran variedad de visualizaciones. Su concepto central es la asignación (mapping en inglés) de atributos estéticos a los valores que toma una variable. Dicho de otra forma, como mostrar de modo perceptible a la vista la diferencia entre valores: con distintos colores, distintos tamaños, distintas posiciones en un gráfico, etc.

Su funcionamiento básico consiste en:

  • una llamada a la función ggplot(), pasándole un dataset y una “asignación de atributos estéticos” (aesthetic mapping en inglés) usando aes()
  • al menos una capa “geom”, que define el recurso gráfico que mostrará los datos; por ejemplo geom_bar() para dibujar barras.

Por ejemplo, podemos ver en forma gráfica la frecuencia de los niveles de actividad:

df %>%
  ggplot(aes(x=ESTADO))+
  geom_bar() +
  theme_minimal()

Este paquete tiene un uso cohesionado con tidyverse, de manera que se le puede pasar un objeto mediante pipes. Por ejemplo, ahora vamos a filtrar a aquellas personas que sean menores de 10 años y que no hayan realizado la entrevista

df %>%
  filter(ESTADO != "Menor de 10 anios." & ESTADO != "Entrevista individual no realizada (no respuesta al cuestionario individual)")%>% #Filtro los casos que no corresponden
  ggplot(aes(x=ESTADO))+
  geom_bar() +
  theme_minimal()

geom_bar() calcula automáticamente la frecuencia de la variable que le pasamos. Sin embargo, también podemos usar geom_col(). A esta función se le pueden pasar atributos x e y, y se puede, por ejemplo, graficar el porcentaje que calculamos más arriba.

freq_prop %>%
  filter(ESTADO != "Menor de 10 anios." & ESTADO != "Entrevista individual no realizada (no respuesta al cuestionario individual)")%>% 
        ggplot(aes(x=ESTADO, y = perc))+
        geom_col()

Podemos usar el atributo estético fill, que es similar color pero se aplica como relleno, “pintando” por dentro áreas como las barras de un gráfico o las regiones en un mapa (color, en cambio, se usa para líneas y puntos). Por ejemplo, podemos usar el atributo estético fill con geom_col() para pintar el interior de cada barra. Vamos a probarlo. Generemos un gráfico de CH04 en las \(x\), la frecuencia en las \(y\) y coloreemos el interior de las barras según el ESTADO.

df %>%
  filter(ESTADO != "Menor de 10 anios." & ESTADO != "Entrevista individual no realizada (no respuesta al cuestionario individual)")%>% 
  ggplot(aes(x=CH04, fill=ESTADO))+
  geom_bar()

El atributo fill tiene el atributo position, que nos permite hacer tres tipos de gráficos: dodge, stack y fill. En el primer ejemplo que vimos están ubicados con stack.

df %>%
  filter(ESTADO != "Menor de 10 anios." & ESTADO != "Entrevista individual no realizada (no respuesta al cuestionario individual)")%>% 
  ggplot(aes(x=CH04, fill=ESTADO))+
  geom_bar(position = "fill")

df %>%
  filter(ESTADO != "Menor de 10 anios." & ESTADO != "Entrevista individual no realizada (no respuesta al cuestionario individual)")%>% 
  ggplot(aes(x=CH04, fill=ESTADO))+
  geom_bar(position = "dodge")

Este tipo de gráficos son una forma útil de comparar o visualizar la relación entre dos variables. Estos graficos que estuvimos viendo nos muestran que los varones tienen un mayor nivel de ocupación que las mujeres. Otra función útil que tiene ggplot, para realizar comparaciones por tres variables, es facet_wrap(). Por ejemplo, veamos si estos niveles de actividad por género son iguales entre los niveles educativos alcanzados:

df %>%
  filter(ESTADO != "Menor de 10 anios." & ESTADO != "Entrevista individual no realizada (no respuesta al cuestionario individual)")%>% 
  ggplot(aes(x=CH04, fill=ESTADO))+
  geom_bar(position = "fill")+
  facet_wrap(.~NIVEL_ED)

  • ¿Qué podemos decir sobre la condición de actividad según este gráfico?

Finalmente, también tenemos la opción de pasar la capa labs para para agregar título, subtítulo y cambiar los nombres del eje x e y.

df %>%
  filter(ESTADO != "Menor de 10 anios." & ESTADO != "Entrevista individual no realizada (no respuesta al cuestionario individual)")%>% 
  ggplot(aes(x=CH04, fill=ESTADO))+
  geom_bar(position = "fill")+
  labs(title = "Condición de actividad según sexo",
             subtitle = "2° trimestre de 2021",
             x = "Sexo",
             y = "prop",
             fill = "Condición de actividad",
             caption = "Fuente: Encuesta Permanente de Hogares")