R
para la Demografía Social

Taller aplicado a la Encuesta Permanente de Hogares (EPH) - INDEC

Betsy Cohen & Andrea Gómez Vargas

Universidad Nacional de La Matanza

2024-10-22

¡Hola 👋!

Andrea

  • Socióloga (UBA)
  • Analísta de Estadísticas
    de Población (INDEC)
  • R-Ladies Global Team

Betsy

  • Socióloga (UBA)
  • Analísta de datos

  • R-Ladies Buenos Aires

Nucleo de innovación Social (NIS)



Es un hub de investigación y desarrollo interdisciplinario que lleva adelante acciones que promueven el diálogo de saberes entre las ciencias sociales y la tecnología, articulando con organizaciones públicas, privadas y de la sociedad civil.

R en Buenos Aires


hex logo R en Buenos Aires


Este grupo surge con la misión de conectar a quienes usan el lenguaje de programación R en Buenos Aires, independientemente de su grado de conocimiento y el ámbito de aplicación del mismo. El objetivo es promover el uso R, el aprendizaje continuo y favorecer la creación de proyectos interdisciplinarios.

¿Qué vamos a ver hoy?

  • R & Rstudio en nuestro proceso de investigación:
    • ETL
    • Cómo nos ayuda R en este proceso
    • Paquetes en R para comunicarnos mejor
  • Acerca de Encuesta Permanente de Hogares (EPH) - INDEC
  • Ejercicio con indicadores de mercado de trabajo - EPH
  • Bonustrack +

ETL: Extraer, transformar, comunicar y volver a empezar

ETL

  • Un proceso iterativo de comprensión.

  • Guiado por objetivos estreatégicos/ preguntas de investigación.

  • Transformación / opereacionalización de variables acorde.

R & Rstudio

¿Por qué R?

  • Lenguaje para el procesamiento y análisis estadístico de datos
  • Software Libre
  • Sintaxis Básica: R base
  • Sintaxis incremental: El lenguaje se va ampliando por aportes de Universidades, investigadores/as, usuarios/as y empresas privadas, organizados en librerías (o paquetes).
  • Graficos con calidad de publicación

RStudio

  • El entorno más cómodo para utilizar el lenguaje R es el programa R studio

  • Posit es una empresa que produce productos asociados al lenguaje R, como el programa sobre el que corremos los comandos, y extensiones del lenguaje (librerías).

  • El programa es gratuito y se puede bajar de la página oficial

IDE

Paquetes de trabajo

tidyverse durante el ETL: un paquete para dominarlos a todos


  • tidyverse: 9 paquetes que poseen unas lógicas y reglas similares y que dialogan entre sí sin conflictos.

  • Cada paquete ofrece un conjunto de funciones que nos permiten de manera amigable resolver las dificulatades específicas de cada etapa.

  • Hoy nos enfocaremos en los paquetes de tidyr, dplyr & ggplot2 para la transformación y visualización del dato.



eph: caja de herramientas de la encuesta

hex logo eph

Algunas de sus funciones son:

  • get_microdata(): Descarga las bases de microdatos
  • organize_caes(): Clasifica las actividades económicas según el Clasificador de Actividades Economicas para encuestas Sociodemograficas (CAES) Mercosur 1.0 y el CAES Mercosur.

gt: gramática de tablas


hex logo gt


La filosofía de gt: podemos construir una gran variedad de tablas útiles con un conjunto cohesionado de partes de tabla a partir de un dataframe o tablas resumen.

Se puede exportar en HTML, PDF & word.

función principal: gt()

Encuesta Permanente de Hogares (EPH)

EPH

  • ¿Qué es?: Programa nacional de producción sistemática y permanente de indicadores sociales que lleva a cabo el Instituto Nacional de Estadística y Censos (INDEC) con las direcciones provinciales de estadística (DPE).

  • Objetivos: relevar las características sociodemográficas y socioeconómicas de la población. Nos permite conocer indicadores de:

    • Mercado de trabajo: tasas de empleo, desocupación y subocupación, etc.

    • Sociales: Población bajo la línea de pobreza.

  • ¿Desde cuando? Desde 1973 a través de la medición puntual de dos ondas anuales (mayo y octubre) A partir de 2003, la EPH pasó a ser continua y trimestral.

  • ¿Donde? hogares y personas para 31 aglomerados urbanos (todas las capitales de provincias + aquellos aglomerados con +100.000 habitantes). Agrupados por regiones estadísticas.

  • Tipo de muestra: probabilística, estratificada, bietápica por trimestres.

Características de la EPH


¿De quiénes habla?:

  • La encuesta representa al 65% del total de la población.
  • Una vez al año se releva la EAHU, extensión de la EPH al 100% de la población urbana (localidades de 2.000 y más habitantes, que al último censo disponible -2010-, el 90% de la población residía en estas localidades).

