Ir al contenido

En esta vignette mostraremos como utilizar las funciones get_poverty_lines() y calculate_poverty() para calcular la pobreza aproximando la metodología oficial de INDEC.

Primero cargamos el paquete eph junto con otros paquetes que serán de utilidad

Luego descargamos los datos que utilizaremos. Para ello, debemos tener en cuenta que la metodología de pobreza de (INDEC, 2016) utiliza canastas basicas alimentarias (CBA) y totales (CBT) regionales, que INDEC publica dentro de los comunicados de pobreza. Para dejarlo claro, la función get_poverty_lines() permite descargar las dos series de CBA-CBT.

  1. La CBA-CBT del Gran Buenos Aires, que INDEC publica mensualmente
  2. Las canastas regionales, que se publican en los informes semestrales de pobreza. Estas canastas tienen una composición diferente siguiendo los hábitos de consumo de cada lugar, pero se calculan con precios de GBA y se multiplican por los coeficientes de Paridad de Poder de Compra (PPCC))1.

El parametro regionales de la función get_poverty_lines() define cual de las dos canastas se descarga.

Además, con la función get_microdata() descargamos las bases de todos los trimestres entre 2016 y 2019. Dado que son muchas bases y no utilizaremos todas las variables, utilizamos el parametro vars para hacer un pre filtro de la base y no sobrecargar la memoria. A su vez, dado que la descarga y filtrado de las bases consume mucho tiempo, utilizamos el parámetro destfile para guardar la descarga en un archivo, y que la próxima vez que se ejecute la función cargue este archivo, de forma mucho más rápida (en la computadora donde se construyó la vignette, la primera corrida tarda 100 seg y las siguientes 0.5 seg!)

canastas_regionales <- get_poverty_lines(regional = TRUE)
bases <- get_microdata(
  year = 2016:2019,
  period = 1:4,
  type = "individual",
  vars = c("ANO4", "TRIMESTRE", "REGION", "CODUSU", "NRO_HOGAR", "CH04", "CH06", "ITF", "PONDIH", "PP07H", "PP04D_COD")
  # ,destfile = 'bases_eph.rds'
)

Con la función unnest() agrupamos todas las bases, y con calculate_poverty() y los datos que descargamos calculamos la pobreza. El parámetro print_summary=TRUE le indica a la función que deseamos imprimir un cuadro de las tasas de pobreza e indigencia por período. Sin embargo, en la tabla bases_pobreza contamos ahora con la variable situación que indica si el hogar es pobre, indigente o no_pobre. Si la variable es NA es porque al menos un miembro del hogar no declaró el ingreso (y por lo tanto no se sabe el Ingreso Total Familiar).

# bases <- bases %>% unnest(cols = c(microdata))
bases_pobreza <- calculate_poverty(bases, canastas_regionales, print_summary = TRUE)
bases_pobreza

Comparación con los resultados oficiales.

Descargamos las tasas de pobreza e indigencia oficiales que guardamos en nuestro repositorio holatam/data.

pobreza_oficial <- read_csv("https://raw.githubusercontent.com/holatam/data/master/eph/canasta/pobreza_oficial.csv")
pobreza_oficial <- pobreza_oficial %>%
  mutate(periodo = parse_date_time(paste0(ANO4, "-", SEMESTRE * 2), "Y.q")) %>%
  select(periodo, pobreza_oficial = tasa_pobreza, indigencia_oficial = tasa_indigencia)
pobreza_oficial

Reutilizamos el código dentro de la función calculate_poverty() que calcula las tasas de pobreza e indigencia para comparar los resultados. Nótese que no es un promedio simple, sino un promedio ponderado por la variable PONDIH.

Pobreza_resumen <- bases_pobreza %>%
  group_by(ANO4, TRIMESTRE) %>%
  summarise(
    Tasa_pobreza = sum(PONDIH[situacion %in% c("pobre", "indigente")], na.rm = TRUE) / sum(PONDIH, na.rm = TRUE),
    Tasa_indigencia = sum(PONDIH[situacion == "indigente"], na.rm = TRUE) / sum(PONDIH, na.rm = TRUE),
    .groups = "drop"
  ) %>%
  mutate(periodo = parse_date_time(paste0(ANO4, "-", TRIMESTRE), "Y.q")) %>%
  select(periodo, pobreza_estimada = Tasa_pobreza, indigencia_estimada = Tasa_indigencia)

Pobreza_resumen <- Pobreza_resumen %>%
  left_join(pobreza_oficial, by = "periodo") %>%
  pivot_longer(cols = pobreza_estimada:indigencia_oficial, names_to = c("tipo", "grupo"), values_to = "valor", names_sep = "_", values_drop_na = TRUE)

A continuación mostramos un gráfico que compara los resultados:

  • como segmentos colorados, nuestro cálculo trimestral de la pobreza
  • la pobreza oficial se calcula a nivel semestral, y se representa como un punto en el medio del semestre correspondiente.

