Módulo de Gráficos y Visualización de datos

class: center, middle, inverse, title-slide # Módulo de Gráficos y Visualización de datos --- # Repasando <br> - Empezamos a ver los fundamentos del lenguaje R. <br> - Incorporamos la forma de trabajo a través de objetos. <br> - Empezamos a importar bases de datos, a procesar la información que hay dentro de ellas <br> - Conocimos algunas funciones para transformar sus elementos (variables, categorías, filas, columnas) --- ### Llegamos a un punto importantísimo del curso <img src="img/curvaR2.png" width="70%" style="display: block; margin: auto;" /> --- class: middle, center, inverse # Visualización de datos - Paquete ggplot2 --- ### ¿Por qué visualizar? <br> - _"La visualización es el proceso de hacer visibles los contrastes, ritmos y eventos que los datos expresan, que no podemos percibir cuando vienen en forma de áridas listas de números y categorías."_ [^1] <br> - Interpretar / decodificar la información de forma visual <br> [^1]: https://bitsandbricks.github.io/ciencia_de_datos_gente_sociable/visualizacion.html --- ### El paquete ggplot2 <br> -- - _ggplot2_ es uno de los paquetes principales de _tidyverse_ <br> -- - Tiene la misma lógica de "capas" y de apilamiento de sentencias, como venimos haciendo con el comando __%>%__, pero ahora lo haremos con el símbolo __+__ -- - Necesitamos estructurar los datos de forma "vertical" (¿pivot_longer suena familiar?), es decir, una columna por cada dimensión (variable) y una fila por cada observación. Estructurar bien los datos ahorra muchos dolores de cabeza. --- ### Manos a la obra <br> Queremos analizar de forma descriptiva una o más variables. Intentemos con las herramientas que aprendimos hasta el momento. <br> -- Si queremos, por ejemplo, ver cómo se comporta el ingreso de la población, podemos empezar con el __ingreso de la ocupación princial__ de los individuos. Busquemos la variable en el diseño de registro: <img src="img/dis_reg_p21.png" width="80%" style="display: block; margin: auto;" /> --- ### Librerías <br> * Cargamos las librerías necesarias ```r library(tidyverse) library(questionr) # funciones para facilitar trabajo con encuestas library(eph) library(ggthemes) # funciones para tunear gráficos library(GGally) ``` <br> * Descargamos una base de la EPH del año 2018 con la función del paquete _eph_ ```r base <- get_microdata(year = 2018, trimester = 1, type = "individual") ``` --- ## El primer paso antes de hacer un gráfico es saber qué quiero mostrar y con qué tipo de datos cuento -- ### Analicemos la variable: -- ```r class(base$P21) ``` ``` [1] "integer" ``` -- ```r any(is.na(base$P21)) ``` ``` [1] FALSE ``` -- ```r summary(base$P21) ``` ``` Min. 1st Qu. Median Mean 3rd Qu. Max. -9 0 0 5072 7200 200000 ``` --- ## Ahora sí, intentemos graficarlo --- class: split-40 count: false .column[.content[ ```r *ggplot(data = base) ``` ]] .column[.content[ <img src="Clase_5_Presentacion_files/figure-html/output_g1_1-1.png" width="100%" /> ]] --- class: split-40 count: false .column[.content[ ```r ggplot(data = base) + * aes(x = P21, * weights = PONDIIO) ``` ]] .column[.content[ <img src="Clase_5_Presentacion_files/figure-html/output_g1_3-1.png" width="100%" /> ]] --- class: split-40 count: false .column[.content[ ```r ggplot(data = base) + aes(x = P21, weights = PONDIIO) + * geom_histogram() ``` ]] .column[.content[ <img src="Clase_5_Presentacion_files/figure-html/output_g1_4-1.png" width="100%" /> ]] --- ### Saquemos los valores extremos, para poder analizar mejor gráficamente el resto de la distribución. <br> ```r base <- base %>% filter(P21 > 0 & P21 < 50000) ``` -- <br> Tiramos el summary nuevamente ```r summary(base$P21) ``` ``` Min. 1st Qu. Median Mean 3rd Qu. Max. 70 7000 12000 13937 19000 49000 ``` --- class: split-40 count: false .column[.content[ ```r *ggplot(data = base) ``` ]] .column[.content[ <img src="Clase_5_Presentacion_files/figure-html/output_g2_1-1.png" width="100%" /> ]] --- class: split-40 count: false .column[.content[ ```r ggplot(data = base) + * aes(x = P21, * weights = PONDIIO) ``` ]] .column[.content[ <img src="Clase_5_Presentacion_files/figure-html/output_g2_3-1.png" width="100%" /> ]] --- class: split-40 count: false .column[.content[ ```r ggplot(data = base) + aes(x = P21, weights = PONDIIO) + * geom_histogram(fill = "salmon", * color = "grey") ``` ]] .column[.content[ <img src="Clase_5_Presentacion_files/figure-html/output_g2_5-1.png" width="100%" /> ]] --- ## Gráficos de Boxplot ### ¿Y si la distribución del ingreso se comporta de manera diferente en función de otra variable? - Probemos con otro tipo de gráfico que nos deje comparar, en este caso, para los distintos niveles educativos alcanzados En el diseño de registro esta variable la encontramos como __NIVEL_ED__ <img src="img/dis_reg_nivel_ed.png" width="80%" style="display: block; margin: auto;" /> --- class: split-40 count: false .column[.content[ ```r *ggplot(data = base) ``` ]] .column[.content[ <img src="Clase_5_Presentacion_files/figure-html/output_boxplot_1-1.png" width="100%" /> ]] --- class: split-40 count: false .column[.content[ ```r ggplot(data = base) + * aes(x = NIVEL_ED) ``` ]] .column[.content[ <img src="Clase_5_Presentacion_files/figure-html/output_boxplot_2-1.png" width="100%" /> ]] --- class: split-40 count: false .column[.content[ ```r ggplot(data = base) + aes(x = NIVEL_ED) + * aes(y = P21) ``` ]] .column[.content[ <img src="Clase_5_Presentacion_files/figure-html/output_boxplot_3-1.png" width="100%" /> ]] --- class: split-40 count: false .column[.content[ ```r ggplot(data = base) + aes(x = NIVEL_ED) + aes(y = P21) + * geom_boxplot() ``` ]] .column[.content[ <img src="Clase_5_Presentacion_files/figure-html/output_boxplot_4-1.png" width="100%" /> ]] --- class: split-40 count: false .column[.content[ ```r ggplot(data = base) + aes(x = NIVEL_ED) + aes(y = P21) + geom_boxplot() + * aes(group = NIVEL_ED) ``` ]] .column[.content[ <img src="Clase_5_Presentacion_files/figure-html/output_boxplot_5-1.png" width="100%" /> ]] --- ## Mucho mejor! Pero... ¿Qué pasó con las categorías? ¿Cómo las muestro? -- - Tal como se descarga la base de la página del INDEC, vemos que la variable __NIVEL_ED__ es de tipo "entero". ```r class(base$NIVEL_ED) ``` ``` [1] "integer" ``` -- ```r table(base$NIVEL_ED) ``` ``` 1 2 3 4 5 6 7 685 2953 3296 5646 2585 4107 83 ``` -- Transformemos, entonces, a _NIVEL_ED_ en una variable de tipo _factor_, asi podremos contar con las etiquetas e, incluso, reordenar sus categorías de forma ordinal --- ```r base <- base %>% mutate(NIVEL_ED = factor(NIVEL_ED, levels = c(7,1:6), labels = c("Sin instruccion", "Primaria incompleta", "Primaria completa", "Secundaria incompleta", "Secundaria completa", "Sup. incompleto", "Sup. completo"))) ``` Tiramos una frecuencia para chequear el trabajo hecho ```r table(base$NIVEL_ED) ``` ``` Sin instruccion Primaria incompleta Primaria completa 83 685 2953 Secundaria incompleta Secundaria completa Sup. incompleto 3296 5646 2585 Sup. completo 4107 ``` --- ## Gráficos de Boxplot ### Ahora sí, con etiquetas en la variable, sumemos otros parámetros del gráfico --- class: split-40 count: false .column[.content[ ```r *ggplot(data = base) ``` ]] .column[.content[ <img src="Clase_5_Presentacion_files/figure-html/output_g3_1-1.png" width="100%" /> ]] --- class: split-40 count: false .column[.content[ ```r ggplot(data = base) + * aes(x = NIVEL_ED) ``` ]] .column[.content[ <img src="Clase_5_Presentacion_files/figure-html/output_g3_2-1.png" width="100%" /> ]] --- class: split-40 count: false .column[.content[ ```r ggplot(data = base) + aes(x = NIVEL_ED) + * aes(y = P21) ``` ]] .column[.content[ <img src="Clase_5_Presentacion_files/figure-html/output_g3_3-1.png" width="100%" /> ]] --- class: split-40 count: false .column[.content[ ```r ggplot(data = base) + aes(x = NIVEL_ED) + aes(y = P21) + * geom_boxplot() ``` ]] .column[.content[ <img src="Clase_5_Presentacion_files/figure-html/output_g3_4-1.png" width="100%" /> ]] --- class: split-40 count: false .column[.content[ ```r ggplot(data = base) + aes(x = NIVEL_ED) + aes(y = P21) + geom_boxplot() + * aes(group = NIVEL_ED) ``` ]] .column[.content[ <img src="Clase_5_Presentacion_files/figure-html/output_g3_5-1.png" width="100%" /> ]] --- class: split-40 count: false .column[.content[ ```r ggplot(data = base) + aes(x = NIVEL_ED) + aes(y = P21) + geom_boxplot() + aes(group = NIVEL_ED) + * aes(fill = NIVEL_ED) ``` ]] .column[.content[ <img src="Clase_5_Presentacion_files/figure-html/output_g3_6-1.png" width="100%" /> ]] --- class: split-40 count: false .column[.content[ ```r ggplot(data = base) + aes(x = NIVEL_ED) + aes(y = P21) + geom_boxplot() + aes(group = NIVEL_ED) + aes(fill = NIVEL_ED) + * theme_minimal() ``` ]] .column[.content[ <img src="Clase_5_Presentacion_files/figure-html/output_g3_7-1.png" width="100%" /> ]] --- class: split-40 count: false .column[.content[ ```r ggplot(data = base) + aes(x = NIVEL_ED) + aes(y = P21) + geom_boxplot() + aes(group = NIVEL_ED) + aes(fill = NIVEL_ED) + theme_minimal() + * labs(x = "Máximo nivel educativo alcanzado") ``` ]] .column[.content[ <img src="Clase_5_Presentacion_files/figure-html/output_g3_8-1.png" width="100%" /> ]] --- class: split-40 count: false .column[.content[ ```r ggplot(data = base) + aes(x = NIVEL_ED) + aes(y = P21) + geom_boxplot() + aes(group = NIVEL_ED) + aes(fill = NIVEL_ED) + theme_minimal() + labs(x = "Máximo nivel educativo alcanzado") + * labs(y = "Ingreso de la ocupación principal") ``` ]] .column[.content[ <img src="Clase_5_Presentacion_files/figure-html/output_g3_9-1.png" width="100%" /> ]] --- class: split-40 count: false .column[.content[ ```r ggplot(data = base) + aes(x = NIVEL_ED) + aes(y = P21) + geom_boxplot() + aes(group = NIVEL_ED) + aes(fill = NIVEL_ED) + theme_minimal() + labs(x = "Máximo nivel educativo alcanzado") + labs(y = "Ingreso de la ocupación principal") + * labs(title = "Boxplot del Ingreso de la Ocupación Principal por máximo nivel de estudios alcanzado") ``` ]] .column[.content[ <img src="Clase_5_Presentacion_files/figure-html/output_g3_10-1.png" width="100%" /> ]] --- class: split-40 count: false .column[.content[ ```r ggplot(data = base) + aes(x = NIVEL_ED) + aes(y = P21) + geom_boxplot() + aes(group = NIVEL_ED) + aes(fill = NIVEL_ED) + theme_minimal() + labs(x = "Máximo nivel educativo alcanzado") + labs(y = "Ingreso de la ocupación principal") + labs(title = "Boxplot del Ingreso de la Ocupación Principal por máximo nivel de estudios alcanzado") + * labs(caption = "Fuente: Elaboración propia en base a EPH-INDEC") ``` ]] .column[.content[ <img src="Clase_5_Presentacion_files/figure-html/output_g3_11-1.png" width="100%" /> ]] --- class: split-40 count: false .column[.content[ ```r ggplot(data = base) + aes(x = NIVEL_ED) + aes(y = P21) + geom_boxplot() + aes(group = NIVEL_ED) + aes(fill = NIVEL_ED) + theme_minimal() + labs(x = "Máximo nivel educativo alcanzado") + labs(y = "Ingreso de la ocupación principal") + labs(title = "Boxplot del Ingreso de la Ocupación Principal por máximo nivel de estudios alcanzado") + labs(caption = "Fuente: Elaboración propia en base a EPH-INDEC") + * scale_y_continuous(limits = c(0, 50000)) ``` ]] .column[.content[ <img src="Clase_5_Presentacion_files/figure-html/output_g3_12-1.png" width="100%" /> ]] --- class: split-40 count: false .column[.content[ ```r ggplot(data = base) + aes(x = NIVEL_ED) + aes(y = P21) + geom_boxplot() + aes(group = NIVEL_ED) + aes(fill = NIVEL_ED) + theme_minimal() + labs(x = "Máximo nivel educativo alcanzado") + labs(y = "Ingreso de la ocupación principal") + labs(title = "Boxplot del Ingreso de la Ocupación Principal por máximo nivel de estudios alcanzado") + labs(caption = "Fuente: Elaboración propia en base a EPH-INDEC") + scale_y_continuous(limits = c(0, 50000)) + * coord_flip() ``` ]] .column[.content[ <img src="Clase_5_Presentacion_files/figure-html/output_g3_13-1.png" width="100%" /> ]] --- class: middle, center, inverse ## Gráficos de densidad ### Probemos con otro tipo de gráfico, que ayude a comparar mejor (que es nuestro objetivo) --- class: split-40 count: false .column[.content[ ```r *ggplot(data = base) ``` ]] .column[.content[ <img src="Clase_5_Presentacion_files/figure-html/output_g4_1-1.png" width="100%" /> ]] --- class: split-40 count: false .column[.content[ ```r ggplot(data = base) + * aes(x = P21,weights = PONDIIO) ``` ]] .column[.content[ <img src="Clase_5_Presentacion_files/figure-html/output_g4_2-1.png" width="100%" /> ]] --- class: split-40 count: false .column[.content[ ```r ggplot(data = base) + aes(x = P21,weights = PONDIIO) + * geom_density() ``` ]] .column[.content[ <img src="Clase_5_Presentacion_files/figure-html/output_g4_3-1.png" width="100%" /> ]] --- class: split-40 count: false .column[.content[ ```r ggplot(data = base) + aes(x = P21,weights = PONDIIO) + geom_density() + * aes(group = NIVEL_ED) ``` ]] .column[.content[ <img src="Clase_5_Presentacion_files/figure-html/output_g4_4-1.png" width="100%" /> ]] --- class: split-40 count: false .column[.content[ ```r ggplot(data = base) + aes(x = P21,weights = PONDIIO) + geom_density() + aes(group = NIVEL_ED) + * aes(color = NIVEL_ED) ``` ]] .column[.content[ <img src="Clase_5_Presentacion_files/figure-html/output_g4_5-1.png" width="100%" /> ]] --- class: split-40 count: false .column[.content[ ```r ggplot(data = base) + aes(x = P21,weights = PONDIIO) + geom_density() + aes(group = NIVEL_ED) + aes(color = NIVEL_ED) + * theme_minimal() ``` ]] .column[.content[ <img src="Clase_5_Presentacion_files/figure-html/output_g4_6-1.png" width="100%" /> ]] --- class: split-40 count: false .column[.content[ ```r ggplot(data = base) + aes(x = P21,weights = PONDIIO) + geom_density() + aes(group = NIVEL_ED) + aes(color = NIVEL_ED) + theme_minimal() + * labs(x = "Ingreso de la ocupación principal") ``` ]] .column[.content[ <img src="Clase_5_Presentacion_files/figure-html/output_g4_7-1.png" width="100%" /> ]] --- class: split-40 count: false .column[.content[ ```r ggplot(data = base) + aes(x = P21,weights = PONDIIO) + geom_density() + aes(group = NIVEL_ED) + aes(color = NIVEL_ED) + theme_minimal() + labs(x = "Ingreso de la ocupación principal") + * labs(title = "Ingreso de la Ocupación Principal por máximo nivel de estudios alcanzado") ``` ]] .column[.content[ <img src="Clase_5_Presentacion_files/figure-html/output_g4_8-1.png" width="100%" /> ]] --- class: split-40 count: false .column[.content[ ```r ggplot(data = base) + aes(x = P21,weights = PONDIIO) + geom_density() + aes(group = NIVEL_ED) + aes(color = NIVEL_ED) + theme_minimal() + labs(x = "Ingreso de la ocupación principal") + labs(title = "Ingreso de la Ocupación Principal por máximo nivel de estudios alcanzado") + * labs(caption = "Fuente: Elaboración propia en base a EPH-INDEC") ``` ]] .column[.content[ <img src="Clase_5_Presentacion_files/figure-html/output_g4_9-1.png" width="100%" /> ]] --- class: middle, center, inverse ## Gráficos de densidad ### Que hacemos si queremos comparar las distribuciones del ingreso por sexo, contemplando el nivel educativo como variable diferenciadora --- Nuevamente, tenemos que editar primero una variable para poder trabajar con etiquetas. En este caso la variable de sexo: ```r base <- base %>% mutate(CH04 = factor(CH04, levels = c(1, 2), labels = c("Varón", "Mujer"))) table(base$CH04) ``` ``` Varón Mujer 10887 8468 ``` --- class: split-40 count: false .column[.content[ ```r *ggplot(data = base) ``` ]] .column[.content[ <img src="Clase_5_Presentacion_files/figure-html/output_g5_1-1.png" width="100%" /> ]] --- class: split-40 count: false .column[.content[ ```r ggplot(data = base) + * aes(x = P21) ``` ]] .column[.content[ <img src="Clase_5_Presentacion_files/figure-html/output_g5_2-1.png" width="100%" /> ]] --- class: split-40 count: false .column[.content[ ```r ggplot(data = base) + aes(x = P21) + * geom_density() ``` ]] .column[.content[ <img src="Clase_5_Presentacion_files/figure-html/output_g5_3-1.png" width="100%" /> ]] --- class: split-40 count: false .column[.content[ ```r ggplot(data = base) + aes(x = P21) + geom_density() + * aes(group = CH04) ``` ]] .column[.content[ <img src="Clase_5_Presentacion_files/figure-html/output_g5_4-1.png" width="100%" /> ]] --- class: split-40 count: false .column[.content[ ```r ggplot(data = base) + aes(x = P21) + geom_density() + aes(group = CH04) + * aes(color = CH04) ``` ]] .column[.content[ <img src="Clase_5_Presentacion_files/figure-html/output_g5_5-1.png" width="100%" /> ]] --- class: split-40 count: false .column[.content[ ```r ggplot(data = base) + aes(x = P21) + geom_density() + aes(group = CH04) + aes(color = CH04) + * theme_minimal() ``` ]] .column[.content[ <img src="Clase_5_Presentacion_files/figure-html/output_g5_6-1.png" width="100%" /> ]] --- class: split-40 count: false .column[.content[ ```r ggplot(data = base) + aes(x = P21) + geom_density() + aes(group = CH04) + aes(color = CH04) + theme_minimal() + * labs(x = "Ingreso de la ocupación principal") ``` ]] .column[.content[ <img src="Clase_5_Presentacion_files/figure-html/output_g5_7-1.png" width="100%" /> ]] --- class: split-40 count: false .column[.content[ ```r ggplot(data = base) + aes(x = P21) + geom_density() + aes(group = CH04) + aes(color = CH04) + theme_minimal() + labs(x = "Ingreso de la ocupación principal") + * labs(title = "Ingreso de la Ocupación Principal por Nivel educativo") ``` ]] .column[.content[ <img src="Clase_5_Presentacion_files/figure-html/output_g5_8-1.png" width="100%" /> ]] --- class: split-40 count: false .column[.content[ ```r ggplot(data = base) + aes(x = P21) + geom_density() + aes(group = CH04) + aes(color = CH04) + theme_minimal() + labs(x = "Ingreso de la ocupación principal") + labs(title = "Ingreso de la Ocupación Principal por Nivel educativo") + * labs(caption = "Fuente: Elaboración propia en base a EPH-INDEC") ``` ]] .column[.content[ <img src="Clase_5_Presentacion_files/figure-html/output_g5_9-1.png" width="100%" /> ]] --- class: split-40 count: false .column[.content[ ```r ggplot(data = base) + aes(x = P21) + geom_density() + aes(group = CH04) + aes(color = CH04) + theme_minimal() + labs(x = "Ingreso de la ocupación principal") + labs(title = "Ingreso de la Ocupación Principal por Nivel educativo") + labs(caption = "Fuente: Elaboración propia en base a EPH-INDEC") + * facet_wrap(~ NIVEL_ED) ``` ]] .column[.content[ <img src="Clase_5_Presentacion_files/figure-html/output_g5_10-1.png" width="100%" /> ]] --- class: split-40 count: false .column[.content[ ```r ggplot(data = base) + aes(x = P21) + geom_density() + aes(group = CH04) + aes(color = CH04) + theme_minimal() + labs(x = "Ingreso de la ocupación principal") + labs(title = "Ingreso de la Ocupación Principal por Nivel educativo") + labs(caption = "Fuente: Elaboración propia en base a EPH-INDEC") + facet_wrap(~ NIVEL_ED) + * scale_x_continuous(limits = c(0, 50000)) ``` ]] .column[.content[ <img src="Clase_5_Presentacion_files/figure-html/output_g5_11-1.png" width="100%" /> ]] --- class: middle, center, inverse ## Gráficos de Barras ### Ahora queremos conocer cómo se distribuye la población en función del máximo nivel educativo alcanzado --- - Observemos un poco más sobre la variable con las herramientas que conocemos ```r base %>% calculate_tabulates(x = "NIVEL_ED", add.totals = "row", add.percentage = "col", weights = "PONDERA") ``` ``` NIVEL_ED Freq Sin instruccion 0.4% Primaria incompleta 3.5% Primaria completa 14.7% Secundaria incompleta 16.9% Secundaria completa 27.9% Sup. incompleto 14.3% Sup. completo 22.2% Total 100.0% ``` --- ¿Y si la cruzamos por sexo? ```r base %>% calculate_tabulates(x = "NIVEL_ED", y = "CH04", add.totals = "row", add.percentage = "col", weights = "PONDERA") ``` ``` NIVEL_ED/CH04 Varón Mujer Sin instruccion 0.5% 0.4% Primaria incompleta 4.1% 2.8% Primaria completa 17.9% 10.8% Secundaria incompleta 19.8% 13.4% Secundaria completa 29.2% 26.4% Sup. incompleto 12.4% 16.7% Sup. completo 16.1% 29.6% Total 100.0% 100.0% ``` --- class: split-40 count: false .column[.content[ ```r *base ``` ]] .column[.content[ ``` # A tibble: 19,355 x 177 CODUSU ANO4 TRIMESTRE NRO_HOGAR COMPONENTE H15 REGION MAS_500 AGLOMERADO <fct> <int> <int> <int> <int> <int> <int> <fct> <int> 1 TQRMN~ 2018 1 1 1 1 43 S 4 2 TQRMN~ 2018 1 1 1 1 43 S 4 3 TQRMN~ 2018 1 1 2 1 43 S 4 4 TQRMN~ 2018 1 1 1 1 43 S 4 5 TQRMN~ 2018 1 1 2 1 43 S 4 6 TQRMN~ 2018 1 1 1 1 43 S 4 7 TQRMN~ 2018 1 1 4 1 43 S 4 8 TQSMN~ 2018 1 1 1 1 43 S 2 9 TQRMN~ 2018 1 1 1 1 43 S 2 10 TQRMN~ 2018 1 1 1 1 43 S 2 # ... with 19,345 more rows, and 168 more variables: PONDERA <int>, CH03 <int>, # CH04 <fct>, CH05 <fct>, CH06 <int>, CH07 <int>, CH08 <int>, CH09 <int>, # CH10 <int>, CH11 <int>, CH12 <int>, CH13 <int>, CH14 <chr>, CH15 <int>, # CH15_COD <int>, CH16 <int>, CH16_COD <int>, NIVEL_ED <fct>, ESTADO <int>, # CAT_OCUP <int>, CAT_INAC <int>, IMPUTA <int>, PP02C1 <int>, PP02C2 <int>, # PP02C3 <int>, PP02C4 <int>, PP02C5 <int>, PP02C6 <int>, PP02C7 <int>, # PP02C8 <int>, PP02E <int>, PP02H <int>, PP02I <int>, PP03C <int>, # PP03D <int>, PP3E_TOT <int>, PP3F_TOT <int>, PP03G <int>, PP03H <int>, # PP03I <int>, PP03J <int>, INTENSI <int>, PP04A <int>, PP04B_COD <chr>, # PP04B1 <int>, PP04B2 <int>, PP04B3_MES <int>, PP04B3_ANO <int>, # PP04B3_DIA <int>, PP04C <int>, PP04C99 <int>, PP04D_COD <chr>, PP04G <int>, # PP05B2_MES <int>, PP05B2_ANO <int>, PP05B2_DIA <int>, PP05C_1 <int>, # PP05C_2 <int>, PP05C_3 <int>, PP05E <int>, PP05F <int>, PP05H <int>, # PP06A <int>, PP06C <int>, PP06D <int>, PP06E <int>, PP06H <int>, # PP07A <int>, PP07C <int>, PP07D <int>, PP07E <int>, PP07F1 <int>, # PP07F2 <int>, PP07F3 <int>, PP07F4 <int>, PP07F5 <int>, PP07G1 <int>, # PP07G2 <int>, PP07G3 <int>, PP07G4 <int>, PP07G_59 <int>, PP07H <int>, # PP07I <int>, PP07J <int>, PP07K <int>, PP08D1 <int>, PP08D4 <int>, # PP08F1 <int>, PP08F2 <int>, PP08J1 <int>, PP08J2 <int>, PP08J3 <int>, # PP09A <int>, PP09A_ESP <fct>, PP09B <int>, PP09C <int>, PP09C_ESP <fct>, # PP10A <int>, PP10C <int>, PP10D <int>, ... ``` ]] --- class: split-40 count: false .column[.content[ ```r base %>% * select(NIVEL_ED, CH04, PONDERA) ``` ]] .column[.content[ ``` # A tibble: 19,355 x 3 NIVEL_ED CH04 PONDERA <fct> <fct> <int> 1 Primaria incompleta Varón 886 2 Sup. completo Mujer 509 3 Sup. incompleto Mujer 509 4 Secundaria incompleta Varón 674 5 Sup. incompleto Mujer 674 6 Primaria incompleta Varón 368 7 Secundaria completa Varón 368 8 Secundaria completa Mujer 573 9 Sup. completo Varón 546 10 Secundaria completa Varón 1060 # ... with 19,345 more rows ``` ]] --- class: split-40 count: false .column[.content[ ```r base %>% select(NIVEL_ED, CH04, PONDERA) %>% * group_by(NIVEL_ED) ``` ]] .column[.content[ ``` # A tibble: 19,355 x 3 # Groups: NIVEL_ED [7] NIVEL_ED CH04 PONDERA <fct> <fct> <int> 1 Primaria incompleta Varón 886 2 Sup. completo Mujer 509 3 Sup. incompleto Mujer 509 4 Secundaria incompleta Varón 674 5 Sup. incompleto Mujer 674 6 Primaria incompleta Varón 368 7 Secundaria completa Varón 368 8 Secundaria completa Mujer 573 9 Sup. completo Varón 546 10 Secundaria completa Varón 1060 # ... with 19,345 more rows ``` ]] --- class: split-40 count: false .column[.content[ ```r base %>% select(NIVEL_ED, CH04, PONDERA) %>% group_by(NIVEL_ED) %>% * summarise(pob_tot = sum(PONDERA), * pob_varon = sum(PONDERA[CH04 == "Varón"]), * pob_mujer = sum(PONDERA[CH04 == "Mujer"]), * varon = pob_varon/pob_tot * 100, * mujer = pob_mujer/pob_tot * 100) ``` ]] .column[.content[ ``` # A tibble: 7 x 6 NIVEL_ED pob_tot pob_varon pob_mujer varon mujer <fct> <int> <int> <int> <dbl> <dbl> 1 Sin instruccion 37282 22034 15248 59.1 40.9 2 Primaria incompleta 304158 196399 107759 64.6 35.4 3 Primaria completa 1275215 855946 419269 67.1 32.9 4 Secundaria incompleta 1466621 945598 521023 64.5 35.5 5 Secundaria completa 2419023 1391790 1027233 57.5 42.5 6 Sup. incompleto 1241573 591015 650558 47.6 52.4 7 Sup. completo 1920899 766282 1154617 39.9 60.1 ``` ]] --- class: split-40 count: false .column[.content[ ```r base %>% select(NIVEL_ED, CH04, PONDERA) %>% group_by(NIVEL_ED) %>% summarise(pob_tot = sum(PONDERA), pob_varon = sum(PONDERA[CH04 == "Varón"]), pob_mujer = sum(PONDERA[CH04 == "Mujer"]), varon = pob_varon/pob_tot * 100, mujer = pob_mujer/pob_tot * 100) %>% * select(NIVEL_ED, mujer, varon) ``` ]] .column[.content[ ``` # A tibble: 7 x 3 NIVEL_ED mujer varon <fct> <dbl> <dbl> 1 Sin instruccion 40.9 59.1 2 Primaria incompleta 35.4 64.6 3 Primaria completa 32.9 67.1 4 Secundaria incompleta 35.5 64.5 5 Secundaria completa 42.5 57.5 6 Sup. incompleto 52.4 47.6 7 Sup. completo 60.1 39.9 ``` ]] --- class: split-40 count: false .column[.content[ ```r base %>% select(NIVEL_ED, CH04, PONDERA) %>% group_by(NIVEL_ED) %>% summarise(pob_tot = sum(PONDERA), pob_varon = sum(PONDERA[CH04 == "Varón"]), pob_mujer = sum(PONDERA[CH04 == "Mujer"]), varon = pob_varon/pob_tot * 100, mujer = pob_mujer/pob_tot * 100) %>% select(NIVEL_ED, mujer, varon) %>% * gather(key = sexo, value = valor, 2:3) ``` ]] .column[.content[ ``` # A tibble: 14 x 3 NIVEL_ED sexo valor <fct> <chr> <dbl> 1 Sin instruccion mujer 40.9 2 Primaria incompleta mujer 35.4 3 Primaria completa mujer 32.9 4 Secundaria incompleta mujer 35.5 5 Secundaria completa mujer 42.5 6 Sup. incompleto mujer 52.4 7 Sup. completo mujer 60.1 8 Sin instruccion varon 59.1 9 Primaria incompleta varon 64.6 10 Primaria completa varon 67.1 11 Secundaria incompleta varon 64.5 12 Secundaria completa varon 57.5 13 Sup. incompleto varon 47.6 14 Sup. completo varon 39.9 ``` ]] --- ```r ggplot(data = base_graf) + aes(x = NIVEL_ED, y = valor, fill = sexo) + geom_bar(stat = "identity")+ coord_flip() ``` <img src="Clase_5_Presentacion_files/figure-html/unnamed-chunk-18-1.png" width="55%" style="display: block; margin: auto;" /> --- ```r ggplot(data = base_graf) + aes(x = NIVEL_ED, y = valor, fill = sexo) + geom_bar(stat = "identity", position = position_dodge())+ coord_flip() ``` <img src="Clase_5_Presentacion_files/figure-html/unnamed-chunk-19-1.png" width="55%" style="display: block; margin: auto;" /> --- ```r ggplot(data = base_graf) + aes(x = NIVEL_ED, y = valor, fill = sexo) + geom_bar(stat = "identity", position = position_dodge(), color = "black")+ coord_flip() ``` <img src="Clase_5_Presentacion_files/figure-html/unnamed-chunk-20-1.png" width="55%" style="display: block; margin: auto;" /> --- ```r ggplot(data = base_graf) + aes(x = NIVEL_ED, y = valor, fill = sexo) + geom_bar(stat = "identity", position = position_dodge(), color = "black") + labs(title = "Máximo nivel de intrucción alcanzado por sexo", x = "Máximo nivel de instrucción alcanzado", y = "Porcentaje", caption = "Fuente: EPH - INDEC. Total Aglomerados, 1 trimestre de 2018.") + coord_flip() ``` <img src="Clase_5_Presentacion_files/figure-html/unnamed-chunk-21-1.png" width="40%" style="display: block; margin: auto;" /> --- class: middle, center, inverse ## Gráficos de líneas ### Veamos la evolución en el tiempo del ingreso promedio de la ocupación principal --- * Descarguemos las 4 bases de datos del año 2018 con la función del paquete _eph_. Que tiene el objeto que nos trae la función *get_microdata*? ```r bases2018 <- get_microdata(year = 2018, trimester = 1:4, type = "individual") bases2018 ``` ``` # A tibble: 4 x 5 year trimester wave type microdata <dbl> <int> <lgl> <fct> <list> 1 2018 1 NA individual <tibble [57,951 x 177]> 2 2018 2 NA individual <tibble [57,835 x 177]> 3 2018 3 NA individual <tibble [56,879 x 177]> 4 2018 4 NA individual <tibble [57,418 x 177]> ``` -- El objeto es un _tibble_ de cuatro observaciones, y 5 variables. En la quinta variable están contenidos los dataframes propios a cada trimestre --- * Seleccionamos unicamente la columna *microdata* y aplicamos la funcion **unnest** para apilar todos los dataframes en uno solo. ```r bases2018.apiladas <- bases2018 %>% select(microdata) %>% unnest(cols = c(microdata)) nrow(bases2018.apiladas) ``` ``` [1] 230083 ``` -- Tenemos un objeto con más de 230.000 registros! --- * Calculemos el ingreso de la ocupación principal promedio por sexo en cada trimestre ``` # A tibble: 8 x 4 # Groups: ANO4, TRIMESTRE [4] ANO4 TRIMESTRE CH04 ingreso.promedio <int> <int> <fct> <dbl> 1 2018 1 Varón 17700. 2 2018 1 Mujer 13294. 3 2018 2 Varón 18195. 4 2018 2 Mujer 13594. 5 2018 3 Varón 19000. 6 2018 3 Mujer 14288. 7 2018 4 Varón 21198. 8 2018 4 Mujer 15713. ``` class: split-40 count: false .column[.content[ ```r *base.ingresos.prom <- bases2018.apiladas %>% * filter(P21>0) ``` ]] .column[.content[ ]] --- class: split-40 count: false .column[.content[ ```r base.ingresos.prom <- bases2018.apiladas %>% filter(P21>0) %>% * mutate(CH04 = factor(CH04,levels = c(1, 2),labels = c("Varón", "Mujer"))) ``` ]] .column[.content[ ]] --- class: split-40 count: false .column[.content[ ```r base.ingresos.prom <- bases2018.apiladas %>% filter(P21>0) %>% mutate(CH04 = factor(CH04,levels = c(1, 2),labels = c("Varón", "Mujer"))) %>% * group_by(ANO4,TRIMESTRE,CH04) ``` ]] .column[.content[ ]] --- class: split-40 count: false .column[.content[ ```r base.ingresos.prom <- bases2018.apiladas %>% filter(P21>0) %>% mutate(CH04 = factor(CH04,levels = c(1, 2),labels = c("Varón", "Mujer"))) %>% group_by(ANO4,TRIMESTRE,CH04) %>% * summarise(ingreso.promedio=weighted.mean(P21,PONDIIO)) ``` ]] .column[.content[ ]] --- class: split-40 count: false .column[.content[ ```r base.ingresos.prom <- bases2018.apiladas %>% filter(P21>0) %>% mutate(CH04 = factor(CH04,levels = c(1, 2),labels = c("Varón", "Mujer"))) %>% group_by(ANO4,TRIMESTRE,CH04) %>% summarise(ingreso.promedio=weighted.mean(P21,PONDIIO)) *base.ingresos.prom ``` ]] .column[.content[ ``` # A tibble: 8 x 4 # Groups: ANO4, TRIMESTRE [4] ANO4 TRIMESTRE CH04 ingreso.promedio <int> <int> <fct> <dbl> 1 2018 1 Varón 17700. 2 2018 1 Mujer 13294. 3 2018 2 Varón 18195. 4 2018 2 Mujer 13594. 5 2018 3 Varón 19000. 6 2018 3 Mujer 14288. 7 2018 4 Varón 21198. 8 2018 4 Mujer 15713. ``` ]] --- class: split-40 count: false .column[.content[ ```r base.ingresos.prom <- bases2018.apiladas %>% filter(P21>0) %>% mutate(CH04 = factor(CH04,levels = c(1, 2),labels = c("Varón", "Mujer"))) %>% group_by(ANO4,TRIMESTRE,CH04) %>% summarise(ingreso.promedio=weighted.mean(P21,PONDIIO)) base.ingresos.prom ``` ]] .column[.content[ ``` # A tibble: 8 x 4 # Groups: ANO4, TRIMESTRE [4] ANO4 TRIMESTRE CH04 ingreso.promedio <int> <int> <fct> <dbl> 1 2018 1 Varón 17700. 2 2018 1 Mujer 13294. 3 2018 2 Varón 18195. 4 2018 2 Mujer 13594. 5 2018 3 Varón 19000. 6 2018 3 Mujer 14288. 7 2018 4 Varón 21198. 8 2018 4 Mujer 15713. ``` ]] --- class: split-40 count: false .column[.content[ ```r *base.ingresos.prom ``` ]] .column[.content[ ``` # A tibble: 8 x 4 # Groups: ANO4, TRIMESTRE [4] ANO4 TRIMESTRE CH04 ingreso.promedio <int> <int> <fct> <dbl> 1 2018 1 Varón 17700. 2 2018 1 Mujer 13294. 3 2018 2 Varón 18195. 4 2018 2 Mujer 13594. 5 2018 3 Varón 19000. 6 2018 3 Mujer 14288. 7 2018 4 Varón 21198. 8 2018 4 Mujer 15713. ``` ]] --- class: split-40 count: false .column[.content[ ```r base.ingresos.prom %>% *ggplot() ``` ]] .column[.content[ <img src="Clase_5_Presentacion_files/figure-html/output_g6_2-1.png" width="100%" /> ]] --- class: split-40 count: false .column[.content[ ```r base.ingresos.prom %>% ggplot() + * aes(x = TRIMESTRE, * y = ingreso.promedio, * group = CH04, * color = CH04) ``` ]] .column[.content[ <img src="Clase_5_Presentacion_files/figure-html/output_g6_6-1.png" width="100%" /> ]] --- class: split-40 count: false .column[.content[ ```r base.ingresos.prom %>% ggplot() + aes(x = TRIMESTRE, y = ingreso.promedio, group = CH04, color = CH04) + * geom_line() ``` ]] .column[.content[ <img src="Clase_5_Presentacion_files/figure-html/output_g6_7-1.png" width="100%" /> ]] --- class: split-40 count: false .column[.content[ ```r base.ingresos.prom %>% ggplot() + aes(x = TRIMESTRE, y = ingreso.promedio, group = CH04, color = CH04) + geom_line() + * geom_point() ``` ]] .column[.content[ <img src="Clase_5_Presentacion_files/figure-html/output_g6_8-1.png" width="100%" /> ]] --- class: split-40 count: false .column[.content[ ```r base.ingresos.prom %>% ggplot() + aes(x = TRIMESTRE, y = ingreso.promedio, group = CH04, color = CH04) + geom_line() + geom_point() + * theme_minimal() ``` ]] .column[.content[ <img src="Clase_5_Presentacion_files/figure-html/output_g6_9-1.png" width="100%" /> ]] --- class: split-40 count: false .column[.content[ ```r base.ingresos.prom %>% ggplot() + aes(x = TRIMESTRE, y = ingreso.promedio, group = CH04, color = CH04) + geom_line() + geom_point() + theme_minimal() + * labs(x = "Trimestre") ``` ]] .column[.content[ <img src="Clase_5_Presentacion_files/figure-html/output_g6_10-1.png" width="100%" /> ]] --- class: split-40 count: false .column[.content[ ```r base.ingresos.prom %>% ggplot() + aes(x = TRIMESTRE, y = ingreso.promedio, group = CH04, color = CH04) + geom_line() + geom_point() + theme_minimal() + labs(x = "Trimestre") + * labs(y = "Ingreso de la ocupación principal") ``` ]] .column[.content[ <img src="Clase_5_Presentacion_files/figure-html/output_g6_11-1.png" width="100%" /> ]] --- class: split-40 count: false .column[.content[ ```r base.ingresos.prom %>% ggplot() + aes(x = TRIMESTRE, y = ingreso.promedio, group = CH04, color = CH04) + geom_line() + geom_point() + theme_minimal() + labs(x = "Trimestre") + labs(y = "Ingreso de la ocupación principal") + * labs(title = "Ingreso de la Ocupación Principal promedio por Sexo. Año 2018") ``` ]] .column[.content[ <img src="Clase_5_Presentacion_files/figure-html/output_g6_12-1.png" width="100%" /> ]] --- class: split-40 count: false .column[.content[ ```r base.ingresos.prom %>% ggplot() + aes(x = TRIMESTRE, y = ingreso.promedio, group = CH04, color = CH04) + geom_line() + geom_point() + theme_minimal() + labs(x = "Trimestre") + labs(y = "Ingreso de la ocupación principal") + labs(title = "Ingreso de la Ocupación Principal promedio por Sexo. Año 2018") + * labs(caption = "Fuente: Elaboración propia en base a EPH-INDEC") ``` ]] .column[.content[ <img src="Clase_5_Presentacion_files/figure-html/output_g6_13-1.png" width="100%" /> ]] --- * Como se relaciona la variable *P21* con el resto de variables de la base? La función **ggpairs** del paquete *GGaly nos permite una mirada rápida de la interacción entre las variables de nuestra base (seleccionamos algunas) ```r base %>% select(P21,EDAD = CH06,SEXO = CH04,NIVEL_ED) %>% ggpairs(mapping = aes(color = SEXO))+ theme(axis.text.x = element_text(angle = 45)) ``` class: split-40 count: false .column[.content[ ```r *base ``` ]] .column[.content[ ``` # A tibble: 19,355 x 177 CODUSU ANO4 TRIMESTRE NRO_HOGAR COMPONENTE H15 REGION MAS_500 AGLOMERADO <fct> <int> <int> <int> <int> <int> <int> <fct> <int> 1 TQRMN~ 2018 1 1 1 1 43 S 4 2 TQRMN~ 2018 1 1 1 1 43 S 4 3 TQRMN~ 2018 1 1 2 1 43 S 4 4 TQRMN~ 2018 1 1 1 1 43 S 4 5 TQRMN~ 2018 1 1 2 1 43 S 4 6 TQRMN~ 2018 1 1 1 1 43 S 4 7 TQRMN~ 2018 1 1 4 1 43 S 4 8 TQSMN~ 2018 1 1 1 1 43 S 2 9 TQRMN~ 2018 1 1 1 1 43 S 2 10 TQRMN~ 2018 1 1 1 1 43 S 2 # ... with 19,345 more rows, and 168 more variables: PONDERA <int>, CH03 <int>, # CH04 <fct>, CH05 <fct>, CH06 <int>, CH07 <int>, CH08 <int>, CH09 <int>, # CH10 <int>, CH11 <int>, CH12 <int>, CH13 <int>, CH14 <chr>, CH15 <int>, # CH15_COD <int>, CH16 <int>, CH16_COD <int>, NIVEL_ED <fct>, ESTADO <int>, # CAT_OCUP <int>, CAT_INAC <int>, IMPUTA <int>, PP02C1 <int>, PP02C2 <int>, # PP02C3 <int>, PP02C4 <int>, PP02C5 <int>, PP02C6 <int>, PP02C7 <int>, # PP02C8 <int>, PP02E <int>, PP02H <int>, PP02I <int>, PP03C <int>, # PP03D <int>, PP3E_TOT <int>, PP3F_TOT <int>, PP03G <int>, PP03H <int>, # PP03I <int>, PP03J <int>, INTENSI <int>, PP04A <int>, PP04B_COD <chr>, # PP04B1 <int>, PP04B2 <int>, PP04B3_MES <int>, PP04B3_ANO <int>, # PP04B3_DIA <int>, PP04C <int>, PP04C99 <int>, PP04D_COD <chr>, PP04G <int>, # PP05B2_MES <int>, PP05B2_ANO <int>, PP05B2_DIA <int>, PP05C_1 <int>, # PP05C_2 <int>, PP05C_3 <int>, PP05E <int>, PP05F <int>, PP05H <int>, # PP06A <int>, PP06C <int>, PP06D <int>, PP06E <int>, PP06H <int>, # PP07A <int>, PP07C <int>, PP07D <int>, PP07E <int>, PP07F1 <int>, # PP07F2 <int>, PP07F3 <int>, PP07F4 <int>, PP07F5 <int>, PP07G1 <int>, # PP07G2 <int>, PP07G3 <int>, PP07G4 <int>, PP07G_59 <int>, PP07H <int>, # PP07I <int>, PP07J <int>, PP07K <int>, PP08D1 <int>, PP08D4 <int>, # PP08F1 <int>, PP08F2 <int>, PP08J1 <int>, PP08J2 <int>, PP08J3 <int>, # PP09A <int>, PP09A_ESP <fct>, PP09B <int>, PP09C <int>, PP09C_ESP <fct>, # PP10A <int>, PP10C <int>, PP10D <int>, ... ``` ]] --- class: split-40 count: false .column[.content[ ```r base %>% * select(P21,EDAD = CH06,SEXO = CH04,NIVEL_ED) ``` ]] .column[.content[ ``` # A tibble: 19,355 x 4 P21 EDAD SEXO NIVEL_ED <int> <int> <fct> <fct> 1 10000 62 Varón Primaria incompleta 2 17000 28 Mujer Sup. completo 3 18000 27 Mujer Sup. incompleto 4 5000 46 Varón Secundaria incompleta 5 10000 47 Mujer Sup. incompleto 6 15000 53 Varón Primaria incompleta 7 15000 22 Varón Secundaria completa 8 9000 55 Mujer Secundaria completa 9 20000 64 Varón Sup. completo 10 6000 27 Varón Secundaria completa # ... with 19,345 more rows ``` ]] --- class: split-40 count: false .column[.content[ ```r base %>% select(P21,EDAD = CH06,SEXO = CH04,NIVEL_ED) %>% *ggpairs(mapping = aes(color = SEXO)) ``` ]] .column[.content[ <img src="Clase_5_Presentacion_files/figure-html/output_g7_3-1.png" width="100%" /> ]] --- class: split-40 count: false .column[.content[ ```r base %>% select(P21,EDAD = CH06,SEXO = CH04,NIVEL_ED) %>% ggpairs(mapping = aes(color = SEXO))+ * theme(axis.text.x = element_text(angle = 45)) ``` ]] .column[.content[ <img src="Clase_5_Presentacion_files/figure-html/output_g7_4-1.png" width="100%" /> ]]