---
title: "Clase 3. Explorando datos categóricos"
subtitle: "Práctica R"
output: 
  html_document:
    toc: TRUE
    toc_float: TRUE
author: "Nayla Sol Garcilazo y Germán Rosati"
date: "`r format(Sys.time(), '%d %B, %Y')`"
theme: Boadilla
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo=FALSE)
```

```{r message=FALSE, warning=FALSE, include=FALSE, paged.print=FALSE}
knitr::opts_chunk$set(echo=TRUE, message=FALSE, warning=FALSE, tidy=TRUE)
```

# 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:
```{r, echo=TRUE, warning=TRUE}
library(tidyverse)
library(eph)
```

# Datos y los etiqueto
Importamos la base de individuos de la EPH del 2do. trimestre de 2021 y la etiquetamos.
```{r message=FALSE, warning=FALSE, paged.print=TRUE}
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. 

```{r}
table(df$CH04)
```

```{r}
prop.table(table(df$CH04))
```



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()`.
```{r}
df %>% group_by(ESTADO)%>%
  summarize(n=n())%>%
  arrange(n)%>%
  mutate(frec_acum = cumsum(n))
```

Podemos hacer el cálculo por proporción con operaciones matemáticas. 
```{r}
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
```

---
¿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 una 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:
```{r}
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

```{r}
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. 

```{r}
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() +
        theme_minimal()
```

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`.

```{r}
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() +
        theme_minimal()
```

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.`

```{r}
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") +
        theme_minimal()
```

```{r}
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") +
        theme_minimal()
```

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: 

```{r, fig.width=6, fig.height=4}
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) +
        theme_minimal()
```


- **¿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 agregar título, subtítulo y cambiar los nombres del eje x e y. 

```{r}
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") +
        theme_minimal()
```

### Recursos útiles
- [Documentación ggplot](https://ggplot2.tidyverse.org/)
- [R Graph Gallery](https://r-graph-gallery.com/)
