---
title:  Visualización de la información
output:
  html_notebook:
    toc: yes
    toc_float: yes
date: ""
subtitle: Práctica Guiada
---

### Caso práctico: Gráficos de ingresos - EPH

Para esta práctica utilizaremos las variables de ingresos captadas por la [Encuesta Permanente de Hogares](https://www.indec.gob.ar/indec/web/Institucional-Indec-BasesDeDatos)

A continuación utilzaremos los conceptos abordados, para realizar gráficos a partir de las variables de ingresos.        

```{r, warning=FALSE, message=FALSE}
#Cargamos las librerías a utilizar

library(tidyverse) # tiene ggplot, dplyr, tidyr, y otros
library(ggthemes)  # estilos de gráficos
library(ggrepel)   # etiquetas de texto más prolijas que las de ggplot
library(scales)
library(eph)
```


```{r strip.white=FALSE}

# Individual_t119 <- read.table("../Fuentes/usu_individual_t119.txt",
                              # sep=";", dec=",", header = TRUE, fill = TRUE)
Individual_t119 <- get_microdata(year = 2019, trimester = 1)

```


#### [Histogramas](https://ggplot2.tidyverse.org/reference/geom_histogram.html)


Por ejemplo, si observamos el ingreso de la ocupación principal:

```{r warning=FALSE}
hist_data <-Individual_t119 %>%
  filter(P21>0) 

ggplot(hist_data, aes(x = P21,weights = PONDIIO))+ 
geom_histogram(fill='salmon', color='grey25')+
scale_x_continuous(limits = c(0,50000))
```

En este gráfico, los posibles valores de p21 se dividen en 30 __bins__ consecutivos y el gráfico muestra cuantas observaciones caen en cada uno de ellos


#### [Kernels](https://plot.ly/ggplot2/geom_density/)

La función  ```geom_density()``` nos permite construir __kernels__ de la distribución. Es particularmente útil cuando tenemos una variable continua, dado que los histogramas rompen esa sensación de continuidad.


Veamos un ejemplo sencillo con los ingresos de la ocupación principal. Luego iremos complejizandolo 


```{r warning=FALSE}
kernel_data <-Individual_t119 %>%
  filter(P21>0) 

ggplot(kernel_data, aes(x = P21,weights = PONDIIO))+ 
geom_density(fill='salmon', color='grey25')+
scale_x_continuous(limits = c(0,50000))
```
**El eje y no tiene demasiada interpretabilidad en los Kernel, porque hace a la forma en que se construyen las distribuciones**. 

El parametro adjust, dentro de la función ```geom_density```nos permite reducir o ampliar el rango de suavizado de la distribución. Su valor por default es 1. Veamos que sucede si lo seteamos en 2 
```{r warning=FALSE}
ggplot(kernel_data, aes(x = P21,weights = PONDIIO))+ 
geom_density(adjust = 2,fill='salmon', color='grey25')+
scale_x_continuous(limits = c(0,50000))

```

Como es esperable, la distribución del ingreso tiene "picos" en los valores redondos, ya que la gente suele declarar un valor aproximado al ingreso efectivo que percibe. Nadie declara ingresos de 30001. Al suavizar la serie con un kernel, eliminamos ese efecto.Si seteamos el rango para el suavizado en valores menores a 1, podemos observar estos picos.

```{r warning=FALSE}
ggplot(kernel_data, aes(x = P21,weights = PONDIIO))+ 
geom_density(adjust = 0.01,fill='salmon', color='grey25')+
scale_x_continuous(limits = c(0,50000))
```


#### Geom Smooth

Para realizar estos gráficos, vamos a modificar un poco los datos:

- filtramos los ingresos iguales a 0.
- eliminamos las no respuestas de nivel educativo y las personas con educación especial.
- eliminamos las respuestas de tipo de establecimiento = 'otros'.
- recodificamos las variables para que tengan nombres más sugestivos:
    - __Nivel educativo__ además la convertimos a factor, porque queremos explicitarle el orden de los valores con ```levels()```. El "\\n"" es un _caracter especial_ que permite que el string continúe en la siguiente línea.
    - Sexo.
    - Tipo de establecimiento.
    
    
```{r }
ggdata <- Individual_t119 %>% 
  filter(P21>0,
         !is.na(NIVEL_ED),
         NIVEL_ED!=7, 
         PP04A !=3) %>% 
  mutate(NIVEL_ED = factor(case_when(NIVEL_ED == 1  ~ 'Primaria \n Incompleta', # '\n' significa carriage return, o enter
                                     NIVEL_ED == 2  ~ 'Primaria \n Completa',
                                     NIVEL_ED == 3  ~ 'Secundaria \nIncompleta',
                                     NIVEL_ED == 4  ~ 'Secundaria \nCompleta',
                                     NIVEL_ED == 5  ~ 'Superior \nUniversitaria \nIncompleta',
                                     NIVEL_ED == 6  ~ 'Superior \nUniversitaria \nCompleta',
                                     FALSE          ~ 'Otro'),
                           levels= c('Primaria \n Incompleta',
                                     'Primaria \n Completa',
                                     'Secundaria \nIncompleta',
                                     'Secundaria \nCompleta',
                                     'Superior \nUniversitaria \nIncompleta',
                                     'Superior \nUniversitaria \nCompleta')),
         Sexo     = case_when(CH04 == 1 ~ 'Varón',
                              CH04 == 2 ~ 'Mujer'),
         Establecimiento    = case_when(PP04A == 1 ~ 'Estatal',
                                        PP04A == 2 ~ 'Privado',
                                        FALSE      ~ 'Otro'))

ggdata
```

Para graficar un suavizado de las series, se utiliza la función [```geom_smooth()```](http://ggplot2.tidyverse.org/reference/geom_smooth.html). Con suavizado nos referimos al gráfico de un modelo realizado sobre los datos, que estima el valor en el punto x,y (para el grupo). Las regresiones lineales son un ejemplo de esto, aunque no el único, ni el que viene por default.

```{r fig.height=5, fig.width=8}
ggplot(ggdata, aes(CH06, P21, colour = Sexo, shape = Sexo, alpha = P21))+
  geom_smooth() + 
  labs(
    x = 'Edad',
    y = 'ingreso',
    title = 'Ingreso por ocupación principal',
    subtitle = 'Según edad, nivel educativo y sexo') +
  theme_minimal()+
  scale_y_continuous(labels = comma)+
  scale_alpha(guide = FALSE)+
  facet_grid(.~NIVEL_ED)
```


Si corremos el comando ```geom_smooth()```  por default, nos advierte que esta utilizando el método GAM, de [general additive models](https://m-clark.github.io/generalized-additive-models/building_gam.html).      

el __sombreado gris__ que envuelve cada línea es el intervalo de confianza de dicho punto (95% por default).

También podemos utilizar métodos lineales, agregando el parámetro ```method = 'lm'```. Haciendo esto, el gráfico muestra una regresión lineal simple. Si queremos otro tipo de regresión lineal, le podemos explicitar la fórmula.    
En el ejemplo siguiente, utilizamos la formula $y = \beta_0 +\beta_1x +\beta_2 x^2$.

```{r fig.height=5, fig.width=8}

ggplot(ggdata, aes(CH06, P21, colour = Sexo, weight = PONDIIO)) +
  geom_smooth(method = "lm", formula = y ~ poly(x, 2)) +
  labs(x = 'Edad',
       y = 'ingreso',
       title = 'Regresion cuadrática del Ingreso por ocupación principal respecto de la Edad',
       subtitle = 'Según Nivel educativo y sexo') +
  theme_minimal()+
  facet_grid(. ~ NIVEL_ED)
```


Si quisiéramos, además de ver la relación entre ingreso, Edad, Sexo y Nivel educativo, incorporar el tipo de establecimiento,público o privado. Podemos facetear el gráfico por dos variables en lugar de una, lo que crea una __matriz de gráficos__ según los cruces.

```{r fig.height=5, fig.width=8}
ggplot(ggdata, aes(CH06, P21, colour = Establecimiento, weight = PONDIIO)) +
  geom_smooth(method = "lm") +
  labs(
  x = 'Edad',
  y = 'ingreso',
  title = 'Tendencia del ingreso por ocupación principal',
  subtitle = 'Según edad, nivel educativo, sexo y tipo de establecimiento') +
  theme_minimal()+
  facet_grid(Sexo ~ NIVEL_ED)

ggsave(filename = paste0("../Resultados/", "regresion lineal.png"),scale = 2)
```



#### Treemaps (bonus track)

```{r}
library(treemapify)
```


[Trabajo doméstico no remunerado](https://data.buenosaires.gob.ar/dataset/trabajo-domestico-no-remunerado)


```{r message=FALSE, warning=FALSE}
trabajo_no_remunerado <- read_csv('../Fuentes/prom_t_simul_dom_16_sexo__annio__g_edad_limpio.csv')
```

```{r}
 trabajo_no_remunerado %>% 
  filter(sexo != 'TOTAL', grupo_edad != 'TOTAL') %>%
   mutate(promedio_hs_diarias = as.numeric(promedio_hs_diarias),
          sexo = case_when(sexo=='m'~'Mujer',
                           sexo=='v'~'Varón')) %>% 
  ggplot(., aes(area = promedio_hs_diarias, fill = promedio_hs_diarias, label = grupo_edad,
                subgroup = sexo)) +
  geom_treemap() +
  geom_treemap_subgroup_border() +
  geom_treemap_subgroup_text(place = "centre", grow = T, alpha = 0.5, colour =
                             "black", fontface = "italic", min.size = 0) +
  geom_treemap_text(colour = "white", place = "topleft", reflow = T)+
  theme(legend.position = 'none')
```




