
Armonización de la Encuesta de Hogares entre años
Source:vignettes/armonizacion.Rmd
armonizacion.RmdLos nombres de las variables de la EH cambian entre
años (p. ej. el sexo es s1_03 en 2012,
s2a_02 en 2013–2015, s02a_02 en 2016–2019 y
s01a_02 en 2021+). encuestasbo ofrece una capa
de nombres canónicos estables.
El mapa canónico
library(encuestasbo)
variables_armonizadas() # variables comparables entre años y su mapeo
grupos_variables() # grupos temáticosLa armonización se apoya en dos hechos:
- Las variables de diseño y geografía
(
folio,depto,area,upm,estrato,factor) son consistentes todos los años (salvo el factor en 2012–2014, que se resuelve automáticamente). - El INE publica variables derivadas con nombres
estables: ingresos (
yhog,yper), pobreza (p0,pext0,z,zext), educación (niv_ed_g,aestudio) y empleo (pea,ocupado,condact). El paquete las expone con nombres canónicos (ingreso_hogar,pobre,nivel_edu, …).
Solo sexo, edad y parentesco
se mapean por su etiqueta.
Armonizar un año
library(dplyr)
get_eh(2023, "persona", as = "tibble") |>
armonizar_eh(2023) |>
count(sexo)Las variables categóricas armonizadas tienen etiquetas
estables entre años; etiquetar_valores() las
detecta sin necesidad de indicar el año. Además, los valores que
cambiaban de código entre años se unifican (p. ej.
nivel_edu: el código de “Otros” era 4 o 5 según el año,
ahora siempre 4):
get_eh_armonizada(variables = c("nivel_edu", "sexo", "pobre")) |>
etiquetar_valores() |>
count(nivel_edu, pobre)Serie larga entre años
get_eh_armonizada() apila varios años en formato largo
con una columna anio:
library(srvyr)
# Pobreza ponderada por año (combinando armonización + diseño)
anios <- 2018:2023
serie <- lapply(anios, function(y) {
est <- diseno_eh(y, verbose = FALSE) |>
summarise(pobreza = survey_mean(pobre, na.rm = TRUE))
data.frame(anio = y, pobreza = est$pobreza)
})
do.call(rbind, serie)
# O bien traer los microdatos armonizados de varios años de una vez
get_eh_armonizada(grupo = "pobreza", anios = 2018:2023)get_eh_armonizada() se respalda en un único Parquet
precalculado (~5 MB con los 13 años, esquema consistente), por lo que es
rápido y se puede consultar de forma perezosa con Arrow o
DuckDB:
# Modo DuckDB: consulta SQL sobre todos los años sin cargar todo a RAM
con <- get_eh_armonizada(as = "duckdb")
DBI::dbGetQuery(con,
"SELECT anio, AVG(ingreso_hogar) AS ing FROM eh_armonizada GROUP BY anio ORDER BY anio")
DBI::dbDisconnect(con, shutdown = TRUE)
# Modo Arrow (lazy) + dplyr
get_eh_armonizada(as = "arrow") |>
filter(anio >= 2020) |>
count(anio) |>
collect()Limitaciones de comparabilidad
- Cambios de cuestionario y de clasificadores ocupacionales (COB) y de
actividad (CAEB) entre años:
grupo_ocupacionse entrega con códigos crudos (armonizada = FALSE). - El marco muestral cambió con el Censo 2012 → 2024, lo que afecta la comparabilidad fina de los años más recientes.
- La medición del empleo y los agregados de ingreso tuvieron ajustes metodológicos a lo largo de la serie.