# Clase 3 - Indicadores de Precariedad - Tidyverse 2

# Herramientas de programación para la producción y difusión de estadísticas socioeconómicas - ASET

# Introducción

## Presentación de la clase

Esta clase está destinada a profundizar los conocimientos del paquete tidyverse mediante ejercicios vinculados al análisis de la precariedad laboral. Luego de esta sección introductoria, el encuentro se organizará en 3 ejercicios:

- El primer ejercicio consistirá en la utilización del paquete eph para la descarga de una base de microdatos de la encuesta y el armado de indicadores de precariedad laboral, cruzados con otras variables de la base individual.

- En el segundo utilizaremos bases de datos provenientes de distintos países para realizar comparaciones internacionales sobre estimaciones de la precariedad y la informalidad laboral

- El tercer ejercicio utilizará las bases de datos del proyecto Precariedad Mundial para hacer más estimaciones de comparación internacional y ver algunos comandos imporantes para el procesamiento de datos.

## Estimaciones sobre precariedad e informalidad laboral

Cuando trabajamos con estadísticas laborales, muchas veces queremos encontrar la expresión empírica de ideas, categorías o conceptos en las características de la población estudiada. Al proceso de ‘bajar’ esas ideas a mediciones o indicadores se lo llama operacionalización. Como las encuestas de hogares muchas veces no tienen el mismo diseño, es nuestra tarea elegir qué preguntas/variables vamos a tomar en consideración.

A lo largo de esta clase vamos a trabajar con dos conceptos muy utilizados en los estudios laborales: la precariedad y la informalidad. Muy sintéticamente hablando, la precariedad laboral son situaciones de empleo endeble que implican una inseguridad o riesgo para la persona que trabaja. La forma de medir la incidencia de los empleos precarios se basa en clasificar a las personas ocupadas según si su relación laboral se aleja o no del ‘tipo ideal’ de empleo protegido (con contrato legal, por tiempo indeterminado, tiempo completo, con seguridad social, seguro médico, vacaciones pagas, etc.). En Argentina, por ejemplo, la precariedad se suele medir según la falta de contribuciones al sistema previsional.

Por su parte, el sector informal hace referencia a una característica típica de los mercados de trabajo latinoamericanos, donde es muy extendido el empleo en actividades simples, en establecimientos pequeños y de muy baja productividad. Según la definición ‘clásica’ del Sector Informal Urbano del PREALC-OIT, el sector informal son actividades con poco capital, baja escala y baja tecnología, generalmente realizadas en unidades productivas unipersonales. Cuando existe la contratación de mano de obra, ésta generalmente se basa en relaciones familiares o personales, ya que la relación asalariada no se encuentra plenamente extendida en este sector. Pero ahora ¿Cómo se operacionaliza esto? Hay muchos criterios y formas de medir la informalidad. Este es un ejemplo de criterios para clasificar a una persona como integrante del Sector Informal:

-Asalariado/a en establecimientos de hasta 5 personas

-Cuentapropistas no profesionales (con ocupación de baja calificación)

-Trabajador/a familiar sin salario

-Patrones no profesionales en establecimientos de hasta 5 personas

# Ejercicio 1 - Precariedad en EPH

Antes de empezar con los ejercicios, cargamos los paquetes en nuestro entonrno de trabajo.

    library(tidyverse)
    library(openxlsx)
    library(eph)

## Listado de variables a utilizar

Una opción recomendable a la hora de trabajar con la EPH (u otras bases de microdatos de muchas variables) es operar sobre objetos que solo contengan las variables que son específicamente de nuestro interés. Para ello, aquí creamos un vector con un listado de variables a utilizar.

    variables <- c("CODUSU","NRO_HOGAR","COMPONENTE","ANO4","TRIMESTRE",                "AGLOMERADO","CH03","CH04","CH06","ESTADO","CAT_OCUP","CAT_INAC","PP04A",                "PP04B_COD","PP07H","P21","P47T","PONDERA","PP04D_COD","PP04C",                "PP07A","PP07C","PP05B2_ANO","PP04B3_ANO","PP07E","NIVEL_ED","PONDIIO","PP04C","PP03G","PP3E_TOT")

## Paquete EPH

