Espartaco

“Is that to say we are against Free Trade? No, we are for Free Trade, because by Free Trade all economical laws, with their most astounding contradictions, will act upon a larger scale, upon the territory of the whole earth; and because from the uniting of all these contradictions in a single group, where they will stand face to face, will result the struggle which will itself eventuate in the emancipation of the proletariat.”

Karl Heinrich Marx · Marx-Engels Collected Works, Vol. VI, p. 290

26,449 views since December 2020

26,449 visitas desde diciembre de 2020

EnglishEspañol

Cuando Solo Vemos “El Todo”: Una Manera Bayesiana de Recuperar “Las Partes” con BayesianDisaggregation.

Puedes encontrar esta librería en CRAN y descargarla directamente desde R o RStudio.

Inferencia bayesiana · Desagregación · Modelos de espacio de estados

Conocemos el total, pero no las partes: el problema que enfrenta BayesianDisaggregation

Cómo recuperar componentes sectoriales latentes a partir de un agregado conocido sin fingir que los datos contienen más información de la que realmente contienen.

BayesianDisaggregation · R · Stan · Licencia MIT · desarrollado por José Mauricio Gómez Julián

Tenemos un Índice de Precios al Consumidor nacional para cada año. Es un solo número. Pero nuestra investigación necesita algo mucho más desagregado: un índice para manufactura, otro para agricultura, otro para servicios, otro para construcción y así sucesivamente.

Sabemos cuánto pesa cada sector dentro del agregado. Lo que no observamos directamente son las trayectorias sectoriales que, combinadas con esos pesos, producen el índice total.

A primera vista parece un problema de contabilidad. En realidad es un problema inverso y subdeterminado.

Y ésa es precisamente la dificultad que intenta abordar BayesianDisaggregation.

La cuestión fundamental

El problema no es si podemos fabricar alguna desagregación. Siempre podemos hacerlo introduciendo supuestos. La pregunta científicamente importante es: ¿podemos distinguir qué parte de la respuesta viene de los datos, qué parte viene de los supuestos y cuánta incertidumbre debemos conservar?

El problema matemático: una ecuación, muchas incógnitas

Supongamos que observamos un agregado \(y_t\) en cada período \(t\). También conocemos los pesos \(w_{tk}\) de cada uno de los \(K\) sectores.

Si \(\phi_{tk}\) representa el índice sectorial latente, la relación fundamental puede escribirse, de manera esquemática, como:

\[ y_t \approx \sum_{k=1}^{K} w_{tk}\phi_{tk} \]

o, en forma vectorial,

\[ y_t \approx \mathbf{w}_t^{\top}\boldsymbol{\phi}_t \]

La dificultad aparece inmediatamente. En cada período observamos una ecuación, pero queremos conocer \(K\) valores sectoriales.

El agregado determina una combinación lineal concreta de los sectores, pero deja \(K-1\) direcciones sin determinar directamente.

Ejemplo mínimo

Con cuatro sectores tenemos cuatro índices desconocidos, pero solamente una suma ponderada observada. Existen muchas combinaciones sectoriales distintas capaces de producir exactamente el mismo agregado.

No existe un algoritmo capaz de hacer desaparecer esa falta de información. Para separar las partes tenemos que introducir estructura: suavidad temporal, distribución inicial, dinámica sectorial o algún otro conocimiento previo.

En lenguaje bayesiano, eso significa que el prior necesariamente desempeña un papel importante en las dimensiones que los datos no identifican.

Una historia poco habitual en software estadístico: borrar y empezar de nuevo

La historia del paquete es metodológicamente interesante porque su primera familia de métodos, la serie 0.1.x, fue posteriormente auditada por su propio autor y eliminada.

Esa versión se presentaba como una forma de desagregación bayesiana sin MCMC basada en actualizaciones deterministas sobre una matriz previa de pesos.

El problema no era que el código fallara. Era más serio: producía resultados aparentemente plausibles mientras varios elementos fundamentales del procedimiento no hacían lo que pretendían.

La auditoría documentó seis defectos.

F1

El agregado observado no entraba en el cálculo. La supuesta posterior dependía de la matriz previa, no del CPI observado.

F2

La concentración Dirichlet que debía controlar la dispersión se cancelaba al renormalizar.

F3

El componente diseñado para introducir estructura temporal también desaparecía algebraicamente durante la normalización.

F4

Un término presentado como medida de eficiencia resultaba ser constante y no dependía realmente de la calidad de los datos o del ajuste.

F5

No existían pruebas de recuperación con datos sintéticos y verdad conocida que comprobaran si el procedimiento recuperaba las partes.

F6

