Puedes encontrar esta librería en CRAN y descargarla directamente desde R o RStudio.
ESCUCHA ESTE POST COMO PODCAST
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.
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.
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:
o, en forma vectorial,
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.
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.
El agregado observado no entraba en el cálculo. La supuesta posterior dependía de la matriz previa, no del CPI observado.
La concentración Dirichlet que debía controlar la dispersión se cancelaba al renormalizar.
El componente diseñado para introducir estructura temporal también desaparecía algebraicamente durante la normalización.
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.
No existían pruebas de recuperación con datos sintéticos y verdad conocida que comprobaran si el procedimiento recuperaba las partes.
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:
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:
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.
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.
Las escalas de innovación sectoriales también pertenecen a una estructura jerárquica, permitiendo estimaciones más estables sin obligarlas a ser iguales.
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.
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:
y el agregado se observa mediante:
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 | Sí | No |
| MCMC | Sí | 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.
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.
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.
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.
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.
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.


Leave a Comment/Deja un Comentario