El paquete eph tiene por objecto facilitar el trabajo de usuaries de la Encuesta Permanente de Hogares. El mismo incluye funciones para facilitar la descarga e importación de las bases de datos, etiquetado automático de las variables, clasificación de las variables de ocupación y ramas de actividad, entre otras.

Usaremos aquí en primera instancia la función get_microdata(), que nos permitirá rapidamente importar una base de datos alojada en un repositorio de Github. Levantamos la base individual del primer trimestre de 2019, usando también el parametro vars que nos permite específicar únicamente las variables que nos interesan conservar de la base.

    eph_2019_t1 <-eph::get_microdata(year = 2019, period = 1, vars = variables)

## Creando categorías para el análisis de la precariedad laboral

Un primer paso típico a la hora de procesar la encuesta es crear un nuevo objeto nuevo en el cual (luego de aplicar los filtros de interés) añadiremos variables que conforman nuestras categorías de análisis.

En este caso, crearemos variables que identifiquen a la población según:

- Máximo nivel educativo alcanzado
- Tamaño de establecimiento
- Percepción de descuento jubilatorio
- Trabajo a tiempo parcial o completo
- Trabajo con duración establecida

    asalariados_2019_t1 <- eph_2019_t1 %>%
      filter(ESTADO == 1, CAT_OCUP == 3) %>% # Ocupados asalariados
      mutate(
        nivel.ed = factor(
          case_when(NIVEL_ED %in% c(7,1,2,3) ~ "Menor a Secundaria",
                    NIVEL_ED %in% c(4,5) ~ "Secundaria Completa",
                    NIVEL_ED == 6 ~ "Superior Completo",
                    TRUE ~ "Ns/Nr"),
          levels = c("Menor a Secundaria","Secundaria Completa","Superior Completo")),
        tamanio.establec = factor(
          case_when(PP04C %in% 1:6  ~ "Pequeño",
                    PP04C %in% 7:8  ~ "Mediano",
                    PP04C %in% 9:12 ~ "Grande",
                    PP04C %in% 99   ~ "Ns/Nr"),
          levels = c("Pequeño","Mediano","Grande","Ns/Nr")),
        descuento_jubil = case_when(PP07H == 1 ~ "Si",
                                    PP07H == 2 ~ "No"),
        part.time.inv = case_when(PP3E_TOT < 35 & PP03G == 1 ~ "Si",
                                 TRUE ~ "No"),
        tiempo.determinado = case_when(PP07C ==  1 ~ "Si",
                                       TRUE ~ "No"))

De manera muy sencilla, la función calculate_tabulates nos parmite rápidamente obtener tabulados univariados y bivariados de nuestras categorías de interés.

    calculate_tabulates(base = asalariados_2019_t1,
                             x = "descuento_jubil",
                             weights = "PONDERA")

    ##   descuento_jubil    Freq
    ## 1              No 3118028
    ## 2              Si 5784961

Si queremos ver el cruce por grupos de nivel educativo…

    calculate_tabulates(base = asalariados_2019_t1,
                             x = "descuento_jubil",
                             y = "nivel.ed",
                             add.totals = "both",
                             weights = "PONDERA")

    ## # A tibble: 3 x 5
    ##   `descuento_jubil/nivel.ed` `Menor a Secundaria` `Secundaria Completa`
    ##   <chr>                                     <dbl>                 <dbl>
    ## 1 No                                      1543729               1253626
    ## 2 Si                                      1312139               2601298
    ## 3 Total                                   2855868               3854924
    ## # i 2 more variables: `Superior Completo` <dbl>, Total <dbl>

El parámetro `add.percentage` nos permite calcular los porcentajes, según filas `(add.percentage = "row")` o columnas `(add.percentage = "col")`.
En este caso, si nos interesa ver la tasa de informalidad (típicamnete calculada según la percepción de descuentos jubilatorios) por nivel educativo, debemos calcular los porcentajes a nivel de columnas. Como es esperable, a mayor nivel educativo es mayor el porcentaje de lxs asalariadxs que percibe descuentos jubilatorios

    calculate_tabulates(base = asalariados_2019_t1,
                             x = "descuento_jubil",
                             y = "nivel.ed",
                             add.percentage = "col",
                             weights = "PONDERA")

    ## # A tibble: 2 x 4
    ##   `descuento_jubil/nivel.ed` `Menor a Secundaria` `Secundaria Completa`
    ##   <fct>                                     <dbl>                 <dbl>
    ## 1 No                                         54.1                  32.5
    ## 2 Si                                         45.9                  67.5
    ## # i 1 more variable: `Superior Completo` <dbl>