Una función de correlación calculaba Pearson y Spearman y reportaba automáticamente el mayor, introduciendo selección silenciosa del resultado.

F1 era decisivo. Si una supuesta posterior bayesiana no condiciona en la observación, no está realizando actualización bayesiana respecto de esos datos.

La solución elegida no fue colocar parches alrededor de la arquitectura anterior. La familia 0.1.x fue eliminada y sustituida por modelos en los que el agregado observado aparece explícitamente dentro de la likelihood.

El cambio conceptual: el agregado tiene que ser evidencia

La nueva formulación trata el CPI no como una identidad que se impone después de construir los sectores, sino como una observación generada por ellos.

Es decir, el modelo pregunta: si éstas fueran las trayectorias sectoriales latentes, ¿qué tan probable sería observar el agregado que efectivamente observamos?

En el motor principal, una representación esquemática de la observación es:

\[ y_t \sim t_{\nu} \left( \sum_{k=1}^{K}w_{tk}\phi_{tk}, \sigma_y \right) \]

La suma ponderada sectorial es ahora el centro de la distribución del CPI observado.

Eso cambia todo. Cada nueva observación del agregado modifica la distribución de probabilidades sobre las trayectorias sectoriales.

La salida deja de ser un único conjunto de números y pasa a ser una distribución posterior sobre las partes latentes.

Dos motores bayesianos para dos compromisos distintos

BayesianDisaggregation ofrece dos motores. Ambos condicionan en los datos, pero intercambian velocidad, flexibilidad y supuestos de manera diferente.

State-space MCMC

Trabaja con los índices sectoriales en espacio logarítmico, incorpora jerarquías entre sectores y permite una likelihood Student-t robusta a observaciones extremas.

Conjugado lineal-gaussiano

Trabaja en niveles y aprovecha la conjugación para calcular la posterior exactamente mediante filtrado y suavizado de Kalman, sin necesidad de MCMC.

Motor 1: un modelo de espacio de estados con MCMC

En el motor canónico, los índices sectoriales viven en espacio logarítmico. Esto garantiza positividad: un índice de precios no puede terminar accidentalmente tomando un valor negativo.

Cada sector evoluciona aproximadamente como un random walk con deriva:

\[ \log \phi_{t,k} = \log \phi_{t-1,k} + \mu_k + \eta_{t,k} \]

donde \(\mu_k\) representa la deriva propia del sector y \(\eta_{t,k}\) su innovación temporal.

Pero los sectores no son tratados como universos completamente independientes.

Pooling parcial de las derivas

Cada sector conserva su propia tasa media de evolución, pero las derivas proceden de una distribución común y pueden compartir información.

Pooling parcial de las volatilidades

Las escalas de innovación sectoriales también pertenecen a una estructura jerárquica, permitiendo estimaciones más estables sin obligarlas a ser iguales.

Dispersión inicial estimable

La heterogeneidad transversal en el período inicial es ahora un verdadero parámetro del modelo, no una cantidad que desaparece durante una renormalización.

Observación robusta

Una likelihood Student-t permite acomodar observaciones agregadas atípicas con mayor robustez que una observación estrictamente gaussiana.

Debido a la transformación logarítmica, la estructura jerárquica y la likelihood Student-t, el modelo no posee una solución conjugada simple. Se estima mediante Hamiltonian Monte Carlo en Stan.

La implementación comprueba diagnósticos como \(\hat{R}\) y transiciones divergentes, y devuelve draws posteriores de cada índice sectorial en cada período.

Motor 2: Bayes exacto sin MCMC

El segundo motor demuestra algo conceptualmente importante: “sin MCMC” y “no bayesiano” no son sinónimos.

Si formulamos el problema como un sistema lineal-gaussiano, la posterior puede calcularse analíticamente.

En este caso los sectores evolucionan en niveles:

\[ \boldsymbol{\phi}_t = \boldsymbol{\phi}_{t-1} + \mathbf{d} + \boldsymbol{\omega}_t \]

y el agregado se observa mediante:

\[ y_t = \mathbf{w}_t^{\top}\boldsymbol{\phi}_t + \varepsilon_t \]

con errores gaussianos.

El filtro de Kalman avanza en el tiempo actualizando la distribución de los estados latentes a medida que observa cada agregado. Después, el suavizador Rauch-Tung-Striebel recorre la serie hacia atrás y refina las distribuciones utilizando también información futura.

Si queremos muestras conjuntas de la posterior completa, el paquete utiliza el simulation smoother de Durbin-Koopman.

Esas muestras conservan la dependencia entre sectores y entre períodos: no son una colección de aproximaciones marginales independientes.

