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,472 views since December 2020

26,472 visitas desde diciembre de 2020

EnglishEspañol

bivarhr: Cuando Dos Series de Conteo Necesitan Comunicarse: Un Marco Bayesiano Para Modelos de Umbral Bivariados

También puedes encontrar esta librería en CRAN y descargarla directamente desde R y RStudio.

Estadística bayesiana · Series temporales · Inferencia causal

Cuando dos series tienen demasiados ceros: una introducción a bivarhr

Un paquete de R que combina modelos hurdle bivariados, regularización horseshoe, comparación predictiva y múltiples estrategias de inferencia causal para uno de esos problemas que parecen sencillos hasta que uno intenta analizarlos de verdad.

Por José Mauricio Gómez Julián · CRAN · GitHub

Imaginemos que queremos estudiar dos procesos que evolucionan juntos en el tiempo. Podrían ser ataques insurgentes y operaciones contrainsurgentes, casos de una enfermedad y muertes asociadas, protestas y respuestas del gobierno, entradas y salidas de empresas o cualquier otro par de fenómenos registrados como conteos.

Hasta aquí nada parece especialmente extraño. Tenemos series temporales, tenemos conteos y tenemos una considerable caja de herramientas estadística. El problema comienza cuando los datos se parecen más al mundo real que a los ejemplos de un manual.

Puede ocurrir que durante la mayor parte del tiempo no suceda absolutamente nada: cero ataques, cero protestas, cero extinciones, cero nuevos casos. Después, cuando finalmente ocurre algo, el número observado puede variar enormemente. A eso se suma otra dificultad: las dos series pueden influenciarse predictivamente entre sí con rezagos, mientras docenas de variables adicionales compiten por entrar en el modelo.

bivarhr fue diseñado precisamente para trabajar en ese cruce de problemas.

La idea en una frase

En lugar de tratar por separado el exceso de ceros, la dinámica entre ambas series, la selección de variables, la incertidumbre sobre el modelo y la evidencia causal, bivarhr intenta integrarlos dentro de un único flujo de análisis reproducible.

Primero: ¿por qué tantos ceros son un problema?

Un modelo de Poisson convencional presupone una estructura relativamente simple para los conteos. La distribución binomial negativa permite mayor dispersión y suele funcionar mejor cuando la variabilidad excede lo que admitiría un Poisson.

Pero ninguna de esas decisiones resuelve automáticamente un conjunto de datos en el que, por ejemplo, el 60 %, 70 % u 80 % de las observaciones son exactamente cero.

Un modelo hurdle aborda el problema dividiéndolo conceptualmente en dos mecanismos.

  1. Primero pregunta si el proceso logra cruzar el “obstáculo”: ¿ocurrió algo o el resultado fue cero?
  2. Solamente después, condicionando a que ocurrió algo, pregunta: ¿cuánto ocurrió?

La primera parte puede modelarse mediante una distribución Bernoulli con enlace logit. La segunda, en bivarhr, mediante una binomial negativa truncada en cero.

Formalmente, para una de las series \(I\) en el instante \(t\):

\[ P(Y_{I,t}=0)=1-\pi_{I,t} \]

mientras que, para un conteo positivo,

\[ P(Y_{I,t}=y\mid y>0) = \pi_{I,t} \frac{ f_{\mathrm{NB}}(y\mid\mu_{I,t},\phi_I) }{ 1-f_{\mathrm{NB}}(0\mid\mu_{I,t},\phi_I) } \]

Aquí, \(\pi_{I,t}\) representa la probabilidad de observar un valor distinto de cero, \(\mu_{I,t}\) controla el conteo esperado una vez superado el hurdle y \(\phi_I\) gobierna la dispersión.

Esta separación es importante. El proceso que determina si sucede algo no tiene por qué ser el mismo que determina la intensidad de lo que sucede.

¿Y qué aporta que el modelo sea bivariado?

Supongamos que llamamos \(I\) y \(C\) a nuestras dos series. Analizarlas por separado perdería precisamente una de las preguntas más interesantes: ¿contiene el pasado de una información útil para predecir el futuro de la otra?

bivarhr permite introducir valores rezagados de \(C\) en la ecuación correspondiente a \(I\), valores rezagados de \(I\) en la de \(C\), ambas cosas simultáneamente o ninguna.

Especificación C → I I → C Lectura
A No C contiene información predictiva rezagada sobre I
B No I contiene información predictiva rezagada sobre C
C Dinámica predictiva bidireccional
D No No Sin efectos cruzados rezagados

Esta comparación permite estudiar causalidad en el sentido de Granger: si conocer el pasado de una variable mejora sistemáticamente la predicción de otra una vez considerada la información pertinente.

Una distinción importante

La causalidad de Granger es una afirmación sobre precedencia e información predictiva. No equivale, por sí sola, a demostrar una relación causal estructural. Precisamente por eso bivarhr no termina el análisis en los rezagos cruzados: incorpora otras herramientas que permiten contrastar la misma hipótesis desde ángulos diferentes.