## Consignas

> Consigna 1 ¿Como calcularíamos la proporción de asalariados con trabajos de duración determinada en cada uno de los grupos de tamaño de establecimiento?

    #Consigna 1

## Co-ocurrencia de fenomenos

Consideremos las siguiente tres variables como expresiones que hacen a la precariedad laboral entre los asalariados:
- la falta de descuentos jubilatorios
- El empleo de jornada part-time involuntario
- El empleo por tiempo determinado

    asalariados_2019_t1_signos<- asalariados_2019_t1 %>%
      mutate(signos.precariedad = ifelse(descuento_jubil == "No",yes = 1,no = 0)+
                                  ifelse(part.time.inv == "Si",yes = 1,no = 0)+
                                  ifelse(tiempo.determinado == "Si",yes = 1,no = 0))

Una vez que clasificamos a la población podemos hacer un resumen de la cantidad de personas que se ve afectada por

    asalariados_2019_t1_signos %>%
      group_by(signos.precariedad) %>%
      summarise(Poblacion = sum(PONDERA))

    ## # A tibble: 4 x 2
    ##   signos.precariedad Poblacion
    ##                <dbl>     <int>
    ## 1                  0   5332532
    ## 2                  1   2295304
    ## 3                  2   1051643
    ## 4                  3    223510

> Consigna 2. Calcular la proporción de asalariados con al menos un signo de precariedad laboral

    #Consigna 2

# Ejercicio 2 - Estimaciones de la precariedad e informalidad laboral en distintos países

En lo que resta de esta clase vamos a tomar una perspectiva internacional, utilizando bases de datos provenientes de distintos países y calculando indicadores de precariedad e informalidad laboral. Para ello en la carpeta `fuentes/bases` tenemos disponible bases correspondientes a Alemania, Brasil, Chile, España, Grecia, Paraguay, Perú y Uruguay. Tan sólo incluimos las columnas que nos interesan, ya que las bases originales tienen muchas más variables y se vuelven muy pesadas para compartir en un repositorio.

Además, en `fuentes/diccionarios` podemos encontrar los diccionarios originales de cada una de estas bases de datos y el archivo `diccionario_resumen.xlsx` donda ya juntamos las descripciones de las variables que utilizaremos en este ejercicio. Armen grupos, eligan al menos 2 países de dos continentes diferentes y resuelvan las siguientes consignas:

> Consigna 1: ¿Qué variables considerarías para realizar una estimación de la precariedad laboral? Elegí una de ellas o una combinación para crear la variable PRECA que indique si una persona tiene un empleo precario o no. ¿Cuál es la tasa de precariedad según tu operacionalización?

> Consigna 2: Las bases contienen otras variables alternativas que se pueden ‘cruzar’ con la precareidad. ¿Qué variables tomarías? Reralizá un tabulado cruzado entre la variable de precariedad y la variable que elegiste. ¿Qué conclusiones podés sacar?

> Consigna 3 (si hay tiempo!): ¿Como calcularías la incidencia del Sector Informal en cada uno de los países? ¿Qué variables tomarías en cuenta para operacionalizar el concepto? ¿Qué conclusiones podrías sacar?

# Ejercicio 3 - Comparaciones internacionales con el repositorio `precariedad.mundial`

Comenzamos por importar base_homogenea.RDS que contiene la información homogeneizada proveniente de las encuestas de hogares de distintos países y el archivo metadata.xlsx que describe las variables disponibles en dicha base y los valores que adquieren en caso de ser variables categóricas.

    # Para leer directo desde github

    # preca_mundial<- readRDS(gzcon(url("https://github.com/ceped-fce-uba/precariedad.mundial/raw/master/base_homogenea.RDS?download=")))

    # Lectura desde las carpetas del curso
    preca_mundial<- readRDS("fuentes/base_homogenea.RDS")
    metadata_preca<- openxlsx::read.xlsx("fuentes/Metadata.xlsx",sheet = 1)