Exactitud matemática o riqueza del modelo: el intercambio es explícito

Característica State-space MCMC Lineal-gaussiano
Inferencia HMC / Stan Posterior conjugada exacta
Estados Log índices Índices en niveles
Positividad Garantizada por la transformación log No garantizada estrictamente
Observación robusta Student-t disponible Gaussiana
Jerarquía entre sectores No
MCMC No
Diagnósticos de convergencia Necesarios No aplican
Velocidad Mayor costo computacional Mucho más directo

La parte más importante: el modelo no puede identificar lo que los datos no contienen

Construir una posterior legítima no elimina la subdeterminación original.

El agregado sigue proporcionando una combinación lineal por período. Las otras \(K-1\) direcciones necesitan ser regularizadas mediante la dinámica temporal y los priors.

Eso implica que las distribuciones posteriores de los sectores pueden ser anchas y sensibles al prior.

Ésta no es una anomalía que deba esconderse.

Identificación débil

Si el agregado identifica bien la suma pero no determina de manera única cómo se reparte esa suma entre sectores, una posterior sectorial muy estrecha sería sospechosa. La incertidumbre amplia es parte de la respuesta estadística.

Los tests de recuperación muestran exactamente esa diferencia

La documentación genera datos sintéticos a partir del propio proceso generador del modelo, de modo que se conocen de antemano las trayectorias sectoriales verdaderas.

Esto permite comprobar por separado aquello que está fuertemente identificado y aquello que no.

Objeto Resultado documentado Interpretación
Agregado reconstruido Correlación superior a \(0.95\), con frecuencia próxima a \(1\) El agregado está fuertemente identificado por los datos.
Cobertura sectorial Aproximadamente \(0.84\) en las pruebas descritas Las bandas son deliberadamente amplias y reconocen la identificación débil.
Umbral exigido por el test Cobertura superior a \(0.70\) La prueba adopta un criterio conservador en lugar de exigir una falsa precisión.

En otras palabras: la suma puede recuperarse con mucha precisión sin que cada una de las partes pueda recuperarse con igual precisión.

No hay contradicción. Es exactamente lo que esperaríamos de un problema subdeterminado.

Entonces, ¿para qué sirven unas estimaciones sectoriales inciertas?

Porque los índices desagregados no tienen por qué ser el final del análisis. Pueden convertirse en entradas para un segundo modelo.

Y aquí aparece otro principio importante: la incertidumbre de la primera etapa debe sobrevivir a la segunda.

BayesianDisaggregation utiliza las muestras posteriores como imputaciones múltiples.

Cada draw representa una posible configuración sectorial compatible con los datos y el modelo. El análisis posterior puede ejecutarse sobre muchas de esas configuraciones y combinar después los resultados mediante las reglas de Rubin.

El efecto conceptual es sencillo: no sustituimos la distribución sectorial por su media y fingimos que ésta es conocida sin error.

\[ p(\boldsymbol{\phi}\mid y,W) \quad\longrightarrow\quad \left\{ \boldsymbol{\phi}^{(1)}, \boldsymbol{\phi}^{(2)}, \ldots, \boldsymbol{\phi}^{(M)} \right\} \quad\longrightarrow\quad \text{análisis posterior} \]

La nube de incertidumbre viaja con los datos desagregados.

Incluso el sesgo downstream se mide, en lugar de esconderse

La documentación reconoce además una consecuencia específica para el programa de investigación en el que se utiliza el paquete.

Debido a que la desagregación es subdeterminada, el prior suavizador tipo random walk puede diluir cierta señal de reversión cuando los índices desagregados alimentan posteriormente un modelo Ornstein-Uhlenbeck.

En las evaluaciones descritas, esa velocidad de reversión puede quedar sesgada hacia valores más lentos en aproximadamente 13–26 %.

La dirección es conservadora según la documentación: la reversión verdadera sería al menos tan rápida como la estimada. También se reporta una fracción de información faltante propagada cercana a \(0.4\).

La importancia metodológica no reside únicamente en los números concretos. Reside en que la limitación se mide, se documenta y se transmite al análisis posterior.

Tres capas de validación para tres tipos distintos de error

El paquete separa deliberadamente varios niveles de testing.

Smoke tests. Comprueban que los dos motores compilen, funcionen y devuelvan la estructura correcta de dimensiones períodos × sectores × draws.

Recovery tests. Generan datos sintéticos con verdad conocida y preguntan si el modelo recupera correctamente el agregado y proporciona cobertura razonable para las trayectorias sectoriales.

Golden tests. Utilizan generate_quantities de Stan sobre draws congelados y exigen coincidencia exacta con una referencia también congelada.