Se puede ver que la pobreza oficial se ubica en todos los períodos como un punto entre los dos trimestres que la componen (es decir los segmentos a su izquierda y derecha).

Pobreza_resumen <- Pobreza_resumen %>%
  group_by(tipo, grupo) %>%
  mutate(
    x = lag(periodo),
    y = lag(valor)
  )

ggplot(Pobreza_resumen, aes(periodo, valor, color = grupo)) +
  geom_step(data = Pobreza_resumen %>% filter(grupo == "estimada"), linetype = "dashed") +
  geom_segment(
    data = Pobreza_resumen %>% filter(grupo == "estimada"),
    aes(x = x, y = y, xend = periodo, yend = y), size = 1
  ) +
  geom_point(data = Pobreza_resumen %>% filter(grupo == "oficial"), size = 3) +
  facet_wrap(tipo ~ ., scales = "free") +
  theme_minimal() +
  theme(legend.position = "bottom")

Dado que la estimación que realizamos con las bases trimestrales es consistente con los resultados oficiales, podemos aprovechar que contamos con la identificación de la condición de los individuos, para realizar otro tipo de estimaciones.

Por ejemplo, podemos utilizar la variable PP04D_COD con el código de ocupación, y la función organize_cno() para extraer la calificación del puesto. Luego, podemos estudiar las tasas de pobreza e indigencia según la calificación del trabajo. De esta forma, vemos que tanto pobreza como indigencia son más altas entre los trabajadores no calificados, siguiendo los operativos, los técnicos y finalmente los trabajadores profesionales, con tasas más bajas.

pobreza_calificacion <- bases_pobreza %>%
  filter(!is.na(situacion), !is.na(PP04D_COD)) %>%
  organize_cno(.) %>%
  filter(CALIFICACION %in% c("No calificados", "Operativos", "Técnicos", "Profesionales")) %>%
  group_by(ANO4, TRIMESTRE, CALIFICACION) %>%
  summarise(
    pobreza = sum(PONDIH[situacion %in% c("pobre", "indigente")], na.rm = TRUE) / sum(PONDIH, na.rm = TRUE),
    indigencia = sum(PONDIH[situacion == "indigente"], na.rm = TRUE) / sum(PONDIH, na.rm = TRUE),
    .groups = "drop"
  )


pobreza_calificacion %>%
  mutate(periodo = parse_date_time(paste0(ANO4, "-", TRIMESTRE), "Y.q")) %>%
  pivot_longer(cols = pobreza:indigencia, names_to = c("tipo"), values_to = "tasa") %>%
  ggplot(aes(periodo, tasa, fill = tipo)) +
  geom_col(position = position_dodge()) +
  facet_wrap(. ~ CALIFICACION) +
  theme_minimal() +
  theme(legend.position = "bottom")

A su vez, podemos analizar la relación entre la pobreza y la precariedad laboral. Utilizando la variable PP07H, que indica si se perciben descuentos jubilatorios o no (un proxy común para la precariedad laboral), podemos comparar la incidencia de la pobreza y la indigencia entre trabajadores precarios y formales. Como puede verse en el siguiente gráfico, las diferencias son significativas en ambos indicadores.

pobreza_informalidad <- bases_pobreza %>%
  filter(!is.na(situacion), PP07H %in% 1:2) %>%
  group_by(ANO4, TRIMESTRE, PP07H) %>%
  summarise(
    pobreza = sum(PONDIH[situacion %in% c("pobre", "indigente")], na.rm = TRUE) / sum(PONDIH, na.rm = TRUE),
    indigencia = sum(PONDIH[situacion == "indigente"], na.rm = TRUE) / sum(PONDIH, na.rm = TRUE),
    .groups = "drop"
  )


pobreza_informalidad %>%
  mutate(
    periodo = parse_date_time(paste0(ANO4, "-", TRIMESTRE), "Y.q"),
    descuento_jubilatorio = case_when(
      PP07H == 1 ~ "Si",
      TRUE ~ "No"
    )
  ) %>%
  pivot_longer(cols = pobreza:indigencia, names_to = c("tipo"), values_to = "tasa") %>%
  ggplot(aes(periodo, tasa, color = descuento_jubilatorio)) +
  # geom_col(position = position_dodge())+
  geom_point(size = 2) +
  geom_smooth() +
  facet_wrap(tipo ~ ., scales = "free", ncol = 1) +
  theme_minimal() +
  theme(
    legend.position = "bottom",
    text = element_text(size = 14)
  )

Comparación de canastas

Como se mencionó más arriba, las canastas utilizadas para calular la pobreza tienen una definición regional, pero se valorizan con precios de GBA. A continuación, se realiza una pequeña comparación de las mismas.

Canasta Básica Alimentaria