Inspeccionamos la base rápidamente

    preca_mundial %>% sample_n(10)

    ##              PAIS  ANO     PERIODO    WEIGHT  SEXO EDAD       CATOCUP    COND
    ## 1          Suecia 2018           1   60.3700 Varon   32    Asalariado    <NA>
    ## 2  Estados Unidos 2019    2019 - 3  390.4200 Varon   39    Asalariado Ocupado
    ## 3        Colombia 2019 Mayo - 2019  159.4202 Varon   54 Cuenta propia Ocupado
    ## 4          Brasil 2019           3  397.4381 Varon   35 Cuenta propia    <NA>
    ## 5         Francia 2018           1    0.0000 Varon   27    Asalariado    <NA>
    ## 6          Italia 2018           1   39.5500 Varon   62    Asalariado    <NA>
    ## 7         Francia 2018           1    0.0000 Varon   32    Asalariado    <NA>
    ## 8          México 2019         119   97.0000 Mujer   37    Asalariado Ocupado
    ## 9     Reino Unido 2018           1 1189.5700 Mujer   22    Asalariado    <NA>
    ## 10       Alemania 2017           1  149.7525 Mujer   37    Asalariado    <NA>
    ##    SECTOR PRECAPT       EDUC PRECAREG PRECATEMP PRECASEG    TAMA CALIF
    ## 1    Priv       0 Secundaria       NA         0       NA  Grande Media
    ## 2    Priv       1  Terciaria       NA        NA       NA  Grande  Alta
    ## 3    Priv       0  Terciaria        0         1        0 Pequeño  Baja
    ## 4    Priv       0 Secundaria       NA        NA        1 Pequeño  Alta
    ## 5    Priv       0 Secundaria       NA         0       NA  Grande  Alta
    ## 6    Priv       0   Primaria       NA         0       NA Pequeño Media
    ## 7    Priv       0 Secundaria       NA         0       NA  Grande Media
    ## 8    Priv       0  Terciaria        1         1        1 Pequeño Media
    ## 9    Priv       0 Secundaria       NA         0       NA Mediano  Alta
    ## 10    Pub       0  Terciaria       NA         0       NA Mediano  Alta
    ##            ING WEIGHT_W          PPA   ING_PPA
    ## 1           NA       NA    9.2820317        NA
    ## 2           NA       NA    1.0000000        NA
    ## 3  4000000.000       NA 1271.3833932 3146.1792
    ## 4      260.000       NA    2.2349049  116.3360
    ## 5           NA       NA    0.7694115        NA
    ## 6     1599.340       NA    0.7230045 2212.0747
    ## 7           NA       NA    0.7694115        NA
    ## 8     2580.000       NA    9.0812985  284.1003
    ## 9           NA       NA    0.7458070        NA
    ## 10    4445.784       NA    0.7429146 5984.2456

Si observamos algunos casos al azar, seguramente notemos que existen muchos NA (Not Available, también llamados missing values) en las distintas variables de la base de datos. Específicamente, eso ocurre en gran medida en las variables que tienen que ver con la precariedad laboral, ya que en muchos países la información provista en las encuestas de hogares resulta insuficiente para construir tales indicadores.

    preca_seg_paises <- preca_mundial %>%
      group_by(PAIS,PRECASEG) %>%
      summarise(casos_ponderados = sum(WEIGHT)) %>% # Casos (ponderados) de PRECASEG por PAIS
      group_by(PAIS) %>%
      mutate(porcentaje = casos_ponderados/sum(casos_ponderados), # Proporcíon de PRECASEG (0,1 y NA) por PAIS
             porcentaje = scales::percent(porcentaje))  # Transformo a %

    ## `summarise()` has grouped output by 'PAIS'. You can override using the
    ## `.groups` argument.

    preca_seg_paises

    ## # A tibble: 52 x 4
    ## # Groups:   PAIS [30]
    ##    PAIS      PRECASEG casos_ponderados porcentaje
    ##    <chr>        <dbl>            <dbl> <chr>
    ##  1 Alemania        NA        42206274. 100%
    ##  2 Argentina        0        22984274  47.69%
    ##  3 Argentina        1        12426511  25.78%
    ##  4 Argentina       NA        12783547  26.53%
    ##  5 Austria         NA         4337190. 100%
    ##  6 Bolivia          0         4760003. 32%
    ##  7 Bolivia          1        10167077. 68%
    ##  8 Brasil           0       234863739. 63%
    ##  9 Brasil           1       138693782. 37%
    ## 10 Bulgaria        NA         3152662. 100%
    ## # i 42 more rows

