Script
EPH
Abrir un archivo de la Encuesta Permanente de Hogares, calcular las cuatro tasas con sus cuatro denominadores y el ingreso con el ponderador que corresponde. Con las trampas del archivo contempladas, no descubiertas después.
Proyecto en R y Python · ZIP · 607 KB
En R alcanza con lo que ya trae; en Python hace falta SciPy.
El error que hace falta cometer dos veces
El ingreso medio de la EPH se calcula mal casi siempre, y de una manera muy particular: hacen falta dos descuidos juntos, y cada uno por separado es invisible.
En P21 —el ingreso de la ocupación principal— el -9 no es un ingreso negativo: quiere decir «no responde». Y el ponderador que corresponde no es PONDERA sino PONDIIO, que reparte la población de los que declararon.
Corriendo el descargable sobre su archivo de ejemplo, el mismo promedio da:
| Ponderador | Con el −9 | Media | Diferencia |
|---|---|---|---|
| PONDIIO | lo saca | $ 715.067 | — |
| PONDIIO | lo deja | $ 715.067 | exactamente la misma |
| PONDERA | lo saca | $ 700.544 | −2,0 % |
| PONDERA | lo deja | $ 565.082 | −21,0 % |
Las dos primeras filas dan lo mismo hasta el último decimal, y ahí está todo el asunto: el INDEC le pone PONDIIO = 0 al que no contestó, así que el −9 ya viene sacado. El filtro que uno nunca escribió no hace falta.
Hasta que hace falta. Antes de 2016T2 las bases de la EPH no traen PONDIIO —ni PONDII, ni PONDIH—. El día que el mismo script se corre sobre un trimestre viejo, el ponderador no está, el filtro nunca se escribió, y el promedio se cae un quinto sin que nada aparezca en pantalla.
Por eso el primer paso revisa que el ponderador de ingreso exista y lo escribe en avisos.csv cuando no está, en vez de seguir de largo.
Cuatro tasas, cuatro denominadores
El otro error caro es más simple y se ve más seguido: la desocupación no se divide por la población. Un 7 % no quiere decir que siete de cada cien personas no tengan trabajo: quiere decir que siete de cada cien que lo buscan no lo consiguen.
| Tasa | Valor | Cómo se calcula | Deff | n efectivo |
|---|---|---|---|---|
| Actividad | 48,65 % | PEA / población total | 3,03 | 1.816 |
| Empleo | 45,02 % | Ocupados / población total | 2,99 | 1.842 |
| Desocupación | 7,46 % | Desocupados / PEA | 3,09 | 851 |
| Subocupación | 10,42 % | Subocupados / PEA | 2,52 | 1.044 |
Las tres primeras tienen que cerrar entre sí: empleo = actividad × (1 − desocupación). El descargable calcula las tres por separado y después escribe el residuo de esa resta. Es la única comprobación que no depende de tener razón sobre ninguna otra cosa, y por eso está.
El error estándar, y por qué el que sale de acá es optimista
La EPH es una muestra por conglomerados, y eso cambia el error estándar, no la estimación. Todo lo que el proyecto estima —las tasas, el ingreso medio, la informalidad— es una razón entre dos totales ponderados, y las tres salen de la misma función, linealizando y sumando por unidad primaria dentro de cada estrato.
El estrato es el aglomerado y la unidad primaria es el hogar. No es lo ideal: el conglomerado de verdad es el radio censal, y el archivo público no lo trae. Con el hogar se captura que los miembros de un hogar se parecen y se pierde que los vecinos se parecen, así que el error estándar que sale de acá es una cota inferior. Decirlo es parte de hacerlo bien.
Aun así el efecto de diseño pasa de 2,5 en las cuatro tasas: los 5.507 casos del ejemplo valen como 1.816. Los grados de libertad son unidades primarias menos estratos —1.839 con 1.871 hogares y 32 aglomerados—, no n − 1.
Las trampas del archivo
Ninguna de estas es hipotética. Son las cosas que efectivamente pasan con las bases de la EPH, y cada una está contemplada en el paso que corresponde:
| Qué | Por qué importa |
|---|---|
| P21 = -9 | No es un ingreso negativo: es «no responde». Promediarlo como número hunde el promedio |
| PONDIIO antes de 2016T2 | No existe. Un script hecho para un trimestre reciente se queda sin él en silencio |
| NA con letras | En 2021T1, 2024T3 y 2024T4 el INDEC escribe así los faltantes, y eso vuelve texto a media base |
| CH06 = -1 | Quiere decir «menos de un año», no «falta el dato» |
| El ponderador es del hogar | Todos los miembros comparten PONDERA; por eso el hogar sirve de unidad primaria |
| Varios trimestres juntos | Concatenar bases da un promedio de trimestres que no es la tasa de ninguno |
Y hay tres que están antes de todo lo demás, en cómo se abre el archivo: el separador es el punto y coma —con la coma sale una sola columna y algunos programas no avisan—, la codificación es latin-1, y los textos vienen entre comillas. El proyecto lee todo como texto y decide después, columna por columna, qué es un número: es lo que hace que el trimestre con NA escrito con letras no rompa nada.
El archivo de ejemplo no es la EPH
El usu_individual_T425_simulado.txt que viene adentro está simulado. Tiene el formato exacto del archivo del INDEC y copia el diseño de la encuesta —los 32 aglomerados, con su región y su peso relativo—, pero no copia ningún dato de ninguna persona, y está a la octava parte del tamaño real.
Eso último es a propósito: así ningún número que salga del proyecto se puede confundir con una cifra publicada. Las 5.507 personas del ejemplo representan a 3.754.094 habitantes que no son los de Argentina. Para correrlo sobre datos de verdad alcanza con bajar el trimestre del INDEC, descomprimirlo en datos/ y cambiar una línea en parametros.csv: el archivo real de 2025T4 tiene 235 columnas y el de ejemplo 22, y el código elige por nombre.
Qué deja
| Archivo | Qué trae |
|---|---|
| poblacion.csv | Las cinco condiciones de actividad, ponderadas y en casos |
| tasas.csv | Las cuatro tasas con su denominador, su intervalo, su deff y su versión sin ponderar |
| tasas-por-grupo.csv | Las mismas cuatro, abiertas por sexo, tramo de edad y región |
| ingresos.csv | Media con intervalo, mediana, deciles extremos y razón entre el décimo y el primero |
| deciles.csv | Los diez grupos: corte, población, ingreso medio y participación |
| ponderador-e-ingreso.csv | El mismo promedio calculado de cinco maneras, y cuánto cambia cada una |
| ingresos-por-grupo.csv | Media y mediana por sexo, edad, región, nivel educativo y categoría |
| informalidad.csv | Asalariados sin descuento jubilatorio, con intervalo, por grupo |
| avisos.csv | Cada cosa del archivo que hay que mirar antes de publicar un número |
| resumen.csv | Las veinte cifras del informe, en dos columnas, para engancharle otra cosa |
| eph.md | El informe redactado |
En el ejemplo, la informalidad —asalariados sin descuento jubilatorio— da 36,87 %, y el décimo decil gana 20,8 veces lo que el primero.
Lo que no hace
No lee el archivo de hogar ni lo cruza con el de individual. Todo lo que calcula es de personas.
No arma series de varios trimestres, y avisa cuando encuentra más de uno adentro del mismo archivo.
No calcula pobreza: eso necesita la canasta y el archivo de hogar. Y no ajusta por inflación: los ingresos son del trimestre y en pesos de ese trimestre.
No calcula el Gini ni la curva de Lorenz. Deja los deciles, que es la materia prima: la curva de Lorenz se arma con ellos.
No corrige nada en silencio. Lo que está raro va a avisos.csv, con el nombre de la columna y el número de casos.
Cómo está verificado
El verificador vuelve a leer el archivo crudo por su cuenta —con su propio lector y su propio estimador de razón escrito en numpy— y recalcula todo: si el lector del proyecto se equivoca, este lo nota. Además comprueba las identidades que no pueden fallar: que empleo sea igual a actividad × (1 − desocupación), que los grupos de un corte sumen exactamente la población del total, que las participaciones de los deciles sumen uno, que los grados de libertad sean hogares menos aglomerados y no n − 1, y —la que sostiene el proyecto entero— que con PONDIIO dejar o sacar el −9 dé exactamente el mismo número. Corre también cinco variantes del archivo: sin la columna PONDIIO, fechado en 2015T1, con NA escrito con letras, con algún ponderador en cero y filtrado a una sola región. Son 3.123 comprobaciones, los veintidós sabotajes se detectan —siete de ellos rotos en R y en Python al mismo tiempo, para que lo único que pueda verlos sea el recálculo— y los dos idiomas escriben los once archivos idénticos byte a byte en las seis configuraciones.