+ - 0:00:00
Notes for current slide
Notes for next slide

R aplicado a la ECH

Setiembre 2020
Gabriela Mathieu

Creative Commons License
Creative Commons Attribution 4.0 International License

¿Qué haremos hoy?

  • Repaso del segundo taller

¿Qué haremos hoy?

  • Repaso del segundo taller

  • Importar archivos sav y dta (haven)

¿Qué haremos hoy?

  • Repaso del segundo taller

  • Importar archivos sav y dta (haven)

  • Usar etiquetas en variables categóricas (labelled)

¿Qué haremos hoy?

  • Repaso del segundo taller

  • Importar archivos sav y dta (haven)

  • Usar etiquetas en variables categóricas (labelled)

  • Encadenar funciones: operador %>%

¿Qué haremos hoy?

  • Repaso del segundo taller

  • Importar archivos sav y dta (haven)

  • Usar etiquetas en variables categóricas (labelled)

  • Encadenar funciones: operador %>%

  • Ejercicios

TidyveRse

haven

Importar datos Stata y SPSS

Si usamos get_microdata() solo para descargar los archivos del INE y no exportamos el objeto generado a RData sino a formatos externos a R, es necesario, para leer esos archivos usar el paquete haven.

Importar datos Stata y SPSS

Si usamos get_microdata() solo para descargar los archivos del INE y no exportamos el objeto generado a RData sino a formatos externos a R, es necesario, para leer esos archivos usar el paquete haven.

install.packages("haven") # se instala desde el CRAN
library(haven) # lo cargo al entorno de trabajo
  • El paquete haven es parte de tidyverse y mejora las prestaciones de su antecesor foreign.

Importar datos Stata y SPSS

Si usamos get_microdata() solo para descargar los archivos del INE y no exportamos el objeto generado a RData sino a formatos externos a R, es necesario, para leer esos archivos usar el paquete haven.

install.packages("haven") # se instala desde el CRAN
library(haven) # lo cargo al entorno de trabajo
  • El paquete haven es parte de tidyverse y mejora las prestaciones de su antecesor foreign.

  • Permite mantener las etiquetas de las variables y sus valores al usar la clase double y haven-labelled, haciendo referencia a los números y etiquetas respectivamente.

haven::read_spss()

Importar un archivo sav

La función read_spss() permite importar un archivo de SPSS en R. Mantiene las etiquetas de las variables y valores, creando la clase de doble condición haven_labelled y double.

Importar un archivo sav

La función read_spss() permite importar un archivo de SPSS en R. Mantiene las etiquetas de las variables y valores, creando la clase de doble condición haven_labelled y double.

También podemos usar la función read_sav(), que es un alias de la anterior.

Importar un archivo sav

La función read_spss() permite importar un archivo de SPSS en R. Mantiene las etiquetas de las variables y valores, creando la clase de doble condición haven_labelled y double.

También podemos usar la función read_sav(), que es un alias de la anterior.

Abrimos el proyecto donde tenemos los archivos de microdatos y scripts.

Importar un archivo sav

La función read_spss() permite importar un archivo de SPSS en R. Mantiene las etiquetas de las variables y valores, creando la clase de doble condición haven_labelled y double.

También podemos usar la función read_sav(), que es un alias de la anterior.

Abrimos el proyecto donde tenemos los archivos de microdatos y scripts.

# Leemos el archivo descargado con la función get_microdata() que contiene la base hogares.
h19 <- read_spss("data/H_2019_Terceros.sav")
# Exportamos a dta
write_dta(data = h19, path = "data/hogares_2019.dta")

Ejercicio

  • Importa el archivo de la base de hogares y personas en formato dta, y guarda en un objeto llamado ech2019. Usar la función read_dta().

  • Exporta el objeto en un archivo SPSS. Usar la función write_sav().

%>%

Encadenamiento de funciones en lugar de anidación

El operador %>%, llamado pipe (significa tubería) permitirá encadenar funciones en lugar de colocar una dentro de otra sin una a continuación de la otra.

Encadenamiento de funciones en lugar de anidación