Si tomamos, por ejemplo, la variable PRECASEG, podemos notar que en países europeos tenemos NA en todos los casos (ya que no existe pregunta vinculada a la cobertura en la seguridad social en la encuesta). En cambio, en Argentina tenemos un bajo de porcentaje de NA, pero que obedece a otra razón (dicha variable corresponde sólo a trabajadores asalariados)

## Trabajando con valores NA

Una forma usual de desechar los casos con valores missing es aplicar dentro de un filtro la función `is.na()`. En concreto, podemos descartar aquellos casos NA anteponiendo a dicha función el caracter `!`.

En este caso, al eliminar los NA podemos observar, cual es el porcentaje de precariedad laboral por falta de cobertura social (entre los trabajadores a los que aplica dicha pregunta sólo en los países que relevan dicha información)

    preca_seg_sin_na <- preca_mundial %>%
      filter(!is.na(PRECASEG)) %>%
      group_by(PAIS,PRECASEG) %>%
      summarise(casos_ponderados = sum(WEIGHT)) %>%
      group_by(PAIS) %>%
      mutate(porcentaje = casos_ponderados/sum(casos_ponderados),
             porcentaje = scales::percent(porcentaje))

    ## `summarise()` has grouped output by 'PAIS'. You can override using the
    ## `.groups` argument.

    preca_seg_sin_na

    ## # A tibble: 28 x 4
    ## # Groups:   PAIS [14]
    ##    PAIS      PRECASEG casos_ponderados porcentaje
    ##    <chr>        <dbl>            <dbl> <chr>
    ##  1 Argentina        0        22984274  65%
    ##  2 Argentina        1        12426511  35%
    ##  3 Bolivia          0         4760003. 32%
    ##  4 Bolivia          1        10167077. 68%
    ##  5 Brasil           0       234863739. 63%
    ##  6 Brasil           1       138693782. 37%
    ##  7 Chile            0         5075274. 83%
    ##  8 Chile            1         1022703. 17%
    ##  9 China            0        68431433. 67%
    ## 10 China            1        33064966. 33%
    ## # i 18 more rows

## Sumando desagregaciones

Al ejemplo anterior podemos desagregarlo por la variable SEXO, simplemente añadiendola dentro de los `group_by()` y observar así las brechas en la incidencia de la precariedad en varones y mujeres en cada uno de los países

    preca_seg_sexo <- preca_mundial %>%
      filter(!is.na(PRECASEG)) %>%
      group_by(PAIS,SEXO,PRECASEG) %>%
      summarise(casos_ponderados = sum(WEIGHT)) %>%
      group_by(PAIS,SEXO) %>%
      mutate(porcentaje = casos_ponderados/sum(casos_ponderados),
             porcentaje = scales::percent(porcentaje))

    ## `summarise()` has grouped output by 'PAIS', 'SEXO'. You can override using the
    ## `.groups` argument.

    preca_seg_sexo

    ## # A tibble: 56 x 5
    ## # Groups:   PAIS, SEXO [28]
    ##    PAIS      SEXO  PRECASEG casos_ponderados porcentaje
    ##    <chr>     <chr>    <dbl>            <dbl> <chr>
    ##  1 Argentina Mujer        0        10105210  63%
    ##  2 Argentina Mujer        1         5956187  37%
    ##  3 Argentina Varon        0        12879064  67%
    ##  4 Argentina Varon        1         6470324  33%
    ##  5 Bolivia   Mujer        0         1753262. 26%
    ##  6 Bolivia   Mujer        1         4943655. 74%
    ##  7 Bolivia   Varon        0         3006741. 37%
    ##  8 Bolivia   Varon        1         5223423. 63%
    ##  9 Brasil    Mujer        0       105670340. 64%
    ## 10 Brasil    Mujer        1        58482003. 36%
    ## # i 46 more rows

## Selection helpers

A la hora de escalar nuestros procedimientos, para aplicar una misma operación a distintas variables de una base de datos, tidyverse cuenta con un conjunto de herramientas denominado Selection language. Estas herramientas permiten identificar el conjunto de columnas de las bases de datos que cumplen una determinada condición.

### starts_with()