Muchos predictores, pocos datos: el papel del horseshoe

Imaginemos ahora que, además de ambas series, disponemos de indicadores económicos, variables institucionales, condiciones climáticas, tendencias, cambios de régimen y distintas transformaciones de cada una.

El número de parámetros puede crecer rápidamente. Con una muestra relativamente pequeña, un modelo suficientemente flexible puede terminar aprendiendo ruido.

Para enfrentarse a este problema, bivarhr utiliza la prior horseshoe regularizada.

La intuición es sencilla aunque su formulación matemática sea más rica: los coeficientes que no encuentran suficiente respaldo en los datos son fuertemente contraídos hacia cero, mientras que las señales verdaderamente importantes pueden escapar de esa contracción.

El mecanismo combina un parámetro global de contracción, \(\tau\), que controla el nivel general de esparsidad, con parámetros locales \(\lambda_j\), capaces de adaptarse a cada coeficiente. La versión regularizada empleada por el paquete sigue el enfoque de Piironen y Vehtari y limita además comportamientos excesivamente extremos de los coeficientes.

En términos prácticos, esto significa que el investigador no necesita convertir la selección manual de variables en una sucesión interminable de decisiones ad hoc.

El problema que viene después: ¿qué modelo elegimos?

Incluso después de definir la estructura general, queda una decisión incómoda. ¿Cuántos rezagos deberíamos utilizar? ¿Uno? ¿Dos? ¿Tres? ¿Qué grado de regularización es apropiado?

La respuesta habitual consiste en escoger el modelo que obtiene el mejor valor de algún criterio y descartar los demás.

bivarhr sigue otra filosofía. Combina modelos mediante predictive stacking, asignándoles pesos según su capacidad predictiva.

\[ p_{\mathrm{stack}}(y_t) = \sum_{m=1}^{M} w_m\, p(y_t\mid y_{1:t-1},\mathcal{M}_m) \]

Los pesos se estiman buscando maximizar la densidad logarítmica predictiva esperada —ELPD—, evaluada mediante PSIS-LOO. En términos menos técnicos: los modelos que predicen mejor reciben más influencia y los que predicen peor reciben menos.

El resultado evita hacer depender toda la inferencia de una única decisión sobre el número exacto de rezagos o sobre un solo conjunto de hiperparámetros.

De la predicción a la causalidad: buscar evidencia convergente

Probablemente éste sea el aspecto más ambicioso del paquete. bivarhr no propone que un único procedimiento estadístico resuelva automáticamente el problema de la causalidad. En su lugar, proporciona varias herramientas complementarias.

Entropía de transferencia

Pregunta cuánto reduce el pasado de una serie nuestra incertidumbre acerca de la otra, más allá de la información contenida en su propio pasado. A diferencia del Granger lineal tradicional, procede desde la teoría de la información.

Redes Bayesianas Dinámicas

Buscan aprender relaciones dirigidas entre variables situadas en distintos momentos, permitiendo distinguir conexiones directas de estructuras mediadas por otras variables.

Modelos Ocultos de Markov

Permiten investigar si ambas series parecen estar gobernadas por estados latentes, como períodos de calma, transición o escalada que no fueron etiquetados previamente.

VARX

Aporta una comprobación desde la tradición clásica de series temporales, incluyendo diagnósticos de estabilidad, autocorrelación, normalidad y efectos ARCH.

Análisis de sensibilidad

Siguiendo a Cinelli y Hazlett, cuantifica cuán potente tendría que ser un confusor no observado para explicar un efecto estimado.

Control sintético

Mediante series temporales estructurales bayesianas puede construir un escenario contrafactual y comparar lo observado con lo que habría ocurrido en ausencia de una intervención.

Ninguno de estos métodos convierte mágicamente una asociación en causalidad. Su utilidad reside en otra cosa: permiten preguntar si una conclusión sobrevive cuando el mismo problema se examina mediante representaciones y supuestos diferentes.

Un resultado no vale mucho si desaparece al tocar el modelo

Una parte importante de bivarhr está dedicada no a producir resultados nuevos, sino a intentar destruir los resultados que ya obtuvimos.

Ésa es una virtud.

Placebos temporales

Si se altera aleatoriamente el orden temporal de los datos y el modelo continúa funcionando igual de bien, existe un problema: quizá no estaba aprendiendo realmente la dinámica temporal.

Evaluación fuera de muestra

El paquete permite ajustar modelos en fracciones sucesivas de la muestra y evaluar sus pronósticos sobre las observaciones restantes. En lugar de preguntar solamente qué tan bien describe el modelo los datos conocidos, preguntamos qué tan bien funciona cuando tiene que enfrentarse a datos que no utilizó para estimarse.

Análisis de límites extremos

También puede reestimarse el modelo bajo distintas combinaciones de controles. Si un resultado fundamental cambia de signo o desaparece cada vez que modificamos ligeramente la especificación, tenemos razones para desconfiar de su robustez.