Principales temáticas abordadas


  • Características demográficas básicas
  • Características ocupacionales
  • Características migratorias
  • Características habitacionales
  • Características educacionales
  • Características de ingreso

Manos al código

Vamos a la sección r-unlam.netlify.app/Práctica

Antes de arrancar


Vamos a usar la función install.packages()


install.packages("tidyverse")
install.packages("gt")
install.packages("gtExtras")
install.packages("eph")

Setup de paquetes


Llamamos los paquetes con los que vamos a trabajar con la función library()


library(tidyverse) # para transformar los datos y graficarlos 
library(eph) # para levantar los datos de la encuesta 
library(gt) # para hermosear nuestras tablas
library(gtExtras) # para hermosear todavía más nuestras tablas 

Obtener datos

Descargamos las bases de microdatos de los 4 trimestres de 2024 de la EPH con la función get_microdata()



ind_2023 <- get_microdata(
                            year = 2023,
                            period = 1:4,
                            type = "individual",
                            vars = "all")

Tranformación de la base para el armado de indicadores

tabla_1 <- ind_2023 |> 
  group_by(TRIMESTRE) |> 
  summarise(Poblacion          = sum(PONDERA),
            Ocupacion          = sum(PONDERA[ESTADO == 1]),
            Desocupacion       = sum(PONDERA[ESTADO == 2]),
            PEA                = Ocupacion + Desocupacion,
            Ocupacion_demandate = sum(PONDERA[ESTADO == 1 & PP03J ==1]),
            Suboc_demandante   = sum(PONDERA[ESTADO == 1 & INTENSI ==1 & PP03J==1]),
            Suboc_no_demand    = sum(PONDERA[ESTADO == 1 & INTENSI ==1 & PP03J %in% c(2,9)]),
            Subocupacion       = Suboc_demandante + Suboc_no_demand,
           'Actividad'                  = round(PEA/Poblacion*100,1),
           'Empleo'                     = round(Ocupacion/Poblacion*100,1),
           'Desocupación'               = round(Desocupacion/PEA*100,1),
           'Ocupación demandante'       = round(Ocupacion_demandate/PEA*100,1),
           'Subocupación'               = round(Subocupacion/PEA*100,1),
           'Subocupación demandante'    = round(Suboc_demandante/PEA*100,1),
           'Subocupación no demandante' = round(Suboc_no_demand/PEA*100,1)
  )

tabla_1
#> # A tibble: 4 × 16
#>   TRIMESTRE Poblacion Ocupacion Desocupacion      PEA Ocupacion_demandate
#>       <int>     <int>     <int>        <int>    <int>               <int>
#> 1         1  29335155  13191361       973787 14165148             2096890
#> 2         2  29398853  13107639       872119 13979758             2264700
#> 3         3  29463819  13396202       813661 14209863             2159872
#> 4         4  29528610  13517937       822050 14339987             2226764
#> # ℹ 10 more variables: Suboc_demandante <int>, Suboc_no_demand <int>,
#> #   Subocupacion <int>, Actividad <dbl>, Empleo <dbl>, Desocupación <dbl>,
#> #   `Ocupación demandante` <dbl>, Subocupación <dbl>,
#> #   `Subocupación demandante` <dbl>, `Subocupación no demandante` <dbl>

Armado de la tabla resumen: selección de información

tabla_2 <- tabla_1 |> 
  select(1,Actividad:'Subocupación no demandante')

tabla_2
#> # A tibble: 4 × 8
#>   TRIMESTRE Actividad Empleo Desocupación `Ocupación demandante` Subocupación
#>       <int>     <dbl>  <dbl>        <dbl>                  <dbl>        <dbl>
#> 1         1      48.3   45            6.9                   14.8          9.4
#> 2         2      47.6   44.6          6.2                   16.2         10.6
#> 3         3      48.2   45.5          5.7                   15.2         10.3
#> 4         4      48.6   45.8          5.7                   15.5         10.5
#> # ℹ 2 more variables: `Subocupación demandante` <dbl>,
#> #   `Subocupación no demandante` <dbl>

Armado de la tabla resumen: ordeno la información

tabla_2 <- tabla_2 |> 
  pivot_longer(cols = -c(TRIMESTRE), #Las columnas que queremos estirar en este caso son todas excepto el año y el trimestre
               names_to = "Tasas", # El nombre que le queremos poner
               values_to = "Valor") # el valor en cuestión que hay que repartir