Por ejemplo, starts_with() nos permite especificar aquellas columnas cuyo nombre comienza con un determinado patrón de texto:

    preca_select <- preca_mundial %>%
      select(PAIS,WEIGHT,starts_with("PRECA"))
    preca_select %>% head(10)

    ##         PAIS WEIGHT PRECAPT PRECAREG PRECATEMP PRECASEG
    ## 1  Argentina    108       0        1         0        1
    ## 2  Argentina    141       0       NA        NA       NA
    ## 3  Argentina    221       0        1         0        1
    ## 4  Argentina    309       0       NA        NA       NA
    ## 5  Argentina    309       0        0         0        0
    ## 6  Argentina     88       0        0         0        0
    ## 7  Argentina    577       0        1        NA        1
    ## 8  Argentina    332       0        0         0        0
    ## 9  Argentina    183       0        1        NA        1
    ## 10 Argentina    183       0        1        NA        1

### where()

La función `where()` nos permite ingresar una condicion lógica a evaluar en las columnas para determinar si estas serán o no seleccionadas. Por ejemplo, evaluar si son columnas de clase numérica.

    preca_numericas <- preca_mundial %>%
      select(PAIS,where(is.numeric))

    preca_numericas  %>% head(10)

    ##         PAIS  ANO WEIGHT EDAD PRECAPT PRECAREG PRECATEMP PRECASEG   ING
    ## 1  Argentina 2019    108   41       0        1         0        1  5000
    ## 2  Argentina 2019    141   51       0       NA        NA       NA  8000
    ## 3  Argentina 2019    221   74       0        1         0        1  3000
    ## 4  Argentina 2019    309   42       0       NA        NA       NA 12000
    ## 5  Argentina 2019    309   52       0        0         0        0 60000
    ## 6  Argentina 2019     88   44       0        0         0        0 35000
    ## 7  Argentina 2019    577   29       0        1        NA        1 12000
    ## 8  Argentina 2019    332   38       0        0         0        0 10000
    ## 9  Argentina 2019    183   61       0        1        NA        1  7500
    ## 10 Argentina 2019    183   25       0        1        NA        1  3000
    ##    WEIGHT_W      PPA   ING_PPA
    ## 1       108 21.35587  234.1276
    ## 2       141 21.35587  374.6042
    ## 3       224 21.35587  140.4766
    ## 4       311 21.35587  561.9063
    ## 5       314 21.35587 2809.5314
    ## 6        89 21.35587 1638.8933
    ## 7       575 21.35587  561.9063
    ## 8       335 21.35587  468.2552
    ## 9       184 21.35587  351.1914
    ## 10      182 21.35587  140.4766

## if_all()

La función `if_all()` nos permite ingresar una condicion lógica a evaluar en el contenido de un conjunto de columnas para realizar un filtro. El primer argumento que requiere la función es el conjunto de columnas y el segundo la función a aplicar a cada una de ellas para determinar los casos que serán filtrados.

Por ejemplo, podemos utilizarla para conservar únicamente aquellos casos que no contengan NAs en ninguna de las variables vínculadas a la precariedad

    preca_completo <- preca_mundial %>%
      filter(
        if_all(starts_with("PRECA"),~!is.na(.x))
             )

    preca_completo %>% head(10)

    ##         PAIS  ANO PERIODO WEIGHT  SEXO EDAD    CATOCUP     COND SECTOR PRECAPT
    ## 1  Argentina 2019  2019-1    108 Mujer   41 Asalariado Ocupados   Priv       0
    ## 2  Argentina 2019  2019-1    221 Varon   74 Asalariado Ocupados   Priv       0
    ## 3  Argentina 2019  2019-1    309 Mujer   52 Asalariado Ocupados   Priv       0
    ## 4  Argentina 2019  2019-1     88 Varon   44 Asalariado Ocupados   Priv       0
    ## 5  Argentina 2019  2019-1    332 Mujer   38 Asalariado Ocupados   Priv       0
    ## 6  Argentina 2019  2019-1    324 Varon   28 Asalariado Ocupados   Priv       0
    ## 7  Argentina 2019  2019-1    302 Mujer   39 Asalariado Ocupados   Priv       0
    ## 8  Argentina 2019  2019-1    304 Varon   43 Asalariado Ocupados   Priv       0
    ## 9  Argentina 2019  2019-1    336 Varon   50 Asalariado Ocupados   Priv       0
    ## 10 Argentina 2019  2019-1    336 Varon   37 Asalariado Ocupados   Priv       0
    ##          EDUC PRECAREG PRECATEMP PRECASEG    TAMA CALIF   ING WEIGHT_W      PPA
    ## 1  Secundaria        1         0        1 Pequeño  Baja  5000      108 21.35587
    ## 2    Primaria        1         0        1 Pequeño  Baja  3000      224 21.35587
    ## 3   Terciaria        0         0        0 Mediano Media 60000      314 21.35587
    ## 4   Terciaria        0         0        0 Mediano Media 35000       89 21.35587
    ## 5  Secundaria        0         0        0    <NA> Media 10000      335 21.35587
    ## 6  Secundaria        0         0        0  Grande Media 15000      325 21.35587
    ## 7  Secundaria        0         0        0 Mediano Media 12700      300 21.35587
    ## 8    Primaria        1         0        1 Mediano Media 15000      303 21.35587
    ## 9    Primaria        1         0        1  Grande Media  3000      335 21.35587
    ## 10 Secundaria        0         0        0 Mediano Media 43000      334 21.35587
    ##      ING_PPA
    ## 1   234.1276
    ## 2   140.4766
    ## 3  2809.5314
    ## 4  1638.8933
    ## 5   468.2552
    ## 6   702.3829
    ## 7   594.6842
    ## 8   702.3829
    ## 9   140.4766
    ## 10 2013.4975