El operador %>%, llamado pipe (significa tubería) permitirá encadenar funciones en lugar de colocar una dentro de otra sin una a continuación de la otra.

  • El pipe estructura una secuencia de operaciones sobre los datos de izquierda a derecha.

Encadenamiento de funciones en lugar de anidación

El operador %>%, llamado pipe (significa tubería) permitirá encadenar funciones en lugar de colocar una dentro de otra sin una a continuación de la otra.

  • El pipe estructura una secuencia de operaciones sobre los datos de izquierda a derecha.

  • A diferencia de la anidación de funciones que implica operaciones de adentro para afuera.

Encadenamiento de funciones en lugar de anidación

El operador %>%, llamado pipe (significa tubería) permitirá encadenar funciones en lugar de colocar una dentro de otra sin una a continuación de la otra.

  • El pipe estructura una secuencia de operaciones sobre los datos de izquierda a derecha.

  • A diferencia de la anidación de funciones que implica operaciones de adentro para afuera.

  • En lugar de f(x): x %>% f()

Encadenamiento de funciones en lugar de anidación

El operador %>%, llamado pipe (significa tubería) permitirá encadenar funciones en lugar de colocar una dentro de otra sin una a continuación de la otra.

  • El pipe estructura una secuencia de operaciones sobre los datos de izquierda a derecha.

  • A diferencia de la anidación de funciones que implica operaciones de adentro para afuera.

  • En lugar de f(x): x %>% f()

Pipe: atajo de teclado en Linux/Windows

Pipe: atajo de teclado en Mac

Armar un mate con y sin 'pipe'

El mate es el data frame, los verbos de dplyr (así se llaman a las funciones que vimos) son las acciones que necesitamos para armarlo: poner la yerba, poner un poco de agua, dejarlo hinchar, poner la bombilla, cebar.

Armar un mate con y sin 'pipe'

El mate es el data frame, los verbos de dplyr (así se llaman a las funciones que vimos) son las acciones que necesitamos para armarlo: poner la yerba, poner un poco de agua, dejarlo hinchar, poner la bombilla, cebar.

# Mate con 'pipe'
mate %>%
poner_yerba() %>%
hinchar() %>%
colocar_bombilla() %>%
cebar()

Armar un mate con y sin 'pipe'

El mate es el data frame, los verbos de dplyr (así se llaman a las funciones que vimos) son las acciones que necesitamos para armarlo: poner la yerba, poner un poco de agua, dejarlo hinchar, poner la bombilla, cebar.

# Mate con 'pipe'
mate %>%
poner_yerba() %>%
hinchar() %>%
colocar_bombilla() %>%
cebar()

En R base y sin el pipe tendríamos que concatenar estas funciones. Cuando las funciones están concatenadas el orden se obtiene de adentro hacia afuera.

# Mate sin 'pipe'
cebar(colocar_bombilla(hinchar(poner_yerba(mate))))

Rehacemos los ejemplos usando %>%

  • Agrupo por barrio y calculo el promedio de precio

Rehacemos los ejemplos usando %>%

  • Agrupo por barrio y calculo el promedio de precio
  • Sin el pipe teníamos:
summarise(group_by(ech19, nomdpto), promedio_dpto = mean(ht11))

Rehacemos los ejemplos usando %>%

  • Agrupo por barrio y calculo el promedio de precio
  • Sin el pipe teníamos:
summarise(group_by(ech19, nomdpto), promedio_dpto = mean(ht11))
  • Con el pipe tenemos:
ech19 %>%
group_by(nomdpto) %>%
summarise(promedio_dpto = mean(ht11))

dplyr::ungroup()

Agrupo y desagrupo

  • La función ungroup() sirve para desagrupar un data frame agrupado.

Agrupo y desagrupo

  • La función ungroup() sirve para desagrupar un data frame agrupado.
  • Usarla me permite que la información de los grupos no quede guardada en el objeto (si realización una asignación al resultado), lo cual conllevaría a que todos los demás cálculos se hagan sobre esos grupos.