tabla_2
#> # A tibble: 28 × 3
#>    TRIMESTRE Tasas                      Valor
#>        <int> <chr>                      <dbl>
#>  1         1 Actividad                   48.3
#>  2         1 Empleo                      45  
#>  3         1 Desocupación                 6.9
#>  4         1 Ocupación demandante        14.8
#>  5         1 Subocupación                 9.4
#>  6         1 Subocupación demandante      6.3
#>  7         1 Subocupación no demandante   3.1
#>  8         2 Actividad                   47.6
#>  9         2 Empleo                      44.6
#> 10         2 Desocupación                 6.2
#> # ℹ 18 more rows

Armado de la tabla resumen: últimos ajustes

tabla_2 <- tabla_2  |> 
  mutate(trimestre = paste(TRIMESTRE,"Trimestre")) |> # creamos la variable que concatena las etiquetas año y trimestre
  select(-TRIMESTRE) |>
  pivot_wider(names_from = c("trimestre"), values_from = Valor) # estiramos la variable que creamos

tabla_2
#> # A tibble: 7 × 5
#>   Tasas                  `1 Trimestre` `2 Trimestre` `3 Trimestre` `4 Trimestre`
#>   <chr>                          <dbl>         <dbl>         <dbl>         <dbl>
#> 1 Actividad                       48.3          47.6          48.2          48.6
#> 2 Empleo                          45            44.6          45.5          45.8
#> 3 Desocupación                     6.9           6.2           5.7           5.7
#> 4 Ocupación demandante            14.8          16.2          15.2          15.5
#> 5 Subocupación                     9.4          10.6          10.3          10.5
#> 6 Subocupación demandan…           6.3           7.4           6.8           6.8
#> 7 Subocupación no deman…           3.1           3.2           3.5           3.7

Comunicación del dato

Tabla con gt

tabla_3 <- tabla_2 |> 
  gt(rowname_col = 'Tasas') |> 
  # ponemos un título y subtitulo
  tab_header(
    title = md("**Cuadro 1: Principales tasas del mercado de trabajo. Total 31 aglomerados urbanos.**"),
    subtitle = "Primer trimestre 2023-cuarto trimestre 2023") |> 
  # centramos las columnas del cuerpo
  cols_align(
    align = "center",
    columns = 2:5
  ) |> 
  tab_stubhead(label = md('**Tasas**')) %>% 
   tab_stub_indent(rows=6:7, indent = 5) %>% 
  # cambiamos las etiquetas de las columnas
  tab_source_note('Fuente: INDEC, Encuesta Permanente de Hogares.') |> 
  tab_footnote("Datos ponderados.") %>% 
  tab_options(
     heading.align = "left",
     heading.background.color = "#2B5597",
     footnotes.background.color = "#cedcf1",
     column_labels.font.weight = "bold"
  ) 

Tabla con gt - resultado final


tabla_3  

Cuadro 1: Principales tasas del mercado de trabajo. Total 31 aglomerados urbanos.

Primer trimestre 2023-cuarto trimestre 2023

Tasas

1 Trimestre 2 Trimestre 3 Trimestre 4 Trimestre
Actividad 48.3 47.6 48.2 48.6
Empleo 45.0 44.6 45.5 45.8
Desocupación 6.9 6.2 5.7 5.7
Ocupación demandante 14.8 16.2 15.2 15.5
Subocupación 9.4 10.6 10.3 10.5
Subocupación demandante 6.3 7.4 6.8 6.8
Subocupación no demandante 3.1 3.2 3.5 3.7
Fuente: INDEC, Encuesta Permanente de Hogares.
Datos ponderados.

Gráfico con ggplot2

subtabla <- tabla_2 %>% 
  pivot_longer(cols = c(2:5),names_to = "Trimestre", values_to = "value") %>% 
  mutate(Tasas =  paste0("Tasa de ",Tasas)) %>% 
  filter(!Tasas %in% c("Tasa de Subocupación demandante", "Tasa de Subocupación no demandante"))

grafico1 <- ggplot(subtabla, aes(Trimestre, value, colour =  Tasas, group = Tasas)) +
  geom_point(size = 4) +
  geom_line(linetype = 2,linewidth = 1) +
  theme_bw() +
  theme(legend.position = "bottom") +
  scale_color_brewer(palette = "Set2") +
    labs(
    title = "Principales tasas del mercado de trabajo por trimestre. Total 31 aglomerados urbanos.",
    subtitle = "Año 2023",
    y = "porcentaje",
    x = "tasa",
    caption = "Fuente: elaboración propia con base en datos del INDEC. Encuesta Permanente de Hogares"
  )

Gráfico con ggplot2 - resultado final

grafico1

Preguntas

Bonus tracks - ¿Qué otras cosas puedo hacer en R?

Piramides de población

Mapas

Gráficos facetados o paneles


Gráficos en barras apiladas


Y mucho más!

¡Gracias!