#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.
Cargamos los paquetes que vamos a utilizar:
library(tidyverse)
library(eph)
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(.))
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 simplesprop.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? |
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:
ggplot()
, pasándole un dataset
y una “asignación de atributos estéticos” (aesthetic mapping en
inglés) usando aes()
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)
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")