Agrupo y desagrupo

  • La función ungroup() sirve para desagrupar un data frame agrupado.
  • Usarla me permite que la información de los grupos no quede guardada en el objeto (si realización una asignación al resultado), lo cual conllevaría a que todos los demás cálculos se hagan sobre esos grupos.
  • No es necesario indicarle ningún argumento.
ech19 <- ech19 %>%
group_by(region_3) %>%
mutate(media_y_region = mean(ht11)) %>%
ungroup()

Agrupo y desagrupo

  • La función ungroup() sirve para desagrupar un data frame agrupado.
  • Usarla me permite que la información de los grupos no quede guardada en el objeto (si realización una asignación al resultado), lo cual conllevaría a que todos los demás cálculos se hagan sobre esos grupos.
  • No es necesario indicarle ningún argumento.
ech19 <- ech19 %>%
group_by(region_3) %>%
mutate(media_y_region = mean(ht11)) %>%
ungroup()

Podemos confirmar que la nueva variable promedio toma un valor para cada uno de las categorías de region_3.

ech19 %>% count(region_3, media_y_region)

Desagrupo y agrupo

  • La función ungroup() permite desagrupar para volver agrupar por otra variable dentro de la misma concatenación de acciones.

  • Luego de calcular la(s) variables vuelvo a desagrupar.

ech19 <- ech19 %>%
group_by(region_3) %>%
mutate(media_y_region = mean(ht11)) %>%
ungroup() %>%
group_by(dpto) %>%
mutate(media_y_dpto = mean(ht11)) %>%
ungroup()

Ejercicio (6')

  • Rehacer ejercicio 2 del práctico pasado usando el pipe

    • Calcular el promedio de edad según sexo.

    • Calcular la cantidad de jefas de hogar.

labelled

Manejar etiquetas

  • El paquete labelled se instala cuando instalamos haven.

  • Trae una serie de funciones que nos permiten trabajar fácilmente con variables que tienen etiquetas, por ejemplo, cuando importamos datos de SPSS o STATA con las variables de clase haven-labelled.

# install.packages("labelled") # se instala desde el CRAN
library(labelled)

labelled::var_label()

Variables

  • Las funciones de dplyr cuando una variable es de clase double y haven-labelled solo muestra los valores y no las etiquetas, por ejemplo, cuando hacemos una tabla con la función count().

Para ver las etiquetas de la variable usamos la función var_label(). Ahora que sabemos usar el pipe (%>%), conviene usarlo al final de la cadena de comandos.

## muestra las etiquetas de un grupo de variables
ech19 %>%
select(c2, c3, c4) %>%
var_label()
$c2
[1] "Material predominante en las paredes externas"
$c3
[1] "Material predominante en el techo"
$c4
[1] "Material predominante en los pisos"

labelled::val_labels()

Variables

Para ver las etiquetas de los valores usamos la función val_labels().

## see value labels for bysex
ech19 %>%
select(region_4) %>%
val_labels()
$region_4
Montevideo
1
Interior - Localidades de 5.000 habitantes o más
2
Interior - Localidades de menos de 5.000 habitantes
3
Zona rural
4

haven::as_factor()

Mostrar etiquetas en tablas

La función as_factor() combinada con count() permite mostrar las etiquetas al hacer una tabla.

ech19 %>%
count(region_4) %>%
as_factor()
# A tibble: 4 x 2
region_4 n
<fct> <int>
1 Montevideo 38207
2 Interior - Localidades de 5.000 habitantes o más 50854
3 Interior - Localidades de menos de 5.000 habitantes 12019
4 Zona rural 6791

¿Qué haremos hoy?

  • Repaso del segundo taller

Paused

Help

Keyboard shortcuts

, , Pg Up, k Go to previous slide
, , Pg Dn, Space, j Go to next slide
Home Go to first slide
End Go to last slide
Number + Return Go to specific slide
b / m / f Toggle blackout / mirrored / fullscreen mode
c Clone slideshow
p Toggle presenter mode
t Restart the presentation timer
?, h Toggle this help
Esc Back to slideshow