De R a Python: Trabajar con microdatos de INEGI
Desde hace años, he trabajado los microdatos de las encuestas de INEGI con srvyr en R pero recientemente se publicó svy, una librería en Python que podría ser de mucha utilidad.
Hoy analizaré cómo replicar la estimación de viviendas y de rezago habitacional, datos que se derivan de la Encuesta Nacional de Ingresos y Gastos de los Hogares (ENIGH), utilizando Python.
Si has estado al pendiente de mis publicaciones, sabrás que estos cálculos los hago tradicionalmente con srvyr, una librería en R bastante buena que, además, permite utilizar las tradicionales pipelines de tidyverse. Es más, aquí te dejo el comercial, cual Alfredo Jalife citándose a sí mismo, con el uso de esta librería:
Usando R para jugar con los microdatos del INEGI
Y sí, he seguido con srvyr en R pero recientemente se publicó la librería svy en Python, cuyo autor es el Dr. Mamadou S. Diallo 🫡.
A continuación, describiré algunas características y pondré un ejemplo utilizando datos de la ENIGH. Es importante señalar que la librería aún se encuentra en desarrollo, por lo que si tienes alguna observación o quieres profundizar en el tema, te invito a revisar la documentación o contactar directamente al autor de la librería.
Un poquito sobre Svy
Svy es una librería en Python para analizar encuestas con diseños complejos (estratificación, conglomerados y muestreo multietápico) desde un enfoque de inferencia basada en el diseño. Permite calcular estimaciones, varianzas, intervalos de confianza, entre otras cosas. Algo importante que debe decirse sobre svy es que los resultados que arroja son utilizando la librería Polars por lo que, si no estás acostumbrado a ella, es importante que la explores. No quiero ahondar más porque está más cool que revises la documentación y juegues con la librería así que, como dicen en el norte del país, vámonos recio🍅 con el ejemplo.
El ejemplo: srvyr y svy
Como todo en el mundo es un ciclo y siempre volvemos adonde fuimos felices, desarrollaré el ejemplo del cálculo de viviendas y del rezago habitacional utilizando la Encuesta Nacional de Ingresos y Gastos de los Hogares 2024.
Expondré los resultados que obtengo con srvyr y después, con svy.
Compartiré los códigos para que veas los imports y tratamiento de datos previo pero, para hacer más rápido esto, me iré directamente a la parte en donde definimos el diseño muestral:
##Crear diseño muestral con srvyr
dm <- viviendas %>%
as_survey_design(ids = upm, strata = est_dis, weights = factor)
Ahora con svy:
#Crear diseño muestral con svy
# Diseño muestral
design = svy.Design(
stratum=”est_dis”,
psu=”upm”,
wgt=”factor”
)
sample = svy.Sample(data=viviendas, design=design)
Estimación del total de viviendas
Una vez que se tiene el diseño muestral, podemos estimar el total de viviendas. Utilizando srvyr, la estimación se haría así:
##Calcular total de viviendas
dm%>%
summarise(viviendas=survey_total(vartype=c(”se”,”ci”,”cv”)))
Y con svy, el resultado sería el siguiente:
### Calcular total de viviendas
totviv = sample.estimation.total(y=”viviendas”)
print(totviv)
Es importante señalar que, para estimar el total de viviendas, tuve que crear una variable llamada “viviendas” que contuviera 1 para poder hacer la estimación; es decir, no puedo hacer el cálculo directo como srvyr. Quizás esto es una oportunidad de mejora de svy pero tampoco es algo fatal.
Como podemos observar, los resultados son consistentes con una y con otra librería.
Estimación del rezago habitacional
Una vez que realizamos este primer ejemplo, haremos el cálculo del rezago habitacional. Para esto, realizamos tanto en R como en Python la definición de la variable “rezago” con las diferentes condiciones. Si te interesa saber un poco más, puedes revisar el código o consultar alguna de las múltiples publicaciones de CONAVI o SEDATU sobre el tema.
srvyr:
##Calcular rezago habitacional general
dm%>%
group_by(rezago)%>%
summarise(viviendas=survey_total(vartype=c(”se”,”ci”,”cv”)))
svy:
##Calcular rezago
rezago_total = sample.estimation.total(y=”viviendas”, by=”rezago”)
print(rezago_total)
Nuevamente, los resultados son consistentes😊.
Estimación del rezago habitacional por entidad federativa
¿Podemos hacer esa estimación desglosada por entidad? Sí, tanto en R como en Python se puede. El resultado es una tablota. Aquí va👇🏼
srvyr:
##Calcular rezago habitacional por entidad federativa
dm%>%
group_by(rezago, nom_ent)%>%
summarise(viviendas=survey_total(vartype=c(”se”,”ci”,”cv”)))
svy:
# Rezago por entidad federativa
rezago_ent = sample.categorical.tabulate(
rowvar=”rezago”,
colvar=”nom_ent”,
units=svy.TableUnits.COUNT,
)
print(rezago_ent)
Y nuevamente, los resultados son los mismos💫.
Como se puede observar, las dos librerías permiten hacer estimaciones precisas con los microdatos de la ENIGH. Esto no pretende decirte que te cambies de lenguaje sino que conozcas otra herramienta para trabajar.
Igualmente, si eres usuario de Python y esto te interesa, te invito a indagar un poco más y hacer recomendaciones para que svy sea mucho más robusta de lo que ya es.
Y como siempre, si llegaste hasta aquí, te dejo los códigos para que los puedas consultar.😉
Happy coding!😊