Los golden tests cumplen una función particularmente estricta: si una modificación cambia cantidades derivadas que deberían permanecer invariantes, el test puede detectar incluso diferencias bit a bit.

Una filosofía de testing

No basta con comprobar que un paquete “corre sin errores”. También hay que comprobar que recupera aquello que debería recuperar y que continúa calculando mañana exactamente lo que calculaba hoy cuando nada metodológico ha cambiado.

¿Por qué no usar simplemente RAS, Chow-Lin o reconciliación de pronósticos?

Porque resuelven problemas relacionados, pero no idénticos.

Tradición Qué hace Diferencia respecto de BayesianDisaggregation
RAS / IPF Ajusta iterativamente matrices para hacer coincidir márgenes. Es un procedimiento determinista de balanceo; no produce una posterior sobre componentes latentes.
Denton / Chow-Lin / Fernández Desagregan temporalmente una serie de baja frecuencia. Resuelven, por ejemplo, anual → trimestral, no necesariamente la recuperación transversal de sectores ocultos.
MinT y reconciliación Ajustan pronósticos jerárquicos para que sean coherentes entre sí. Parten de pronósticos disponibles y los reconcilian; no infieren componentes latentes desde un único agregado observado.
Modelos composicionales Modelan pesos o participaciones que evolucionan sobre el simplex. La variable latente principal son las participaciones, no necesariamente los niveles sectoriales condicionados por su suma ponderada.

La documentación es cuidadosa con la afirmación de novedad: no declara ser “la primera” solución. Formula una proposición más estrecha: el autor no encontró en las tradiciones adyacentes una herramienta que realizara exactamente la misma combinación de desagregación transversal bayesiana, condicionamiento en el agregado y posterior propagable.

Los datos también necesitan disciplina

El paquete incorpora utilidades para trabajar con archivos reales de CPI y matrices de pesos.

El lector de CPI puede identificar encabezados habituales en inglés y español —como date, fecha, year, año, CPI, índice o price—, manejar formatos numéricos localizados y consolidar años duplicados.

El lector de pesos normaliza las participaciones sectoriales para que formen un simplex en cada período, mientras que las funciones de alineamiento garantizan que agregado y pesos cubran los mismos años antes de estimar.

Una advertencia sencilla, pero fundamental: índice no es tasa

El modelo trabaja con niveles del índice.

Esto significa que introducir la tasa de inflación en lugar del nivel del CPI constituye un error conceptual.

Si el lado derecho del modelo representa una suma ponderada de índices sectoriales en niveles, el agregado observado debe estar expresado en la misma clase de magnitud.

No confundir

CPI = nivel de un índice.
Inflación = tasa de cambio de ese índice.
No son intercambiables dentro de la ecuación de observación.

La lección más interesante quizá no sea estadística

Hay una enseñanza más amplia en la historia de BayesianDisaggregation.

El error más peligroso en software estadístico no siempre produce un mensaje rojo, un crash o un número absurdo.

A veces produce exactamente lo contrario: resultados suaves, plausibles y convincentes que no representan lo que creemos que representan.

La versión 0.1.x devolvía números. El problema era que el dato que debía actualizar la inferencia no estaba participando en ella.

Eso sólo se hizo evidente cuando se introdujo algo aparentemente básico: generar datos cuya verdad se conocía y preguntar si el método podía recuperarla.

Al fallar esa prueba, la decisión fue eliminar la arquitectura y reconstruir el paquete alrededor de un modelo que sí condicionara en las observaciones.

La idea central de BayesianDisaggregation no es prometer que un problema subdeterminado deja mágicamente de serlo porque utilicemos Bayes. Es exactamente la contraria. El agregado identifica con fuerza aquello que realmente contiene; la separación sectorial permanece débilmente identificada y depende en parte de la estructura previa. Una inferencia rigurosa debe mostrar esa diferencia, devolver intervalos suficientemente amplios y permitir que esa incertidumbre continúe hacia cualquier análisis posterior. El objetivo no es fabricar precisión: es representar fielmente cuánto sabemos.

BayesianDisaggregation es un paquete de R desarrollado por José Mauricio Gómez Julián y distribuido bajo licencia MIT. El motor MCMC utiliza Stan. El código fuente, la documentación, las instrucciones de instalación y la wiki están disponibles en GitHub.


Descubre más de Marxist Philosophy of Science

Suscríbete para recibir las últimas entradas en tu correo electrónico.

Follow the blogSeguí al blog

Comments

Leave a Comment/Deja un Comentario

Descubre más de Marxist Philosophy of Science

Suscríbete ahora para seguir leyendo y obtener acceso al archivo completo.

Continuar leyendo