G-computation

Finalmente, la simulación posterior permite construir cantidades contrafactuales del tipo: ¿cómo cambiaría \(I\) si elimináramos determinados rezagos cruzados o variables de transición? Así es posible expresar los resultados en términos de efectos promedio del tratamiento bajo la especificación causal adoptada.

¿En qué campos puede resultar útil?

El paquete nació alrededor de un problema estadístico, no de una disciplina particular. Por eso su campo potencial de aplicación es amplio.

Campo Ejemplos de pares de procesos
Salud pública Casos y mortalidad; hospitalizaciones y reingresos; vacunación y brotes.
Criminología Delitos y respuestas policiales; incautaciones y sobredosis.
Economía Entradas y salidas de empresas; patentes y citas; determinados conteos asociados a flujos comerciales.
Ecología Depredadores y presas; aparición y desaparición de especies; colonización y extinción local.
Ciencia política Protestas y respuestas gubernamentales; iniciativas legislativas y vetos.
Entornos digitales Publicaciones de desinformación y actividad posterior de verificación.

¿Qué ocurre bajo el capó?

Aunque el objetivo del paquete es ofrecer un flujo integrado, la infraestructura estadística es plenamente bayesiana allí donde se ajusta el modelo hurdle principal.

Componente Implementación
Muestreo Stan NUTS mediante cmdstanr
Regularización Horseshoe regularizado
Evaluación predictiva PSIS-LOO y ELPD
Combinación de modelos Pesos de predictive stacking
Convergencia \(\hat{R}\), ESS y divergencias
Diagnóstico LOO Valores de Pareto \(k\)

El código Stan tampoco constituye una caja negra: puede inspeccionarse mediante get_hurdle_model(), mientras que las cantidades generadas permiten obtener log-verosimilitudes por observación, predicciones posteriores y valores ajustados.

Empezar a utilizar bivarhr

El paquete puede instalarse desde GitHub, mientras que también dispone de distribución a través de CRAN.

# Instalación desde GitHub
devtools::install_github("isadorenabi/bivarhr")

# Instalar cmdstanr
install.packages(
  "cmdstanr",
  repos = c(
    "https://stan-dev.r-universe.dev",
    getOption("repos")
  )
)

cmdstanr::install_cmdstan()

# Paquetes opcionales para el conjunto completo
# de herramientas causales
install.packages(c(
  "RTransferEntropy",
  "bnlearn",
  "sensemakr",
  "CausalImpact",
  "vars",
  "openxlsx"
))

Un ajuste mínimo con dos rezagos y efectos cruzados en ambas direcciones puede escribirse de forma compacta:

fit <- fit_one(
  DT,
  k = 2,
  spec = "C",
  iter_warmup = 500,
  iter_sampling = 500,
  chains = 2
)

print(fit$fit$summary())

Si queremos comparar múltiples órdenes de rezago y configuraciones de la prior horseshoe, podemos construir una cuadrícula y dejar que el procedimiento de selección y stacking evalúe el conjunto:

hs_grid <- expand.grid(
  hs_tau0 = c(0.1, 0.5, 1.0),
  hs_slab_scale = c(1, 5),
  hs_slab_df = 4
)

bma_results <- select_by_bma(
  DT = DT,
  spec = "C",
  k_grid = 0:3,
  hs_grid = hs_grid,
  iter_warmup = 1000,
  iter_sampling = 1200,
  chains = 4,
  use_parallel = TRUE
)

print(bma_results$table)

El punto más interesante no es un modelo: es el flujo de trabajo

Es fácil describir bivarhr enumerando sus piezas: binomial negativa hurdle, horseshoe, Stan, PSIS-LOO, stacking, entropía de transferencia, redes bayesianas, modelos de Markov, VARX y análisis contrafactual.

Pero hacer solamente esa lista oculta lo más interesante del proyecto.

Prácticamente ninguno de esos métodos existe únicamente dentro de bivarhr. Lo particular es su intento de reunirlos alrededor de una secuencia coherente de preguntas.

¿Los ceros forman parte central del proceso? Entonces hay que modelarlos explícitamente. ¿Las dos variables evolucionan conjuntamente? Entonces no conviene estimarlas como mundos separados. ¿Hay demasiados predictores? Regularicemos. ¿No sabemos qué especificación elegir? Incorporémoslo a la incertidumbre predictiva. ¿Queremos hablar de causalidad? No dependamos de una única evidencia. ¿Encontramos un efecto? Intentemos romperlo con placebos, cambios de especificación y evaluación fuera de muestra.

Ésa es, en última instancia, la apuesta de bivarhr: que la solidez de una investigación aplicada no depende únicamente de utilizar una técnica estadística sofisticada, sino de construir un camino reproducible desde los datos hasta la conclusión y someter cada tramo de ese camino a comprobaciones independientes.

bivarhr es software de código abierto distribuido bajo licencia MIT. Disponible en CRAN y GitHub. Autor: José Mauricio Gómez Julián · ORCID.


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