## across()

La función `across()` nos permite realizar una misma operación para un conjunto de columnas . El primer argumento que requiere la función es el conjunto de columnas y el segundo la función a aplicar a cada una de ellas.

Por ejemplo, podemos utilizarla dentro de un summarise para realizar, para cada país, un promedio (muestral) de las variables relacionadas al ingreso de la ocupación princpal.

Recordatorio: la variable ING está expresada en moneda nacional y la variable ING_PPA transforma los datos a una moneda de paridad de poder adquisitivo

    ingreso_medio <- preca_mundial %>%
      group_by(PAIS) %>%
      summarise(across(starts_with("ING"),~ mean(.x,na.rm = T)))

    ingreso_medio

    ## # A tibble: 30 x 3
    ##    PAIS            ING ING_PPA
    ##    <chr>         <dbl>   <dbl>
    ##  1 Alemania      2673.   3598.
    ##  2 Argentina    21831.   1022.
    ##  3 Austria        NaN     NaN
    ##  4 Bolivia       3138.   1253.
    ##  5 Brasil        1989.    890.
    ##  6 Bulgaria       NaN     NaN
    ##  7 Chile       583925.   1330.
    ##  8 China         5320.   1320.
    ##  9 Colombia   1112381.    875.
    ## 10 Costa Rica  493317.   1405.
    ## # i 20 more rows

También podemos utilizarla para sumar la cantidad de valores positivos en las variables de precariedad y dividido la suma de casos totales en donde dicha variable no es NA. De esta forma, podemos obtener para cada país el % de los casos con las respectivas expresiones de precariedad.

    preca_expresiones <- preca_mundial %>%
      group_by(PAIS) %>%
      summarise(
        across(starts_with("PRECA"),
               ~ sum(.x,na.rm = T)/ # Suma de casos con valor 1 en PRECA
                 sum(!is.na(.x)) # Suma de casos sin NA en PRECA_
               )
        )
    preca_expresiones

    ## # A tibble: 30 x 5
    ##    PAIS        PRECAPT PRECAREG PRECATEMP PRECASEG
    ##    <chr>         <dbl>    <dbl>     <dbl>    <dbl>
    ##  1 Alemania     0.0283  NaN       0.0159   NaN
    ##  2 Argentina    0.142     0.349   0.146      0.349
    ##  3 Austria      0.0248  NaN       0.00726  NaN
    ##  4 Bolivia      0.0537    0.486   0.213      0.699
    ##  5 Brasil       0.0811    0.297 NaN          0.419
    ##  6 Bulgaria     0.0114  NaN       0.0252   NaN
    ##  7 Chile        0.111     0.133   0.284      0.179
    ##  8 China      NaN         0.285   0.516      0.337
    ##  9 Colombia     0.0635    0.618   0.351      0.581
    ## 10 Costa Rica   0.118     0.242   0.0483     0.242
    ## # i 20 more rows