Primero calculamos el cociente de las canastas de las regiones respecto a la de GBA.

relativos_cba <- canastas_regionales %>%
  select(-CBT, -codigo) %>%
  pivot_wider(names_from = region, values_from = CBA) %>%
  mutate_at(.vars = c("Cuyo", "Noreste", "Noroeste", "Pampeana", "Patagonia"), ~ .x / GBA) %>%
  mutate(
    GBA = GBA / GBA,
    periodo = parse_date_time(periodo, "Y.q")
  ) # paso a formato fecha los trimestres
relativos_cba

Como se dijo, luego de valorizarse con precios de GBA, se multiplican por el PPCC. A contiuación mostramos la evolución de las canastas según

  • PPCC (es un único valor por región calculado en 2001)
  • efecto total (las canastas que se publican en el informe de pobreza)
  • efecto composición (efecto total dividido por el PPCC, para anular el efecto del mismo, y estudiar exclusivamente la diferencia por definición de las canastas)

Se puede observar que si bien todas las canastas tienen por composición un mayor valor que la canasta de GBA, al multiplicarlas por el PPPC tan sólo la región Patagónica conserva una canasta con mayor valor.

ppcc <- data.frame(
  region = c("Cuyo", "GBA", "Noreste", "Noroeste", "Pampeana", "Patagonia"),
  ppcc = c(.872, 1, .886, .865, .904, .949)
)


relativos_cba %>%
  pivot_longer(cols = Cuyo:Patagonia, names_to = "region", values_to = "relativo") %>%
  left_join(ppcc, by = c("region")) %>%
  mutate(relativo_normalizado = relativo / ppcc) %>%
  pivot_longer(names_to = "grupo", cols = c("relativo", "relativo_normalizado", "ppcc"), values_to = "valor") %>%
  mutate(grupo = fct_recode(grupo, "efecto total" = "relativo", "efecto composición" = "relativo_normalizado")) %>%
  ggplot(aes(periodo, valor, color = region, group = region)) +
  geom_line() +
  facet_wrap(. ~ grupo) +
  theme_minimal() +
  theme(legend.position = "bottom")

Canasta Básica Total

relativos_cbt <- canastas_regionales %>%
  select(-CBA, -codigo) %>%
  pivot_wider(names_from = region, values_from = CBT) %>%
  mutate_at(.vars = c("Cuyo", "Noreste", "Noroeste", "Pampeana", "Patagonia"), ~ .x / GBA) %>%
  mutate(
    GBA = GBA / GBA,
    periodo = parse_date_time(periodo, "Y.q")
  ) # paso a formato fecha los trimestres
relativos_cbt

Los resultados son similares analizando la CBT.

relativos_cbt %>%
  pivot_longer(cols = Cuyo:Patagonia, names_to = "region", values_to = "relativo") %>%
  left_join(ppcc, by = c("region")) %>%
  mutate(relativo_normalizado = relativo / ppcc) %>%
  pivot_longer(names_to = "grupo", cols = c("relativo", "relativo_normalizado", "ppcc"), values_to = "valor") %>%
  mutate(grupo = fct_recode(grupo, "efecto total" = "relativo", "efecto composición" = "relativo_normalizado")) %>%
  ggplot(aes(periodo, valor, color = region, group = region)) +
  geom_line() +
  facet_wrap(. ~ grupo) +
  theme_minimal() +
  theme(legend.position = "bottom")

Dado que la CBT no se calcula valorizando una canasta, sino multiplicando a la CBA por la Inversa del Coeficiente de Engel (ICE), el gráfico anterior (dado que no es idéntico al de CBA) indica que hay una diferencia en los ICE de las regiones. Efectivamente, la metodología de pobreza indica que el ICE se calcula a nivel región.

Inversa del Coeficiente de Engel

Por lo tanto, realizamos la misma comparación para el ICE, calculado a partir de las CBA y CBT.

relativos_ice <- canastas_regionales %>%
  group_by(region, periodo) %>%
  mutate(ice = CBT / CBA) %>%
  select(-CBA, -CBT, -codigo) %>%
  pivot_wider(names_from = region, values_from = ice) %>%
  mutate_at(.vars = c("Cuyo", "Noreste", "Noroeste", "Pampeana", "Patagonia"), ~ .x / GBA) %>%
  mutate(
    GBA = GBA / GBA,
    periodo = parse_date_time(periodo, "Y.q")
  ) # paso a formato fecha los trimestres
relativos_ice
relativos_ice %>%
  pivot_longer(cols = Cuyo:Patagonia, names_to = "region", values_to = "relativo") %>%
  left_join(ppcc, by = c("region")) %>%
  ggplot(aes(periodo, relativo, color = region, group = region)) +
  geom_line() +
  theme_minimal() +
  theme(legend.position = "bottom")

Si bien existe una clara diferencia de nivel, las variaciones dentro del período son marginales.