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

25,965 views since December 2020

25,965 visitas desde diciembre de 2020

EnglishEspañol

Categoría: GitHub

  • Descubriendo las Ecuaciones Detrás de Tus Datos: Un Vistazo a la Librería EmpiricalDynamics en R

    Descubriendo las Ecuaciones Detrás de Tus Datos: Un Vistazo a la Librería EmpiricalDynamics en R

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

    Dinámica no lineal · Regresión simbólica · ODE · SDE

    ¿Qué ecuación está escondida en los datos? Una introducción a EmpiricalDynamics

    Un paquete de R para descubrir y evaluar ecuaciones diferenciales directamente a partir de series temporales, combinando diferenciación numérica robusta, regresión simbólica, modelización estocástica, validación temporal y un backend de alto rendimiento en Julia.

    EmpiricalDynamics · R · Julia · SymbolicRegression.jl · versión de desarrollo 0.1.13 · desarrollado por José Mauricio Gómez Julián · GitHub

    Estado del proyecto — agosto de 2026. La rama principal de GitHub se encuentra en la versión 0.1.13 y declara licencia GPL (≥ 3). La versión publicada actualmente en CRAN es 0.1.9, anterior a ese cambio de licencia.

    Tenemos una serie temporal: el PIB de un país, una población biológica, una temperatura, una tasa de interés, la concentración de una sustancia o la lectura de un sensor. Sospechamos que detrás de su movimiento existe alguna ley dinámica. El problema es que no sabemos cuál.

    Una estrategia consiste en elegir previamente una ecuación y estimar sus parámetros. Es lo habitual: suponemos una dinámica lineal, logística, exponencial o de alguna otra familia conocida y preguntamos qué valores de los parámetros ajustan mejor los datos.

    EmpiricalDynamics permite plantear también la pregunta inversa: ¿qué forma funcional es capaz de descubrir el propio algoritmo a partir de la dinámica observada?

    En lugar de restringirse desde el principio a \(\dot Z=\alpha+\beta Z\), una búsqueda simbólica puede explorar combinaciones de variables y operaciones matemáticas, generando distintas ecuaciones candidatas y comparando su calidad de ajuste con su complejidad.

    La idea fundamental

    El objetivo no es predecir simplemente el próximo dato mediante una caja negra. Es intentar recuperar una expresión matemática interpretable que describa la dinámica observada y después someter esa expresión a diagnósticos, simulaciones y pruebas de comportamiento.

    De estimar parámetros a descubrir ecuaciones

    Supongamos que conocemos de antemano la forma:

    \[ \frac{dZ}{dt} = \alpha+\beta Z. \]

    Entonces el problema consiste esencialmente en estimar \(\alpha\) y \(\beta\).

    Equation discovery plantea un problema más amplio:

    \[ \frac{dZ}{dt} = f(Z,\mathbf X;\boldsymbol{\theta}), \]

    donde conocemos las observaciones de \(Z\) y posiblemente de variables exógenas \(\mathbf X\), pero la propia función \(f(\cdot)\) también es desconocida.

    El algoritmo debe buscar simultáneamente una estructura funcional y sus constantes.

    Cuando el sistema es estocástico

    Muchos sistemas reales no evolucionan mediante una ley determinista perfecta. Incluso después de descubrir una estructura sistemática puede quedar una componente aleatoria cuya intensidad dependa del propio estado del sistema.

    Entonces la descripción natural pasa de una ODE a una ecuación diferencial estocástica:

    \[ dZ_t = f(Z_t,\mathbf X_t)\,dt + g(Z_t,\mathbf X_t)\,dW_t. \]

    Aquí \(f\) es el drift: la dinámica sistemática. \(g\) es la difusión: la intensidad del componente estocástico. \(W_t\) representa un proceso de Wiener.

    Descubrir una SDE implica, por tanto, resolver dos problemas: recuperar la ley del drift y recuperar la estructura de la difusión.

    La arquitectura: seis etapas que se pueden auditar

    Preprocesamiento. Estimar derivadas numéricas a partir de observaciones potencialmente ruidosas.

    Exploración. Examinar gráficamente relaciones, retratos de fase, superficies y posibles no linealidades.

    Descubrimiento simbólico. Buscar ecuaciones candidatas y construir una frontera entre ajuste y complejidad.

    Análisis de residuos. Preguntar qué estructura queda sin explicar y, cuando corresponde, construir la difusión de una SDE.

    Validación. Utilizar cross-validation temporal, simulación de trayectorias y análisis cualitativo de la dinámica.

    Salida. Generar ecuaciones LaTeX, tablas, gráficos y reportes destinados a documentación o publicación.

    El primer cuello de botella: calcular una derivada sin amplificar el ruido

    Para descubrir \[ \dot Z=f(Z,X) \] necesitamos primero alguna estimación de \(\dot Z\).

    Pero diferenciar numéricamente datos ruidosos es peligroso: la derivación amplifica precisamente las fluctuaciones de alta frecuencia que muchas veces querríamos tratar como ruido de medición.

    EmpiricalDynamics ofrece varias alternativas.

    Método Idea Uso natural
    TVR Regulariza la variación total de la derivada. Datos ruidosos, tendencias y posibles discontinuidades.
    Savitzky–Golay Ajustes polinomiales locales. Señales relativamente suaves donde interesa preservar picos.
    Smoothing spline Suavizado continuo antes de derivar. Procesos suaves con ruido.
    Diferencias finitas Aproximaciones locales directas. Datos limpios y suficientemente densos.
    Espectral Diferenciación en el dominio de frecuencias. Señales periódicas; requiere cuidado con el fenómeno de Gibbs.

    TVR: suavizar la derivada sin borrar toda la estructura

    El método recomendado por la documentación para muchas aplicaciones empíricas es Total Variation Regularization.

    De manera esquemática, busca:

    \[ \widehat{\dot Z} = \arg\min_{\dot Z} \left\| Z-\int_0^t \dot Z(\tau)\,d\tau \right\|_2^2 + \lambda \left\| \Delta\dot Z \right\|_1. \]

    El primer término obliga a que la derivada reconstruya adecuadamente la serie. El segundo penaliza una derivada excesivamente irregular.

    La implementación actual reescala internamente el problema para mejorar su acondicionamiento numérico y utiliza una cadena de solvers:

    1. CLARABEL

    Es el solver preferido actualmente para TVR y la primera opción de la cadena.

    2. SCS

    Proporciona una familia algorítmica alternativa si la primera solución no alcanza el estado deseado.

    3. OSQP

    Actúa como una tercera ruta de optimización cuando las anteriores no proporcionan una solución satisfactoria.

    Selección de \(\lambda\)

    select_lambda_cv_tvr() puede evaluar automáticamente una grilla de candidatos y reportar el estado de convergencia de los solvers.

    La paradoja interna de una SDE: un mejor drift puede destruir la evidencia de difusión

    Ésta es quizá la idea estadística más interesante del diseño.

    TVR mejora la estimación del drift precisamente mediante suavizado. Pero la difusión de una SDE se manifiesta en gran medida a través de fluctuaciones de alta frecuencia.

    Si utilizamos después los residuos de una derivada fuertemente regularizada para recuperar \(g\), podemos haber eliminado previamente buena parte de la información que queríamos medir.

    El conflicto

    TVR quiere limpiar la alta frecuencia para estimar el drift. La difusión vive precisamente en alta frecuencia. Un método que mejora la primera tarea puede empeorar la segunda.

    La solución: estimar difusión desde la variación cuadrática

    La implementación actual recomienda, cuando se utiliza TVR, no recuperar la difusión desde sus residuos sino volver a los incrementos observados.

    Para una SDE:

    \[ \frac{(\Delta Z)^2}{\Delta t} \approx g^2(X) + O(\Delta t). \]

    estimate_diffusion_qv() utiliza esta idea de variación cuadrática.

    Así, la estimación de \(g\) no depende de los residuos ya suavizados por TVR.

    Los valores individuales de \((\Delta Z)^2/\Delta t\) son naturalmente muy ruidosos, por lo que el procedimiento aplica internamente un suavizado mediante mediana móvil antes de ajustar la relación funcional.

    La evidencia del problema aparece en los propios recovery tests

    Configuración histórica Drift \(R^2\) Diffusion \(R^2\)
    Solver previo + difusión por residuos 0.864 0.591
    OSQP reescalado + residuos 0.887 0.070
    CLARABEL reescalado + residuos 0.841 0.005
    CLARABEL + variación cuadrática 0.841 0.985

    El punto no es que un solver “peor” fuese mejor. Es exactamente lo contrario: conforme el tratamiento de la derivada eliminaba mejor la fluctuación de alta frecuencia, una estimación de difusión basada en esos residuos perdía la señal que necesitaba.

    Volver a los incrementos crudos permite desacoplar ambos problemas.

    El corazón del paquete: regresión simbólica

    Una vez estimada la derivada, el algoritmo puede buscar expresiones capaces de explicar su comportamiento.

    En lugar de optimizar únicamente constantes, la búsqueda modifica también la estructura de las expresiones:

    \[ Z,\quad Z^2,\quad XZ,\quad \sin(X),\quad e^Z,\quad \frac{X}{Z},\quad \ldots \]

    El resultado no debería interpretarse simplemente como “la ecuación con menor error”.

    EmpiricalDynamics construye una frontera de Pareto donde aparecen ecuaciones con distintos compromisos entre ajuste y complejidad.

    Entre los criterios disponibles para elegir entre candidatos se encuentran AIC, BIC y MDL, además de mecanismos de selección sobre la propia frontera.

    search_result <- symbolic_search(
      data = data,
      response = "dZ",
      predictors = c("Z", "X"),
      backend = "r_genetic",
      max_complexity = 15,
      n_generations = 50,
      population_size = 100,
      n_runs = 3
    )
    
    plot_pareto_front(search_result)
    
    best_eq <- select_equation(
      search_result,
      criterion = "bic"
    )

    Si ya existe una teoría, no hay premio por ignorarla

    El paquete no presenta la búsqueda ciega como superior en toda situación.

    Si una teoría proporciona una forma funcional concreta, la documentación recomienda utilizarla directamente mediante fit_specified_equation().

    equation <- fit_specified_equation(
      "alpha + beta * Z + gamma * Z^2 + delta * X",
      data = data,
      derivative_col = "dZ",
      method = "levenberg-marquardt",
      start = list(
        alpha = 0,
        beta = 1,
        gamma = -0.01,
        delta = 0.5
      )
    )

    Ésta es una distinción metodológica importante: descubrimiento cuando desconocemos la estructura; estimación directa cuando poseemos una hipótesis estructural que queremos poner a prueba.

    Explorar antes de buscar

    explore_dynamics() permite examinar visualmente las relaciones antes de lanzar una búsqueda simbólica.

    Actualmente compara formas lineales, cuadráticas y cúbicas para los predictores, conserva el ajuste ganador, sus coeficientes, el rango donde fue estimado y los AIC de los modelos enfrentados.

    Esto importa porque una etiqueta como “cuadrática” no nos dice si la curva realmente cambia de dirección dentro del rango observado.

    Una cautela actual

    La propia Wiki reporta que, en simulaciones internas, esta comparación AIC clasifica una relación verdaderamente lineal como “linear” alrededor del 78 % de las veces. Por eso la etiqueta debe leerse como selección de modelo, no como medición infalible de la forma verdadera.

    Julia hace el trabajo evolutivo pesado

    El backend de alto rendimiento utiliza SymbolicRegression.jl.

    La arquitectura mantiene en R el flujo estadístico, los diagnósticos y la interfaz, mientras Julia puede encargarse de búsquedas evolutivas más costosas y paralelizables.

    El archivo inst/julia/symbolic_backend.jl define una configuración científica que controla, entre otras cosas:

    • tamaño de poblaciones;
    • número de iteraciones;
    • complejidad máxima;
    • penalización por falta de parsimonia;
    • operadores permitidos;
    • checkpoints;
    • y detección de determinadas constantes físicas.

    El backend actual reconoce como candidatos \(\pi\), \(e\), \(\varphi\), \(g\), \(c\), \(h\) y \(k_B\), incluyendo además algunas transformaciones simples de estas constantes.

    Esto permite, por ejemplo, reconocer que un coeficiente numérico descubierto está cerca de \(\pi\), en lugar de presentar únicamente una expansión decimal sin interpretación.

    GLS iterativo: la versión actual conserva toda la historia del ajuste

    Cuando la varianza condicional cambia con el estado, el paquete puede refinar el drift mediante un procedimiento GLS iterativo.

    Esquemáticamente:

    \[ r_i^{(k)} = \dot Z_i – \widehat f^{(k-1)}(Z_i,X_i), \]
    \[ w_i^{(k)} = \frac{1} {\widehat g^{(k)}(Z_i,X_i)^2}, \]

    y esos pesos modifican la siguiente estimación del drift.

    Versiones recientes corrigieron un detalle fundamental: el loop anterior no podía reconocer correctamente su propia convergencia cuando las constantes de una ecuación simbólica aparecían como literales.

    La implementación actual exige simultáneamente:

    Estabilidad del objetivo

    La deviance ponderada debe haber dejado de cambiar de forma material.

    Estabilidad de la función

    Las predicciones de dos iteraciones sucesivas también deben haberse aproximado suficientemente.

    Además, el resultado conserva converged, stop_reason, history, selected_iteration, las puntuaciones de selección y los candidatos excluidos.

    La selección por defecto entre las iteraciones utiliza blocked cross-validation con bloques contiguos y reestimación de las constantes.

    Los residuos son una pregunta, no un basurero

    Después de ajustar una ecuación, lo que queda sin explicar puede contener información sobre una especificación incompleta.

    residual_diagnostics() reúne varias pruebas:

    Prueba Qué examina
    Ljung–Box Dependencia serial restante.
    ARCH-LM Heterocedasticidad condicional.
    Breusch–Pagan Varianza relacionada con predictores.
    Jarque–Bera Desviaciones respecto de normalidad.
    Runs test Patrones no aleatorios remanentes.

    Validar una ecuación temporal sin dejar que mire el futuro

    Una serie temporal no debería ser validada como si sus filas fueran intercambiables.

    La implementación actual admite validación por bloques y esquemas rolling o sliding. En el modo rolling, las observaciones utilizadas para entrenamiento se encuentran antes de la ventana de prueba.

    cv <- cross_validate(
      equation,
      data = data,
      response = "dZ",
      k = 5,
      method = "rolling",
      horizon = 4,
      window = "expanding"
    )

    Esto parece un detalle obvio, pero no lo era en versiones anteriores. La 0.1.12 corrigió un defecto por el que la implementación rolling podía utilizar como entrenamiento observaciones posteriores a la ventana que pretendía validar.

    También se corrigieron otros problemas:

    • los bloques ahora cubren todas las filas en lugar de abandonar observaciones finales;
    • \(R^2\) se evalúa contra la media del conjunto de entrenamiento, no contra una media calculada después de conocer los datos de prueba;
    • los folds cuyo reajuste falla ya no desaparecen silenciosamente del promedio;
    • los pesos de observación se conservan al reestimar cada fold;
    • un GLM se vuelve a ajustar como GLM y no accidentalmente como una regresión gaussiana ordinaria.

    Una limitación importante de esa cross-validation

    Hay todavía una sutileza que la documentación actual hace explícita.

    Cuando la variable objetivo es una derivada calculada numéricamente, el propio \(\dot Z_t\) puede haber sido construido utilizando observaciones vecinas.

    Con TVR, incluso puede intervenir información de toda la serie.

    Por tanto, aunque el modelo de cada fold no se entrene con el futuro bajo el esquema rolling corregido, la derivada que se le entregó pudo haber sido calculada previamente usando esa información.

    Qué significa entonces el CV

    La propia documentación advierte que estas cifras pueden utilizarse para comparar ecuaciones candidatas bajo el mismo tratamiento, pero no deben confundirse con el error que esperaríamos al pronosticar una serie futura completamente nueva. La opción destinada a recalcular la derivada dentro de cada fold, refit_derivative, todavía no está implementada.

    Una ecuación no sólo debe ajustar puntos: también debe comportarse correctamente

    EmpiricalDynamics incorpora herramientas para estudiar propiedades cualitativas de la ecuación descubierta:

    • puntos fijos;
    • estabilidad;
    • bifurcaciones;
    • acotamiento;
    • y simulación completa de trayectorias.

    Ésta es una diferencia importante entre encontrar una regresión flexible y recuperar una dinámica plausible.

    Dos expresiones pueden presentar errores similares sobre la muestra y, sin embargo, producir retratos dinámicos completamente diferentes cuando se integran.

    Bifurcaciones bayesianas: una mejora reciente

    La versión 0.1.11 endureció de forma importante analyze_bifurcations().

    Para modelos que contienen draws posteriores, la función ya no reduce automáticamente toda la incertidumbre a un único vector de coeficientes. Puede barrer la distribución posterior y devolver distribuciones de puntos fijos.

    Además, comprueba que cambiar el parámetro de bifurcación cambie realmente las predicciones del objeto.

    Esto evita producir una tabla perfectamente formada pero científicamente vacía donde todos los valores del parámetro generan exactamente el mismo resultado porque la sustitución nunca llegó al mecanismo de predicción.

    En la 0.1.13 se añadió además ed_derivative_step(), que expone oficialmente el paso \(10^{-6}\) utilizado por la diferencia central en la clasificación de puntos fijos.

    Recovery tests: darle al algoritmo un mundo cuya ley ya conocemos

    La validación más directa de un algoritmo de equation discovery consiste en construir un mundo sintético donde conozcamos la ley verdadera, ocultársela al algoritmo y preguntarle si puede recuperarla.

    Esto no prueba causalidad en datos observacionales reales.

    Sí responde una pregunta previa indispensable: si la ley verdadera está presente en los datos bajo condiciones controladas, ¿el pipeline es capaz de encontrarla?

    El atractor de Lorenz

    Uno de los benchmarks utiliza el sistema caótico clásico:

    \[ \frac{dx}{dt}=10(y-x), \]
    \[ \frac{dy}{dt}=28x-xz-y, \]
    \[ \frac{dz}{dt}=xy-\frac{8}{3}z. \]
    Ecuación \(R^2\) frente a la dinámica verdadera
    \(dx/dt\) 0.937
    \(dy/dt\) 0.960
    \(dz/dt\) 0.914
    Promedio 0.937

    La Wiki aclara que estas cifras combinan el error de diferenciación TVR y la regresión simbólica, y que la búsqueda evolutiva es estocástica: distintos runs pueden producir resultados diferentes.

    El benchmark estocástico

    El segundo recovery test utiliza una SDE deliberadamente difícil:

    \[ dZ_t = \left[ 10\sin(X_t)-2.5Z_t^3 \right]dt + \left[ 0.10+0.06|X_t| \right]dW_t. \]

    Con 5.000 observaciones, \(\Delta t=0.005\) y un SNR documentado de aproximadamente \(0.29\), los resultados reportados son:

    Componente \(R^2\) RMSE Procedimiento
    Drift 0.841 0.547 TVR + GLS iterativo
    Diffusion 0.985 0.063 Variación cuadrática
    Cómo leer los benchmarks

    Son recovery tests sobre sistemas sintéticos con verdad conocida. Demuestran que el procedimiento puede recuperar esas estructuras bajo las condiciones ensayadas. No garantizan que una ecuación encontrada en datos observacionales sea la verdadera ley causal del sistema.

    Descubrir una ecuación no equivale a descubrir causalidad

    Ésta es una frontera importante.

    Una expresión simbólica puede reproducir extraordinariamente bien una relación observada y seguir reflejando variables omitidas, confundimiento, simultaneidad, errores de medición o una estructura que sólo funciona bajo determinado régimen.

    La regresión simbólica responde principalmente: ¿qué estructura matemática es consistente con la dinámica observada?

    Convertir esa estructura en una afirmación causal requiere información y razonamiento adicionales.

    Instalación: CRAN o versión de desarrollo

    La versión publicada en CRAN puede instalarse directamente:

    install.packages("EmpiricalDynamics")

    Para utilizar el estado más reciente del repositorio:

    remotes::install_github(
      "IsadoreNabi/EmpiricalDynamics"
    )

    El backend Julia se configura después desde R:

    library(EmpiricalDynamics)
    
    setup_julia_backend()

    El metadata actual del paquete declara R 4.0.0 o posterior y Julia 1.6 o posterior como requisito del sistema para el backend. El README recomienda actualmente Julia 1.9 o posterior; utilizar una versión reciente de Julia satisface ambas indicaciones.

    La cuestión metodológica de fondo

    La tentación en equation discovery es imaginar una máquina que recibe una tabla y devuelve “la ley de la naturaleza”.

    EmpiricalDynamics es más interesante precisamente cuando se lo entiende de otra manera.

    La búsqueda simbólica constituye solamente una parte de un procedimiento mucho más largo.

    Primero hay que construir una derivada defendible. Después explorar la geometría de la relación. Luego buscar o especificar ecuaciones. Después mirar lo que quedó en los residuos. Si existe estructura estocástica, separar drift y difusión. Luego comprobar comportamiento cualitativo y simular trayectorias. Finalmente evaluar qué tanto de la conclusión sobrevive fuera del ajuste inmediato.

    Y cada uno de esos pasos puede fallar de una manera distinta.

    Ésa es la contribución más interesante de EmpiricalDynamics: no tratar el descubrimiento de ecuaciones como un concurso donde gana la expresión con el \(R^2\) más alto, sino como un problema de inferencia dinámica completo. La ecuación debe ser parsimoniosa, sobrevivir diagnósticos, reproducir propiedades cualitativas y distinguir correctamente la estructura determinista de la estocástica. Sus recovery tests muestran que el pipeline puede redescubrir dinámicas conocidas; sus revisiones recientes muestran algo igualmente importante: cuando una métrica, una validación o un barrido de bifurcaciones no significaba exactamente lo que afirmaba significar, el comportamiento fue auditado y corregido. El producto final no es simplemente una fórmula encontrada por una computadora. Es una forma más disciplinada de preguntar: ¿qué ecuación es realmente compatible con la dinámica que observamos, y qué evidencia tenemos para creerle?

    EmpiricalDynamics es desarrollado por José Mauricio Gómez Julián. La rama de desarrollo actual declara licencia GPL (≥ 3). El código fuente y el historial de cambios están disponibles en GitHub, y la documentación matemática, los recovery tests y las guías de uso se encuentran en la Wiki de EmpiricalDynamics.

  • La Forma de Una Crisis: Teoría General del Ciclo Capitalista

    La Forma de Una Crisis: Teoría General del Ciclo Capitalista

    Publicación de tesis · Economía Política

    La forma de una crisis

    Una teoría general de los ciclos de la dinámica del sistema capitalista a largo plazo — ya disponible en inglés

    Cada tantos años se cuenta el mismo relato dos veces. Primero, que la economía entró en una era nueva en la que las reglas viejas ya no rigen. Después, unos meses más tarde, que lo ocurrido fue un accidente: un choque, una burbuja, un virus, una guerra. Las dos versiones comparten una premisa tan silenciosa que casi nunca se examina: que el auge y la caída son sucesos separados, y que una buena teoría de los años buenos no necesita ser también una teoría de los malos.

    La tesis que se publica hoy sostiene lo contrario, y se toma el trabajo de medirlo. El auge y la crisis no son dos fenómenos sino dos momentos de uno solo: la crisis de sobreproducción es el mecanismo mediante el cual el capitalismo restablece las condiciones de una acumulación que su propio éxito había erosionado. La desvalorización despeja el terreno; se introducen, forzadamente, nuevos métodos de producción; la rentabilidad se recupera sobre las ruinas. La recuperación no es la negación de la crisis. Es su producto.

    Esa afirmación es vieja. Lo nuevo aquí es el intento de volverla decidible: enunciarla en una forma que los datos trimestrales de la economía de los Estados Unidos entre 1992 y 2024 hubieran podido contradecir, y comprobar después si en efecto la contradicen.

    Tres preguntas, y por qué el orden importa

    La investigación se organiza alrededor de un objetivo general —analizar el comportamiento cíclico de largo plazo del capitalismo estadounidense a la luz de las teorías económicas dominantes— y tres específicos, formulados estrictamente en este orden:

    • ¿Qué teoría explica y predice mejor? No cuál es más elegante, ni cuál se enseña más, sino cuál sobrevive al ser puesta frente a los datos.
    • ¿Qué factores generan el ciclo? Económicos y extraeconómicos por igual: la tesis se niega de antemano a tratar las guerras y la política monetaria como ruido situado fuera de un mecanismo económico limpio.
    • ¿Bajo qué reglas interactúan esos factores? Una lista de causas no es una teoría. La teoría está en la gramática que las liga.

    El orden no es decorativo. Buena parte de la economía aplicada responde la tercera pregunta con maquinaria tomada en préstamo de una teoría que nunca sometió a la primera. Acá la selección del marco es ella misma un resultado, defendido antes de ser usado.

    Cinco familias de una discusión antigua

    Antes de medir nada, la tesis levanta el mapa del terreno. El pensamiento económico sobre el ciclo se ordena en cinco grupos: las escuelas no heterodoxas pre-Kondratieff; la escuela de Kondratieff; las escuelas marginalistas y neoclásicas post-Kondratieff; las escuelas heterodoxas; y la visión historiográfica de las ondas largas, que lee el ciclo desde los archivos antes que desde las ecuaciones.

    Con ese mapa a la vista se dirimen —no se resumen— tres disputas de larga data. ¿La crisis se origina en la sobreproducción o en el subconsumo? ¿La emisión sostenida de crédito es síntoma de recuperación, o del agotamiento de las condiciones que la hicieron posible? ¿Existe realmente una relación inversa entre inflación y desempleo, o su apariencia es un artefacto de la precariedad del mercado laboral? Cada una recibe respuesta, y cada respuesta tiene consecuencias más adelante, cuando se especifica el modelo.

    Un marco que enuncia sus propias condiciones de fracaso

    Una parte sustancial del aparato teórico se dedica a una caracterización materialista del método dialéctico: sus categorías fundamentales, una ontología marxista construida desde una gnoseología metalógica, y un tratamiento explícito de la verificación, la falsación y la decidibilidad. El propósito es poco vistoso e imprescindible: fijar de antemano qué proposiciones de la teoría son empíricamente decidibles y cuáles son interpretativas. Sin esa frontera, ninguna cantidad de estadística posterior puede decir qué fue lo que se puso a prueba.

    Diez perillas, siete de ellas internas

    El núcleo empírico es un modelo lineal generalizado bayesiano del crecimiento del producto real estadounidense, estimado con Monte Carlo hamiltoniano y validado cruzadamente contra competidores de aprendizaje automático y aprendizaje profundo. Retiene trece coeficientes repartidos en diez factores. Siete son económicos:

    FactorQué registra
    Tasa media de ganancia neta (ARoP)La variable central del proceso de acumulación, y aquella cuya tendencia de largo plazo la teoría predice.
    Elasticidad de la tasa bruta de plusvalía a la composición orgánica media del capitalCómo responde la explotación de la fuerza de trabajo cuando cambia la estructura técnica del capital.
    Inversión fija no residencialEl ritmo de la acumulación en el sector productivo; la bisagra entre el auge y la crisis.
    Ratio inventarios/ventasLa distancia entre producir valor y realizarlo en el mercado.
    S&P 500La financiarización, que entra mediante un spline cúbico natural con tres grados de libertad.
    Crédito al sector privado no financieroEl sistema de crédito como acelerador y como freno, con spline de dos grados de libertad.
    Gasto capitalista en I+DEl impulso innovador; el segundo coeficiente más grande del modelo.

    Y tres son extraeconómicos: el gasto militar (con spline de tres grados de libertad), el superávit o déficit federal y la tasa efectiva de fondos federales. Su presencia no es una concesión al realismo. Se sigue del argumento de que una economía imperial contrarresta la tendencia decreciente de su propia tasa de ganancia por medios que no son internos a sus cuentas nacionales.

    La tasa media de ganancia carga el cuarto coeficiente más alto de los trece —detrás sólo del intercepto, del gasto en I+D y de una función base del S&P 500 splineado. La conclusión que el autor extrae de su comportamiento merece citarse en sustancia: lo que es favorable al proceso global de acumulación de capital no es por ello favorable a la dinámica del crecimiento agregado. No son la misma magnitud, y tratarlas como una sola es precisamente la confusión que el ciclo castiga.

    Repárese también en lo que hacen los splines. Tres de los diez factores no se dejaban acomodar en una recta. Eso no es una nota técnica al pie: es el primer indicio cuantitativo de que la interacción de estos factores involucra umbrales y puntos de giro antes que una proporcionalidad estable.

    No es azaroso. Es caótico.

    «Impredecible» y «azaroso» no son sinónimos, y la diferencia decide qué clase de ciencia puede ser la economía. Un sistema azaroso no tiene estructura interna que encontrar. Uno caótico está rígidamente determinado y aun así resulta impredecible a horizontes largos, porque diferencias arbitrariamente pequeñas en las condiciones iniciales se separan de manera exponencial.

    Tres mediciones ubican a la economía estadounidense en la segunda categoría. El exponente de Lyapunov es positivo (aproximadamente $0{,}0515$): las perturbaciones pequeñas se amplifican en lugar de disiparse. La dimensión de correlación no es entera ($3{,}32798$): el atractor reconstruido por el teorema de Takens tiene estructura fractal, patrones que se repiten a distintas escalas de tiempo y magnitud —que es lo que significa «cíclico, pero no periódico» cuando se lo enuncia con precisión. Y el análisis cuantificado de recurrencia encuentra un determinismo alto junto a variabilidad en la laminaridad y en la longitud máxima de las líneas diagonales: estructuras deterministas subyacentes que ellas mismas evolucionan.

    $\lambda > 0 \quad\text{y}\quad D_2 = 3{,}32798 \notin \mathbb{Z}$

    Leídas en conjunto, estas mediciones dicen algo que a un pronosticador debería resultarle aleccionador y a un teórico, alentador. El pronóstico a horizonte largo no es meramente difícil: está acotado estructuralmente. Pero la estructura que lo acota es real, estable y medible —que es exactamente lo que una teoría del ciclo necesita para tener algo que explicar.

    La forma del tiempo

    El instrumento más inusual de la tesis es topológico. La idea consiste en dejar de preguntar cuán grandes son los números y empezar a preguntar qué observaciones pueden ver a cuáles. Se convierte la serie en un grafo de visibilidad dirigido —un enlace de un trimestre a otro cuando el segundo es visible desde el primero por encima de los datos intermedios— y se estudia la estructura de orden resultante.

    Sobre ese grafo se construyen dos topologías, y discrepan de un modo informativo.

    • La topología de Alexandrov, más gruesa, construida sobre la alcanzabilidad temporal, resulta conexa. Al nivel de su estructura de orden la economía es globalmente una sola pieza: cada observación está ligada a todas las demás por cadenas de visibilidad temporal. No hay trimestre que quede aparte.
    • La topología Nada, más fina, está localmente fragmentada: seis componentes bajo el grafo de visibilidad natural, treinta y seis bajo el horizontal. Al acercar la lente, el tejido muestra costuras: discontinuidades estructurales al nivel de las vecindades cerradas.

    Unidad global y ruptura local a la vez. Esa dualidad no es una contradicción a resolver; es el objeto que se está describiendo. Y una tercera medición le da dirección al conjunto: el análisis bitopológico arroja $D = +4$, es decir que las expansiones generan más visibilidad temporal que las contracciones. El ciclo no es simétrico en el tiempo. El crecimiento se acumula de manera gradual y a la vista; el derrumbe ocurre de golpe y a ciegas. Pasada al revés, la película es reconociblemente la película equivocada.

    ⚠️ Por qué no hay que «limpiar» las crisis

    Hay una costumbre en el trabajo aplicado que consiste en tratar los valores extremos como contaminación y suavizarlos mediante imputación discontinua. Aquí se muestra que esa costumbre es un error de categoría con un precio medible. Las fluctuaciones extremas de la crisis de 2020 pertenecen a un bloque conexo incluso bajo la topología más fina; cortarlas es una ruptura topológica, no una operación de limpieza. La tesis reporta la consecuencia de manera directa: los modelos ajustados después de esa imputación tuvieron un desempeño peor, porque se estaban usando predictores adecuados a un fenómeno —el crecimiento del producto real— para predecir otro cualitativamente distinto: el crecimiento del producto real una vez que se le extrajo la crisis. Las crisis no son ruido alrededor del ciclo. Son el ciclo.

    La gramática del ciclo

    La tercera pregunta recibe una respuesta de siete partes. Los factores interactúan mediante retroalimentación (la tasa de ganancia moldea la inversión, la inversión moldea la composición orgánica del capital, que retroalimenta la tasa de ganancia); rezagos temporales (la I+D y la inversión fija rinden con demora, y la demora es ella misma generadora de ciclo); no linealidad (umbrales y cambios de régimen, razón por la cual tres factores necesitaron splines); caos determinista; interdependencia sectorial entre el departamento que produce medios de producción y el que produce medios de consumo; estructura topológica, conexidad global con fragmentación local; e influencia del contexto global, que es la vía por la cual el gasto militar y el S&P 500 entran en una cuenta nominalmente doméstica.

    La afirmación que unifica todo esto es que cada fase del ciclo contiene el germen de su propia negación. Los nuevos métodos de producción introducidos durante la crisis sientan los cimientos del auge siguiente; la sobreacumulación del auge prepara el terreno de la crisis siguiente. La innovación al principio detiene la caída de la tasa de ganancia y termina por profundizarla, por la vía del modo en que el grado de explotación de la fuerza de trabajo responde, con el tiempo, a los mismos métodos introducidos para elevarlo.

    Para qué sirve un ciclo

    La tesis cierra con una pregunta que la mayoría de los tratamientos jamás formula. Si el ciclo es un mecanismo, ¿qué es lo que consigue? Dos respuestas, a distinta profundidad. Su fin práctico intermedio es reiniciar el proceso de acumulación de capital una vez que la inestabilidad alcanzó un nivel crítico —esto el mecanismo lo logra, repetidamente, a un costo que se reparte de manera desigual. Su fin práctico definitivo es sentar las condiciones materiales y espirituales de una reorganización de la estructura productiva fundamental de la sociedad, capaz de una estabilidad mayor que la que el modo de producción capitalista puede alcanzar dentro de sus propios límites.

    Qué establece esto, y qué no

    La evidencia respalda la afirmación de que la teoría económica marxista clásica posee la mayor capacidad explicativa y predictiva sobre los ciclos de largo plazo entre las teorías aquí examinadas, sobre esta economía y en este período. Es un resultado comparativo sobre los Estados Unidos entre 1992 y 2024, con datos trimestrales: no es una prueba universal ni un pronóstico. La tesis es explícita respecto del costo de sus propios datos: la tasa media de ganancia y la tasa media de plusvalía sólo estuvieron disponibles con frecuencia anual hasta 2020, y completar las series hasta 2024 exigió técnicas de desagregación temporal y de predicción, lo que amplía la banda de incertidumbre alrededor de los trimestres más recientes. El alcance filosófico, histórico, conceptual y estadístico de cada resultado se distingue en el texto, y los resultados desfavorables a las hipótesis se reportan junto a los favorables.

    Sobre esta edición

    Esta es la edición en inglés de una tesis escrita originalmente en español y presentada ante la Universidad Latina de Costa Rica para optar por el grado de Licenciatura en Economía. Es interdisciplinaria por construcción: se apoya en la economía política marxista, el materialismo dialéctico e histórico, la historia y la historiografía del pensamiento económico, la filosofía y la metodología de la ciencia, la econometría, la estadística bayesiana, la teoría de sistemas complejos y la topología.

    La edición incluye una Nota sobre la traducción que fija la versión de aquellos términos cuyo uso en español es técnico y no intercambiable con sus cognados ingleses más cercanos —gnoseología, superación, onda larga, demanda solvente, técnica— y consigna las ediciones de las que se toman las citas, incluidas las dos ediciones distintas, inglesa y española, del diccionario filosófico soviético, que se citan bajo transliteraciones diferentes porque son libros diferentes con paginación diferente.

  • topologyR: Convertir Series Temporales en Patrones Espaciales Para Poner a Prueba Las Hipótesis Ocultas de Tus Modelos

    topologyR: Convertir Series Temporales en Patrones Espaciales Para Poner a Prueba Las Hipótesis Ocultas de Tus Modelos

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

    Topología · Series temporales · Grafos de visibilidad

    Antes de suavizar una serie, preguntá si realmente es una sola pieza

    topologyR transforma una serie temporal en un grafo, el grafo en un espacio topológico y su conectividad en una prueba previa sobre la estructura que estamos a punto de modelar.

    topologyR · R · Rcpp · Topological Data Analysis · desarrollado por José Mauricio Gómez Julián · GitHub

    Hay una costumbre extraordinariamente común en análisis cuantitativo: tomar una serie temporal y ajustarle una curva suave. Puede ser un spline, una interpolación, una tendencia de largo plazo, un kernel o algún método semejante.

    Pero todos esos procedimientos comparten una suposición previa: que estamos mirando una sola estructura continua.

    ¿Y si la serie contiene fracturas estructurales? ¿Y si aquello que el calendario presenta como una secuencia única es, desde la estructura topológica inducida por los datos, una colección de componentes separados?

    En ese caso, aplicar una única operación de suavizado global puede imponer una conexión entre regiones que el propio análisis estructural no respalda.

    topologyR fue construido alrededor de una idea sencilla: examinar esa estructura antes de elegir el modelo.

    La pregunta previa

    Antes de preguntar qué spline, tendencia o interpolación se ajusta mejor, topologyR plantea otra pregunta: ¿la topología inducida por nuestra serie aparece como una sola componente conectada o como varias?

    De números a formas: el pipeline completo

    El procedimiento transforma progresivamente una serie numérica en un objeto topológico.

    Serie temporal \(x_1,x_2,\ldots,x_n\)
    Grafo de visibilidad relaciones geométricas entre observaciones
    Espacio topológico vecindades, base y conectividad

    La arquitectura puede resumirse en tres etapas.

    Construir un grafo a partir de la geometría de la serie temporal mediante visibilidad horizontal o natural.

    Construir una topología sobre los vértices del grafo utilizando vecindades cerradas y la construcción de Nada.

    Calcular la conectividad del espacio resultante y utilizar sus componentes para caracterizar la estructura global.

    Paso 1: convertir una serie temporal en un grafo

    Imaginemos una serie dibujada como una cadena de montañas y valles. Cada observación es un punto a cierta altura.

    La pregunta de un visibility graph es literalmente: ¿qué puntos pueden “verse” entre sí?

    Horizontal Visibility Graph — HVG

    Dos observaciones \(x_i\) y \(x_j\) son horizontalmente visibles cuando todas las observaciones intermedias se encuentran por debajo de ambas.

    \[ x_k < \min(x_i,x_j) \qquad \forall\, i

    Es una regla simple que captura la arquitectura de máximos y mínimos de la serie.

    El HVG puede construirse en tiempo lineal y produce un grafo relativamente parsimonioso.

    Natural Visibility Graph — NVG

    El NVG utiliza una condición geométrica más permisiva. Dos puntos están conectados si todas las observaciones situadas entre ambos quedan por debajo de la recta que los une.

    El resultado suele ser un grafo más denso y rico en conexiones.

    Según la arquitectura del paquete, el NVG contiene al HVG como subgrafo y presenta complejidad esperada del orden de \(O(n\log n)\).

    Una propiedad importante

    HVG y NVG son construcciones sin parámetros de escala que ajustar: no requieren escoger un bandwidth, un \(\varepsilon\), un radio ni un threshold arbitrario para decidir qué observaciones están conectadas. La estructura proviene de la geometría de la propia serie.

    Paso 2: del grafo a una topología

    Hasta aquí seguimos en teoría de grafos. Un grafo nos dice qué vértices están unidos mediante aristas.

    topologyR da un paso adicional y construye un espacio topológico finito.

    La construcción sigue el enfoque atribuido en la documentación a Nada, El Atik y Atef.

    Para cada vértice \(v\), se forma su vecindad cerrada:

    \[ N[v] = \{v\} \cup \{u : u\sim v\}. \]

    Es decir: el vértice y todos sus vecinos directos.

    Esas vecindades forman una subbase.

    Después:

    • las intersecciones finitas generan una base;
    • las uniones arbitrarias de elementos de esa base forman la topología.

    El resultado es una familia de subconjuntos que satisface los axiomas topológicos estándar.

    ¿Qué significa eso en lenguaje plano?

    Podemos pensar en las vecindades como una primera descripción de qué puntos pertenecen estructuralmente cerca de cuáles.

    Las intersecciones refinan esa información: conservan aquello en lo que distintas vecindades coinciden.

    Las uniones permiten construir regiones mayores a partir de esos bloques.

    topologyR utiliza así la arquitectura local del grafo para construir una noción global de proximidad y separación.

    Paso 3: ¿una componente o varias?

    El objetivo final es estudiar la conectividad topológica.

    Un espacio es conectado cuando no puede separarse en dos conjuntos abiertos disjuntos, no vacíos, cuya unión sea todo el espacio.

    \[ X \neq U\sqcup V \qquad \text{con } U,V\neq\varnothing \text{ abiertos} \]

    Para espacios finitos, la documentación se apoya en resultados clásicos de McCord y Stong y utiliza el preorden de especialización para obtener los componentes.

    Lo decisivo computacionalmente es que la conectividad puede calcularse directamente a partir de la base, sin enumerar necesariamente toda la topología.

    La regla de decisión

    Dentro del marco metodológico propuesto por el paquete, la conectividad se transforma en una puerta previa a la modelización.

    Topología conectada

    La estructura inducida por la serie es compatible con tratar los datos como una unidad global dentro de este criterio. Métodos continuos globales pueden considerarse metodológicamente admisibles.

    Topología desconectada

    La estructura aparece fragmentada. El paquete propone respetar los componentes resultantes y considerar modelización, imputación o análisis separados por régimen.

    Entre los métodos cuyo uso puede depender de esta decisión se encuentran splines, kriging, interpolaciones polinomiales, kernels y determinadas técnicas globales de suavizado.

    Global y local no son la misma cosa

    Una fragmentación global no vuelve inútil toda propiedad calculada sobre la serie.

    La documentación distingue entre propiedades globales y propiedades locales.

    Propiedades globales

    Tendencias seculares, medidas sobre toda la trayectoria, sincronización global o estadísticas que dependen simultáneamente del conjunto completo de observaciones.

    Propiedades locales

    Volatilidad de ventanas cortas, cambios punto a punto o autocorrelaciones locales pueden seguir estudiándose dentro de cada componente.

    La información topológica sirve entonces no sólo para decir “sí” o “no”, sino también para indicar dónde termina una región y comienza otra.

    El tiempo tiene dirección

    Hasta ahora hemos tratado las aristas del grafo como no dirigidas.

    Pero una serie temporal no es una nube de puntos. Existe un antes y un después.

    Con directed = TRUE, topologyR orienta las aristas desde la observación anterior hacia la posterior.

    El resultado es un directed acyclic graph —DAG— cuyo orden natural viene dado por el tiempo.

    Una serie, dos topologías

    Sobre ese grafo dirigido pueden construirse dos estructuras de vecindad:

    \(\tau^{+}\) topología forward: qué estructura vemos mirando hacia el futuro
    \(\tau^{-}\) topología backward: qué estructura vemos mirando hacia el pasado

    El par \[ (X,\tau^{+},\tau^{-}) \] constituye, dentro de esta construcción, un espacio bitopológico.

    La documentación conecta esta arquitectura con la noción de bitopología introducida por Kelly.

    Irreversibilidad como asimetría topológica

    Si un proceso temporal fuese perfectamente simétrico hacia adelante y hacia atrás, esperaríamos que ambas topologías fueran estructuralmente muy similares.

    Si la dinámica posee una flecha temporal, pueden divergir.

    topologyR cuantifica esa divergencia mediante varias medidas.

    Component irreversibility

    Compara el número de componentes conectadas de \(\tau^{+}\) y \(\tau^{-}\).

    Base irreversibility

    Compara los tamaños de las bases forward y backward.

    Asymmetry direction

    Conserva el signo de la diferencia y permite identificar en qué dirección temporal aparece mayor conectividad.

    Reversibilidad ideal

    Una dinámica perfectamente simétrica debería producir estructuras forward y backward equivalentes bajo el criterio considerado.

    Un ejemplo intuitivo: expansiones lentas y contracciones bruscas

    Pensemos en un ciclo económico donde la producción crece gradualmente durante años y luego cae violentamente en pocos trimestres.

    Geométricamente, ambas direcciones temporales no “ven” exactamente lo mismo.

    Durante una expansión gradual, la visibilidad hacia adelante puede mantenerse durante trayectorias relativamente largas.

    Después de una caída abrupta, la geometría hacia atrás puede quedar más fragmentada.

    Dentro de la interpretación propuesta por topologyR, esto debería generar:

    \[ C_{+} < C_{-}, \]

    es decir, menos componentes forward que backward y, por tanto, una dirección de asimetría positiva bajo la convención del paquete.

    Una tercera capa: la topología de Alexandrov

    El grafo dirigido permite construir también una topología basada en alcanzabilidad.

    Si desde un vértice \(v\) podemos llegar a otro vértice siguiendo las aristas dirigidas, ambos quedan relacionados por el orden inducido por el DAG.

    La topología de Alexandrov, \(\tau_A\), utiliza precisamente esa relación.

    Para cada vértice, su abierto mínimo contiene los puntos alcanzables desde él.

    \[ U_v = \{u : v \leadsto u\}. \]

    La documentación establece además una relación estructural importante:

    \[ \tau_A \subseteq \tau^{+}_{\text{Nada}}. \]

    La topología de Alexandrov captura principalmente la estructura de orden; la construcción de Nada puede generar información adicional mediante el cierre por intersecciones.

    ¿Cuánta información adicional aporta Nada?

    Una forma muy simple de verlo es comparar los tamaños de ambas bases:

    \[ \left|B_{\text{Nada}}\right| – \left|B_A\right|. \]

    Una diferencia grande indica que las operaciones de cierre de la construcción de Nada están generando una estructura sustancialmente más rica que la mera relación de alcanzabilidad.

    Una diferencia pequeña indica que la estructura de orden ya captura buena parte de la información topológica disponible bajo esta construcción.

    ¿Pero no puede explotar el número de conjuntos abiertos?

    Sí. Enumerar una topología finita completa puede resultar exponencial.

    Ésta no es una peculiaridad de R ni una implementación deficiente: es una propiedad combinatoria del problema.

    topologyR evita depender de esa enumeración para su decisión principal.

    Según la documentación, la conectividad se calcula sobre la base mediante el preorden de especialización con complejidad del orden de

    \[ O\!\left( n^2 \left\lceil \frac{B}{64} \right\rceil \right). \]

    Bitsets, C++ y operaciones a nivel de máquina

    El backend utiliza Rcpp y representa subconjuntos como arrays compactos de palabras de 64 bits.

    De ese modo, operaciones de conjuntos pueden ejecutarse como instrucciones binarias de bajo nivel.

    Hasta 64 puntos

    Una sola palabra de 64 bits puede representar el subconjunto completo.

    Hasta 128

    El backend utiliza dos palabras mediante despacho especializado en compilación.

    Hasta 192

    Tres palabras permiten mantener operaciones especializadas sin bucles generales.

    Tamaños mayores

    Una ruta dinámica permite manejar series arbitrariamente mayores, complementada con OpenMP donde esté disponible.

    El paquete incorpora además límites como max_base_sets y max_open_sets para detener de forma transparente operaciones de cierre que entren en regiones demasiado costosas.

    El caso de prueba: el ciclo económico estadounidense

    El trabajo acompañante aplica la metodología a 129 observaciones trimestrales de crecimiento real del PIB de Estados Unidos entre 1992 y 2024.

    El análisis bitopológico reporta una dirección de asimetría positiva, consistente con la hipótesis de expansiones más graduales y contracciones más abruptas.

    La topología no dirigida divide además la serie en seis componentes conectadas.

    Un detalle particularmente interesante aparece alrededor de la pandemia: la contracción de COVID-19 y el rebote posterior forman un único episodio topológico dentro de ese análisis.

    La geometría de visibilidad interpreta así la caída y recuperación en V como una sola estructura, en lugar de dos cambios completamente independientes.

    Qué produce topologyR

    No intenta pronosticar el próximo trimestre. No intenta estimar una elasticidad. Su resultado central es una clasificación estructural de la serie y de sus posibles fronteras internas.

    topologyR no es un sustituto de persistent homology

    El paquete se sitúa en una región específica de Topological Data Analysis.

    Bibliotecas como GUDHI, Ripser, TDAstats o scikit-TDA estudian estructuras multiescala mediante homología persistente.

    Allí interesan invariantes como:

    \[ \beta_0,\qquad \beta_1,\qquad \beta_2,\ldots \]

    donde \(\beta_0\) describe componentes conectadas, \(\beta_1\) ciclos o agujeros unidimensionales y \(\beta_2\) cavidades de dimensión superior.

    topologyR se concentra deliberadamente en \(\beta_0\): conectividad, aplicada a series unidimensionales mediante topologías inducidas por grafos.

    Pregunta Herramienta más natural
    ¿La serie aparece estructuralmente como una o varias componentes? topologyR
    ¿Existen ciclos, cavidades o estructuras persistentes a múltiples escalas? Persistent homology / TDA general
    ¿Existe una asimetría topológica entre pasado y futuro? Modo dirigido de topologyR
    ¿Queremos profundizar después de identificar componentes? Flujo híbrido: topologyR + persistent homology

    Los límites importan

    La documentación también identifica explícitamente dónde debe tenerse cuidado.

    HVG y NVG pueden discrepar

    El grafo elegido modifica la topología. Como NVG es más denso, normalmente tenderá a producir menos fragmentación que HVG.

    El muestreo importa

    Una frecuencia demasiado baja puede hacer aparecer separaciones que reflejen ausencia de observaciones más que una fractura estructural.

    El ruido también importa

    Pequeños solapamientos geométricos pueden generar conexiones que desaparecían bajo otra realización o frecuencia de muestreo.

    Sólo \(\beta_0\)

    La metodología está orientada a conectividad y fragmentación, no a capturar todas las estructuras topológicas posibles.

    Por eso, la propia documentación recomienda interpretar la conectividad como evidencia prima facie, especialmente en casos cercanos a la frontera.

    La matemática también fue formalizada

    Una característica poco habitual del proyecto es que el teorema central relacionado con la extensión dirigida de la construcción de Nada fue formalizado en Lean 4 utilizando Mathlib.

    Eso significa que una parte central de la arquitectura matemática no se apoya únicamente en una demostración escrita convencional, sino que también ha sido codificada en un sistema de demostración formal y verificada por el kernel del asistente.

    La documentación señala además que la implementación es compatible con CRAN, pasa R CMD check --as-cran y contiene 68 pruebas unitarias que abarcan los grafos de visibilidad, construcción topológica, conectividad, topología dirigida, Alexandrov y análisis bitopológico.

    Instalación y recursos

    El paquete requiere R 4.0.0 o posterior junto con Rcpp y ggplot2.

    El proyecto dispone de repositorio, wiki y artículo acompañante:

    El artículo acompañante se titula “Bitopological Spaces from Directed Graphs: Extending the Nada Construction to Capture Temporal Irreversibility”.

    La cuestión metodológica de fondo

    Gran parte de la modelización cuantitativa comienza después de una decisión que raramente se formula en voz alta: tratar los datos como una unidad coherente.

    Ajustamos una curva. Interpolamos un hueco. Calculamos una tendencia secular. Aplicamos un kernel a toda la muestra.

    topologyR intenta trasladar esa decisión desde el terreno de la costumbre al de una prueba estructural explícita.

    Primero observa las relaciones geométricas. Después construye la topología. Finalmente pregunta qué componentes emergen.

    Sólo entonces llega la discusión sobre qué modelo utilizar.

    Ésa es la propuesta central de topologyR: antes de imponer continuidad, suavidad o una estructura global sobre una serie, examinar si la topología inducida por sus relaciones de visibilidad respalda tratarla como una sola pieza. Y cuando incorporamos la dirección temporal, la misma maquinaria permite comparar la estructura hacia el futuro y hacia el pasado, convirtiendo la asimetría entre ambas en una caracterización topológica de irreversibilidad. No reemplaza a toda la topological data analysis; ocupa un lugar mucho más concreto: servir como guardián estructural antes de modelar.

    topologyR es desarrollado por José Mauricio Gómez Julián y distribuido bajo licencia MIT. El código, la documentación, la wiki y el artículo acompañante están disponibles en GitHub.

  • bayesianOU: Explorando la Gravitación de los Precios de Mercado Mediante el Proceso de Ornstein-Uhlenbeck

    bayesianOU: Explorando la Gravitación de los Precios de Mercado Mediante el Proceso de Ornstein-Uhlenbeck

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

    Economía política · Ornstein–Uhlenbeck · Inferencia bayesiana

    Cuando los precios gravitan: una mirada bayesiana a una vieja pregunta económica

    Cómo bayesianOU convierte la idea de un “centro de gravedad” de los precios en un modelo estadístico de reversión, incertidumbre, heterogeneidad sectorial y escalas temporales medibles.

    bayesianOU · R · Stan · desarrollado por José Mauricio Gómez Julián · GitHub

    Hay una pregunta que atraviesa la economía política clásica: los precios que observamos todos los días —ruidosos, cambiantes, sometidos a shocks—, ¿fluctúan alrededor de algún centro más estable?

    Smith y Ricardo, y posteriormente Marx dentro de su propia arquitectura teórica, trabajaron con la idea de que detrás del movimiento inmediato de los precios existen centros de gravitación de más largo plazo.

    En la formulación marxiana considerada por bayesianOU, la estructura puede tener dos niveles: los precios de mercado fluctúan alrededor de precios de producción y, a su vez, puede investigarse empíricamente si esos precios de producción muestran gravitación respecto de valores basados en trabajo.

    Pero una metáfora de “gravitación” no constituye por sí sola evidencia. Para hacerla científicamente útil necesitamos convertirla en cantidades observables: qué tan fuerte es la reversión, cuál es el centro, cuánto tarda una desviación en disiparse y cuánta incertidumbre existe sobre todo ello.

    La pregunta estadística

    No basta con preguntar si una serie “parece volver”. Necesitamos saber si podemos representarla mediante un proceso ruidoso pero anclado y, si es así, estimar la escala temporal sobre la que opera ese retorno.

    El puente entre la física y la economía: Ornstein–Uhlenbeck

    El núcleo matemático del paquete proviene de un objeto clásico de la física estocástica: el proceso de Ornstein–Uhlenbeck.

    Su intuición puede visualizarse como una partícula sometida a dos fuerzas. Una componente aleatoria la empuja constantemente en direcciones impredecibles; al mismo tiempo, una fuerza restauradora la atrae hacia un punto de equilibrio.

    En su forma básica:

    \[ dX_t = \kappa(\mu-X_t)\,dt + \sigma\,dW_t \]

    donde:

    • \(\mu\) es el nivel de equilibrio;
    • \(\kappa\) es la velocidad de reversión;
    • \(\sigma\) mide la intensidad del ruido;
    • \(dW_t\) representa el componente browniano aleatorio.

    Si \(X_t\) está por encima de \(\mu\), el término \(\kappa(\mu-X_t)\) lo empuja hacia abajo. Si está por debajo, lo empuja hacia arriba.

    Cuanto más lejos se encuentre del centro, mayor es la fuerza restauradora en el OU lineal convencional.

    La cantidad más intuitiva no es \(\kappa\): es la vida media

    La velocidad de reversión puede traducirse en una cantidad mucho más interpretable: la half-life o vida media de una desviación.

    \[ t_{1/2} = \frac{\ln 2}{\kappa} \]

    Éste es el tiempo necesario para que, en términos del proceso, aproximadamente la mitad de una desviación respecto del equilibrio desaparezca.

    Así podemos reemplazar una afirmación vaga como “los precios tienden a volver” por una afirmación cuantitativa: la escala de reequilibrio estimada es de tantos años.

    Por qué importa la half-life

    Una reversión con vida media de meses describe un mecanismo muy distinto de una reversión cuya vida media es comparable a una década. Ambas son técnicamente reversión, pero su significado económico es completamente diferente.

    Un OU económico necesita ser más flexible que el modelo de manual

    bayesianOU no se limita a insertar precios dentro de la ecuación básica de Ornstein–Uhlenbeck. Su modelo principal introduce varias extensiones para representar mejor datos económicos reales.

    Drift no lineal

    Una corrección cúbica permite que la fuerza de restauración cambie cuando la desviación respecto del equilibrio se vuelve grande. El mercado puede reaccionar suavemente cerca del centro y con más intensidad en los extremos.

    Volatilidad estocástica

    La intensidad del ruido no se supone constante. La volatilidad posee su propia dinámica temporal, permitiendo distinguir períodos tranquilos y turbulentos.

    Innovaciones Student-t

    Las colas pesadas permiten acomodar shocks extremos que una distribución normal consideraría extraordinariamente improbables.

    Pooling jerárquico

    Los sectores poseen parámetros propios, pero comparten información mediante distribuciones comunes. No se los trata ni como idénticos ni como universos completamente independientes.

    Acoplamiento temporalmente variable

    La intensidad con la que el precio de mercado sigue al precio de producción puede depender de la tasa general de ganancia, denominada TMG en el paquete.

    Inferencia conjunta

    Los parámetros no se estiman como una colección de regresiones desconectadas. La arquitectura se estima conjuntamente dentro de una posterior bayesiana.

    Por qué una corrección cúbica puede importar

    El OU convencional supone que la fuerza restauradora crece linealmente con la distancia al equilibrio.

    Pero un mercado podría comportarse de otra manera.

    Pequeñas desviaciones pueden persistir porque los costos de arbitraje, la información imperfecta o las fricciones vuelven innecesario corregirlas inmediatamente. Las desviaciones extremas, en cambio, pueden provocar respuestas mucho más intensas.

    Una representación esquemática sería:

    \[ dX_t = \left[ \kappa(\mu_t-X_t) + \beta_3(\mu_t-X_t)^3 \right]dt + \sigma_t\,dW_t \]

    El término cúbico permite que la dinámica se aparte de la proporcionalidad estrictamente lineal.

    Importa señalar, sin embargo, que la propia documentación describe esa no linealidad como una refinación menor en los datos analizados: su coeficiente permanece relativamente cerca de su prior.

    Los sectores no son clones

    Agricultura, manufactura, transporte o servicios pueden tener velocidades de ajuste, volatilidades y niveles de equilibrio diferentes.

    Estimar cada sector completamente por separado desperdiciaría la información compartida. Imponer un único parámetro a todos ellos borraría la heterogeneidad.

    El modelo jerárquico ocupa el espacio intermedio:

    \[ \kappa_i \sim p(\kappa\mid\eta), \]

    donde cada sector \(i\) conserva su propia velocidad de reversión, mientras los parámetros poblacionales \(\eta\) permiten partial pooling.

    Los sectores con menos información pueden aprender parcialmente del conjunto sin ser obligados a reproducir exactamente el comportamiento medio.

    El segundo modelo: una cascada de gravitación

    La arquitectura anidada es conceptualmente más ambiciosa.

    Precio de mercado observado y ruidoso
    Precio de producción estado latente y móvil
    Valor índice basado en contenido de trabajo

    El precio de mercado no revierte hacia una constante. Revierte hacia un precio de producción latente que también cambia con el tiempo.

    Ese segundo nivel puede, a su vez, modelarse como un proceso de reversión respecto de un índice observado de valor.

    Cada flecha posee su propia velocidad. El modelo introduce una separación de escalas donde la capa de mercado puede ajustarse más rápidamente que la capa subyacente de producción, mediante una restricción suave que deja margen para que los datos contradigan la expectativa.

    El resultado empírico más llamativo: el acoplamiento con valor

    La documentación reporta una estimación sobre 37 sectores de Estados Unidos entre 1960 y 2020.

    En ese ajuste, el coeficiente que conecta el precio de producción latente con el índice de valor aparece aproximadamente igual a uno en unidades estandarizadas, con probabilidad posterior de ser positivo esencialmente igual a uno.

    Esto es importante por una razón metodológica: el prior de ese acoplamiento estaba centrado en cero.

    Es decir, el modelo no incorporó como supuesto previo que el acoplamiento tuviera que ser positivo.

    Pero cuidado con la interpretación

    Este resultado es una estimación dentro de un conjunto de datos, parametrización y construcción de variables específicos. No constituye por sí solo una demostración general de la teoría del valor. Además, la propia documentación discute el componente costo-precio compartido entre las variables y propone un análisis de “wedge” para examinar esa objeción.

    Stan, HMC y por qué la inferencia importa tanto como la ecuación

    La complejidad del modelo hace imposible obtener una posterior completa mediante álgebra cerrada.

    bayesianOU utiliza Hamiltonian Monte Carlo mediante Stan y su algoritmo NUTS.

    HMC transforma conceptualmente la distribución posterior en una superficie de energía y utiliza una dinámica inspirada en la mecánica hamiltoniana para explorarla de manera más eficiente que un random walk Monte Carlo convencional.

    La implementación utiliza además paralelismo dentro de las cadenas mediante reduce_sum, algo especialmente útil cuando la likelihood debe acumular información sobre numerosos sectores y períodos.

    El paquete expone diagnósticos mediante validate_ou_fit(), incluyendo:

    • \(\hat R\);
    • effective sample size;
    • transiciones divergentes;
    • y otros diagnósticos habituales del ecosistema Stan.

    Dos tipos de convergencia que no deben confundirse

    La palabra “convergencia” aparece dos veces en este tipo de análisis, pero significa cosas completamente diferentes.

    Convergencia económica

    Pregunta si el precio revierte hacia algún centro y a qué velocidad. Se estudia mediante cantidades como \(\kappa\) y la half-life.

    Convergencia del sampler

    Pregunta si las cadenas MCMC exploraron correctamente la posterior. Se examina mediante \(\hat R\), ESS, divergencias y otros diagnósticos.

    Una cadena MCMC puede converger perfectamente aunque la evidencia económica indique una reversión extremadamente lenta.

    Y al contrario: una interpretación económica plausible no vale nada si el sampler no exploró adecuadamente la posterior.

    Comparación de modelos: PSIS-LOO, pero con una advertencia

    El paquete utiliza PSIS-LOO para comparación de modelos.

    Este procedimiento aproxima leave-one-out cross-validation mediante importance sampling sobre los draws posteriores, evitando tener que reestimar el modelo completo una vez por observación.

    Sin embargo, la documentación advierte que la presencia de un estado de volatilidad latente para cada observación puede volver optimista al LOO convencional.

    Esa advertencia es importante porque evita tratar una métrica de comparación como si estuviera libre de los supuestos del propio modelo.

    La validación fuera de muestra produce resultados incómodos

    La parte más interesante de la documentación aparece cuando el modelo se enfrenta a datos realmente reservados.

    La evaluación utiliza como período de prueba 2011–2020.

    Y los resultados reportados no favorecen de manera automática al modelo OU:

    • un random walk obtiene mejor desempeño de forecasting;
    • una restricción sin gravitación empata o supera al modelo;
    • el término de valor no agrega densidad predictiva detectable en esa prueba.

    En lugar de ocultar esos resultados, el paquete los pone en el centro de la discusión.

    ¿Significa eso que la gravitación fue refutada?

    No necesariamente, porque estimación estructural y forecasting responden preguntas diferentes.

    Imaginemos una vida media cercana a nueve años.

    En horizontes de uno o pocos años, el efecto restaurador será relativamente pequeño. Localmente, un proceso OU con \(\kappa\) bajo puede parecerse mucho a un random walk.

    Por tanto, que un random walk produzca mejores pronósticos de corto plazo no demuestra automáticamente que \(\kappa=0\).

    Dos preguntas distintas

    Estructural: ¿existe un mecanismo de reversión y cuál es su escala temporal?

    Predictiva: ¿qué modelo pronostica mejor el siguiente período?

    Para procesos de reversión muy lenta, ambas preguntas pueden producir respuestas diferentes sin contradicción lógica.

    Los controles negativos: ¿el modelo inventa gravitación?

    Una explicación de este tipo sólo resulta convincente si demostramos que el procedimiento no encuentra reversión inevitablemente.

    La documentación reporta controles negativos y simulaciones adversariales.

    Cuando el modelo recibe una verdadera caminata aleatoria, no devuelve artificialmente una reversión rápida: reporta una half-life de aproximadamente 50 años.

    Cuando se simula un acoplamiento nulo con valor, la posterior incluye correctamente cero.

    Es decir, el pipeline tiene capacidad para responder “no veo una gravitación informativa” cuando el proceso generador realmente carece de ella.

    La trampa de \(\kappa\) bajo

    El paquete denomina low-\(\kappa\) trap a una dificultad fundamental de cualquier estudio de reversión lenta.

    Cuando \(\kappa\rightarrow0\), el proceso OU se aproxima continuamente a una caminata aleatoria.

    Problema algebraico

    No existe una frontera interna clara entre reversión muy lenta y ausencia de reversión. En tiempo discreto, \(\kappa\to0\) corresponde a persistencia cercana a uno.

    Problema estadístico

    La potencia de los tests de raíz unitaria se deteriora precisamente cerca de esa frontera, especialmente con muestras finitas.

    Problema paramétrico

    Si el modelo restringe \(\kappa>0\), preguntar por \(P(\kappa>0)\) es trivial. La información real está en la distribución de la half-life y en su cola.

    Entonces, ¿qué hay que mirar?

    No simplemente si \(\kappa\) es positivo.

    Hay que observar la distribución de:

    \[ t_{1/2} = \frac{\ln 2}{\kappa} \]

    y preguntar qué probabilidad posterior existe de que la vida media exceda horizontes económicamente relevantes.

    La documentación señala incluso que al menos un sector conserva una probabilidad posterior no trivial de tener una half-life superior a 40 años.

    Esa cola no se elimina para producir un titular más limpio. Se reporta precisamente porque forma parte de lo que la muestra permite afirmar.

    Por qué el panel jerárquico puede ayudar

    Un test univariado observa una sola serie. El modelo jerárquico dispone de información conjunta procedente de múltiples sectores y períodos.

    En el caso documentado, la inferencia estructural utiliza 37 sectores y 61 años.

    El pooling permite que la evidencia acerca de las propiedades comunes de la reversión se comparta parcialmente entre sectores.

    Esto no elimina el problema de identificación cerca de la raíz unitaria, pero puede proporcionar más información que evaluar cada trayectoria completamente aislada.

    Buenas prácticas incorporadas al diseño

    Priors neutrales en hipótesis centrales

    Tanto el acoplamiento con la tasa de ganancia como el acoplamiento con valor poseen priors centradas en cero.

    Separación estricta train/test

    fit_window permite mantener separados los diseños estructural y predictivo, evitando filtración de información futura.

    Loadings calculados sólo en entrenamiento

    Los factores comunes utilizados en la evaluación fuera de muestra no incorporan accidentalmente información del período de prueba.

    Resultados negativos visibles

    La documentación no elimina el hecho de que el random walk vence al OU en forecasting durante la evaluación descrita.

    Los puntos débiles también están documentados

    La estimación de una half-life cercana a nueve años no debe leerse como una constante exacta.

    La propia documentación señala que el proceso previo de desagregación puede sesgar conservadoramente la velocidad hacia valores más lentos, de modo que la cifra real podría encontrarse más cerca de siete u ocho años dentro del ejercicio de validación descrito.

    También se reconocen otras limitaciones:

    • la no linealidad cúbica aporta relativamente poco en estos datos;
    • los grados de libertad Student-t y la escala de volatilidad estocástica pueden quedar débilmente identificados cuando ambos mecanismos están activos;
    • el resultado de acoplamiento con valor utiliza niveles estandarizados con un componente costo-precio compartido;
    • la defensa frente a esta última objeción depende de un análisis del “wedge” que un lector crítico debería examinar directamente.
    Una virtud metodológica

    Estos problemas no aparecen como excepciones escondidas al final. Forman parte explícita de la interpretación. Un modelo serio no sólo debe indicar dónde encuentra evidencia: también debe señalar dónde esa evidencia se vuelve frágil.

    Más allá de la teoría marxiana

    Las herramientas de bayesianOU son mucho más generales que su aplicación original.

    El mismo problema aparece siempre que estudiamos una variable que puede presentar reversión lenta, ruidosa y posiblemente hacia un objetivo cambiante.

    Área Problema análogo
    Tipos de interés Determinar si fluctúan alrededor de niveles de equilibrio persistentes pero móviles.
    Tipos de cambio reales Distinguir una raíz unitaria de una reversión extremadamente lenta.
    Materias primas Estudiar precios con shocks extremos, volatilidad variable y potenciales niveles fundamentales.
    Clima y medio ambiente Modelar variables que fluctúan alrededor de estados o tendencias dinámicas con memoria prolongada.
    Concentraciones de contaminantes Estimar cuánto tarda una perturbación en disiparse hacia un nivel de referencia.

    La cuestión de fondo

    La idea de gravitación puede sonar inicialmente metafórica. El proceso Ornstein–Uhlenbeck permite convertirla en algo mucho más concreto.

    Podemos estimar un centro. Podemos estimar una velocidad. Podemos traducir esa velocidad a una vida media. Podemos permitir que ese centro se mueva. Podemos permitir que diferentes sectores tengan dinámicas distintas. Podemos preguntar si otra variable modifica la fuerza restauradora.

    Pero la parte más importante quizá aparezca cuando la reversión es muy lenta.

    Cerca de \(\kappa=0\), las categorías simples empiezan a difuminarse. Una caminata aleatoria y un proceso que revierte a lo largo de décadas pueden ser extraordinariamente difíciles de distinguir con una muestra finita.

    Ahí la responsabilidad del modelo no es producir certeza artificial, sino representar la cola de incertidumbre con claridad.

    Ésa es la contribución metodológica más interesante de bayesianOU. Convierte la gravitación en una hipótesis cuantitativa que puede estimarse, compararse y potencialmente rechazarse; pero, al mismo tiempo, separa con cuidado la existencia estructural de reversión de la capacidad de forecasting de corto plazo, reconoce la trampa de la reversión lenta, publica los controles negativos y conserva los resultados que van contra una lectura demasiado triunfalista. El resultado no es una máquina para demostrar que los precios gravitan. Es un marco para preguntar, con bastante más precisión, si lo hacen, hacia qué, a qué velocidad y con cuánta incertidumbre.

    bayesianOU es desarrollado por José Mauricio Gómez Julián. El repositorio, la especificación matemática completa, los bloques de validación y las notas metodológicas están disponibles en GitHub.

  • Cuando Falla la Prueba de Hipótesis del Libro de Texto: Cómo HTDV Aporta Rigor a los Datos Dependientes y Desequilibrados.

    Cuando Falla la Prueba de Hipótesis del Libro de Texto: Cómo HTDV Aporta Rigor a los Datos Dependientes y Desequilibrados.

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

    Contrastes de hipótesis · Dependencia · Inferencia bayesiana

    Cuando las observaciones recuerdan el pasado: una introducción a HTDV

    Un paquete de R para contrastar hipótesis con datos dependientes, muestras desbalanceadas y tamaños finitos mediante triangulación bayesiana, inferencia HAR y block bootstrap.

    HTDV · Hypothesis Testing for Dependent Variables with Unbalanced Data · R · Stan · Licencia MIT · GitHub

    Imaginemos una pregunta aparentemente trivial: ¿la inflación media de un país es estadísticamente distinta de cero? Tenemos décadas de observaciones mensuales, así que un t-test parece una elección natural.

    Pero existe un problema. Enero no es estadísticamente ajeno a febrero. Las observaciones de una serie económica suelen conservar memoria del pasado. Cuando esa dependencia se ignora, el error estándar utilizado por el contraste puede quedar mal calibrado y la tasa real de falsos positivos superar ampliamente el 5 % que creemos estar utilizando.

    El mismo problema aparece en spreads financieros, rentabilidad sectorial, empleo regional, retornos, indicadores macroeconómicos y muchas otras series reales.

    Ahora agreguemos dos dificultades: los grupos que queremos comparar poseen tamaños diferentes y los datos pueden tener colas pesadas.

    Ése es el terreno para el que fue diseñado HTDV.

    La idea central

    HTDV no pide que confiemos en un único método robusto. Su estrategia es triangular la inferencia: ejecutar metodologías independientes y convertir tanto el acuerdo como el desacuerdo entre ellas en información sobre la solidez de nuestra conclusión.

    El verdadero problema no es solamente la media: es el error estándar

    Supongamos que queremos estimar una media \(\theta\). En un mundo de observaciones independientes, la incertidumbre de esa media puede calcularse mediante fórmulas familiares.

    Pero si las observaciones están correlacionadas, una muestra de cien datos no necesariamente contiene la misma cantidad de información que cien observaciones independientes.

    Si la serie se parece esquemáticamente a un AR(1),

    \[ X_t-\theta = \phi(X_{t-1}-\theta) + \varepsilon_t, \]

    entonces valores elevados de \(\phi\) implican que cada observación arrastra una fracción considerable de su pasado.

    Cuanto mayor es esa persistencia, menor puede ser la cantidad efectiva de información independiente que tenemos.

    Ésta es precisamente la zona donde los métodos asintóticos pueden parecer extraordinariamente precisos mientras sus intervalos son, en realidad, demasiado estrechos.

    Tres métodos mirando la misma evidencia

    HTDV organiza su análisis principal en tres capas inferenciales.

    Bayes + HMC

    Un modelo jerárquico representa explícitamente el proceso generador y su dependencia temporal. La posterior se obtiene mediante Hamiltonian Monte Carlo en Stan.

    HAR fixed-bandwidth

    Un contraste Wald inspirado en Kiefer y Vogelsang utiliza un ancho de banda fijo como proporción de la muestra y una distribución asintótica no estándar orientada a mejorar el comportamiento en muestras finitas.

    Stationary block bootstrap

    Remuestrea bloques de observaciones para preservar la dependencia temporal y construye la incertidumbre a partir de la distribución remuestreada.

    Existe además una cuarta capa para situaciones específicas: adaptive conformal inference, dirigida a predicción online cuando se desea evitar una especificación distribucional paramétrica.

    La discrepancia no es un fallo: puede ser el resultado más importante

    Lo natural sería pensar que, si tres métodos producen tres intervalos distintos, algo salió mal.

    HTDV adopta la interpretación contraria.

    Cuando Bayes, HAR y bootstrap coinciden, existe evidencia de que la conclusión es relativamente insensible al marco inferencial.

    Pero si la posterior bayesiana es mucho más amplia que los intervalos HAR o bootstrap, esa discrepancia puede estar revelando persistencia temporal suficientemente fuerte como para que las aproximaciones asintóticas estén funcionando mal en la muestra disponible.

    Una diferencia crucial

    Un intervalo más estrecho no siempre significa que sabemos más. También puede significar que el método está subestimando la incertidumbre.

    ¿Por qué no usar solamente Bayes?

    Porque los tres métodos poseen regiones donde su relación entre costo y desempeño puede ser diferente.

    HAR

    Es computacionalmente muy económico y puede estar bien calibrado cuando la persistencia es baja o moderada y el tamaño muestral permite que las aproximaciones asintóticas funcionen adecuadamente.

    Block bootstrap

    Conserva parte de la estructura de dependencia sin exigir una familia distribucional tan específica y sigue siendo comparativamente barato.

    Bayes jerárquico

    Tiene un costo computacional considerablemente mayor, pero representa explícitamente la dependencia y, según la validación del paquete, mantiene mejor la calibración en escenarios persistentes y finitos.

    La triangulación

    La utilidad no reside en coronar siempre al mismo ganador, sino en observar cuándo los métodos comienzan a separarse y qué característica de los datos parece producir esa separación.

    El estudio Monte Carlo: 1.024 escenarios para intentar romper el método

    La documentación incluye un estudio factorial pre-registrado que cruza distintas condiciones de:

    • tamaño muestral;
    • autocorrelación;
    • peso de las colas;
    • grado de desbalance entre las muestras;
    • y desplazamiento de localización.

    El diseño contiene 1.024 celdas con 500 repeticiones por celda para las tres capas inferenciales.

    Resultado documentado Valor Lectura
    Tamaño medio bayesiano 0.056 Cercano al objetivo nominal de 0.05 a través de la grilla.
    Cobertura media bayesiana 0.944 Cercana al objetivo nominal de 0.95.
    HAR bajo persistencia fuerte + n pequeño rechazo ≈ 0.60 Una tasa de rechazo bajo la nula muy superior al nivel nominal.
    Cobertura HAR en ese extremo 0.29 El intervalo cubre el valor verdadero mucho menos de lo esperado.

    El mensaje metodológico es incómodo pero importante: los intervalos HAR o bootstrap pueden ser más estrechos precisamente cuando deberían ser más anchos.

    La documentación resume esa situación de una manera particularmente útil: estrechez no implica necesariamente precisión; puede significar miscalibration.

    Pero ¿están los tres métodos intentando responder realmente la misma pregunta?

    Aquí aparece la parte más teórica del proyecto.

    Comparar métodos distintos sólo tiene sentido si existe alguna forma de establecer que sus objetos inferenciales pueden traducirse entre sí.

    HTDV organiza tres regímenes de convergencia.

    TAC — Triangular Arrays Convergence

    Representa situaciones donde la información aumenta mediante estructuras jerárquicas o triangulares de observaciones.

    WSC — Weighted Sums with Correlation

    Está pensado para observaciones vinculadas mediante una estructura de covarianza transversal, como regiones o mercados conectados.

    MPC — Mixingale Process Convergence

    Representa memoria temporal que decae gradualmente a medida que aumenta la distancia entre observaciones.

    La pregunta matemática

    ¿Podemos transportar una conclusión inferencial entre estos regímenes sin cambiar arbitrariamente el significado de la distancia estadística?

    El teorema de equivalencia métrica

    Según el marco teórico documentado por HTDV, bajo \(\alpha\)-mixing con decaimiento polinomial, condiciones de momentos finitos y una tasa \(\gamma>1\), TAC, WSC y MPC inducen métricas estrictamente equivalentes sobre el espacio de problemas de contraste de hipótesis.

    La idea de equivalencia no significa que las métricas sean numéricamente idénticas. Significa que pueden controlarse unas mediante otras a través de constantes finitas.

    El paquete expone esas constantes mediante:

    htdv_equivalence_constants()

    De acuerdo con la documentación, para un conjunto típico de parámetros como \(\gamma=2\), \(q=6\) y \(n=500\), el margen de conversión se sitúa alrededor del 18 %.

    Por qué importa

    La triangulación deja de ser solamente “corramos tres métodos y comparemos”. El teorema pretende proporcionar una base matemática para afirmar que las métricas asociadas a los tres regímenes pueden traducirse con un error finito y computable.

    La condición de dependencia: memoria, pero no memoria infinita

    El supuesto central es que la dependencia disminuye con la distancia.

    En términos simples, dos observaciones separadas por cien períodos deben compartir menos información que dos observaciones consecutivas.

    La documentación supone un decaimiento polinomial suficientemente rápido:

    \[ \alpha(k) \lesssim C k^{-\gamma}, \qquad \gamma>1. \]

    El requisito \(\gamma>1\) garantiza un decaimiento suficientemente fuerte para que la dependencia de largo alcance sea sumable bajo las condiciones del marco.

    La documentación sitúa dentro de este ámbito muchos procesos estacionarios habituales en econometría, entre ellos clases de ARMA, GARCH y cadenas de Markov.

    Pero existen límites importantes.

    Los procesos de memoria larga y los procesos con raíz unitaria no satisfacen esta arquitectura de la misma manera.

    HTDV puede ajustar series cercanas a una raíz unitaria y reflejar esa persistencia mediante una posterior más amplia, pero no pretende sustituir pruebas explícitas de raíz unitaria como ADF o Phillips-Perron.

    El motor bayesiano: modelar la dependencia en lugar de corregirla después

    El núcleo bayesiano utiliza Stan y el algoritmo NUTS, una variante de Hamiltonian Monte Carlo.

    La parametrización fundamental gira alrededor de tres cantidades:

    \[ \theta,\qquad \phi,\qquad \sigma, \]

    donde \(\theta\) representa el nivel o media relevante, \(\phi\) la dependencia AR(1) y \(\sigma\) la escala de innovación.

    Los parámetros asociados a la dependencia reciben priors jerárquicas débilmente informativas, de manera que el modelo regularice regiones problemáticas sin imponer de forma rígida el resultado.

    Cinco formas de construir la likelihood

    HTDV dispone de cinco backends de likelihood: los tres vinculados a TAC, WSC y MPC, además de dos familias conocidas de series temporales.

    Whittle likelihood

    Trabaja en el dominio de frecuencias y compara el periodograma observado con una densidad espectral teórica.

    Composite likelihood

    Trabaja en el dominio temporal combinando densidades condicionales de bloques relativamente pequeños.

    ¿Cuál elegir?

    La elección depende de si confiamos más en la representación espectral o en la estructura condicional del proceso.

    ¿Y si no estamos seguros?

    El paquete incorpora una envolvente robusta de Berger para reflejar explícitamente incertidumbre acerca de la especificación de likelihood.

    La envolvente robusta: incertidumbre sobre el modelo también es incertidumbre

    Supongamos que una likelihood Whittle y una composite likelihood producen posteriors algo diferentes.

    Elegir una de ellas únicamente porque nos gusta más vuelve invisible la incertidumbre de especificación.

    HTDV incorpora una Berger-robust envelope que combina información de múltiples modelos en una posterior más amplia, diseñada para proteger la inferencia frente al escenario menos favorable de especificación entre los modelos considerados.

    El principio es coherente con la filosofía general del paquete: si no sabemos con certeza qué modelo es correcto, esa duda debería ampliar nuestra incertidumbre, no desaparecer de ella.

    Una posterior no puede utilizarse hasta superar cinco puertas

    HTDV convierte los diagnósticos HMC en requisitos, no en recomendaciones opcionales.

    Split-\(\hat{R}<1.01\). Las cadenas deben mostrar convergencia adecuada.

    Bulk ESS > 400. Debe existir tamaño efectivo suficiente en el centro de la posterior.

    Tail ESS > 400. Las colas también necesitan información Monte Carlo suficiente.

    Cero divergencias post-warmup. Una geometría posterior problemática impide aceptar automáticamente el ajuste.

    E-BFMI > 0.3. La exploración de la energía por HMC debe superar el umbral establecido por el protocolo.

    Solamente después de superar esas puertas la posterior se considera admisible para la inferencia posterior del paquete.

    Validación externa: tres series conocidas

    Además de la simulación factorial, la documentación incluye tres benchmarks con datos de fuentes públicas.

    Serie Referencia comparativa Comportamiento documentado
    Inflación CPI de EE. UU. posterior a 1984 Stock y Watson (2007) Las tres capas reproducen la referencia.
    Log-CAPE de Shiller Campbell y Shiller (1998) Las tres capas reproducen la referencia.
    Diferencial de rendimiento EE. UU.–Canadá a 10 años Baseline Welch iid Las tres capas coinciden con la comparación de referencia.

    Lo interesante no es solamente que los métodos coincidan en la dirección general. Es cómo cambia la anchura de los intervalos conforme aumenta la persistencia.

    Persistencia aproximada Serie Anchura Bayes / HAR
    \(\phi\approx0.45\) Inflación 0.81×
    \(\phi\approx0.97\) CAPE 2.8×
    \(\phi\approx0.99\) Diferencial de rendimientos 15×

    Esa progresión es uno de los resultados empíricos centrales que destaca la documentación.

    Con persistencia moderada, Bayes puede incluso producir un intervalo más estrecho. Conforme \(\phi\) se aproxima a uno, la posterior se ensancha dramáticamente.

    HTDV interpreta ese ensanchamiento no como una debilidad, sino como la representación apropiada de cuánto menos puede aprenderse de una muestra finita extremadamente persistente.

    ¿Cuándo tiene sentido utilizar HTDV?

    Dependencia temporal

    Cuando las observaciones sucesivas no pueden tratarse razonablemente como independientes.

    Dependencia espacial

    Cuando unidades como regiones o mercados comparten una estructura de correlación.

    Muestras desbalanceadas

    Cuando los grupos comparados poseen cantidades de observaciones sustancialmente diferentes.

    Colas pesadas

    Cuando no resulta razonable asumir a priori que el comportamiento extremo puede ignorarse.

    Su objetivo es inferencial: contrastes, intervalos y estimación bajo incertidumbre.

    ¿Cuándo no usarlo?

    Si los datos son genuinamente independientes y poseen varianza finita, métodos clásicos más simples pueden ser suficientes y mucho más rápidos.

    El paquete tampoco está diseñado específicamente para:

    • procesos de memoria larga;
    • tests explícitos de raíz unitaria;
    • rupturas estructurales no segmentadas previamente;
    • forecasting como objetivo principal.

    HTDV es un marco de contraste de hipótesis y estimación bajo dependencia, no una biblioteca general de predicción de series temporales.

    Una arquitectura abierta para inspeccionar las decisiones

    El paquete expone la infraestructura que sustenta sus conclusiones.

    Entre sus herramientas se encuentran:

    • htdv_simstudy() para ejecutar simulaciones;
    • htdv_equivalence_constants() para las constantes del teorema;
    • diagnósticos HMC;
    • posterior predictive checks sobre dependencia;
    • decisiones basadas en ROPE;
    • Bayes factors mediante bridge sampling;
    • WAIC;
    • leave-future-out cross-validation;
    • predictive stacking.

    La intención es que las decisiones inferenciales puedan rastrearse hasta su fundamento metodológico y no aparezcan como salidas opacas de una caja negra.

    Instalación

    El paquete puede instalarse directamente desde GitHub:

    remotes::install_github(
      "IsadoreNabi/HTDV"
    )

    Según la documentación, rstan es su única dependencia dura. El repositorio contiene además la wiki, el estudio de validación, documentación matemática y scripts de reproducibilidad.

    La cuestión metodológica de fondo

    Existe una tendencia natural en investigación aplicada: elegir un método “robusto”, ejecutar el contraste y tratar su intervalo como si fuese una medida objetiva de cuánto sabemos.

    HTDV intenta hacer visible una dificultad más profunda: la calibración de un procedimiento depende del régimen en el que estamos utilizándolo.

    Un método asintóticamente válido puede comportarse mal cuando la muestra es pequeña y la dependencia es extrema. Otro puede resultar computacionalmente mucho más costoso, pero responder precisamente a esa zona problemática.

    Por eso el desacuerdo entre métodos no se elimina. Se conserva.

    Si los tres coinciden, tenemos una señal de robustez. Si comienzan a divergir al aumentar la persistencia, esa divergencia nos dice que estamos entrando en una región donde la inferencia depende mucho más de cómo representamos la dependencia.

    Ésta es la apuesta de HTDV: cuando ningún procedimiento inferencial domina universalmente en muestras finitas, la respuesta más informativa no consiste en escoger uno y ocultar los demás. Consiste en hacerlos trabajar en paralelo y convertir su desacuerdo en un diagnóstico. El producto final no es únicamente un valor p, un intervalo o una posterior. Es una medida más explícita de dónde nuestra inferencia parece sólida y dónde comienza a apoyarse en hielo asintótico.

    HTDV se distribuye bajo licencia MIT. El paquete, el artículo acompañante, los scripts de reproducibilidad, la validación completa y la documentación matemática están disponibles en GitHub.

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

    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.

  • Detectando Cuándo Cambia el Mundo: Un Análisis Profundo del Paquete R RegimeChange

    Detectando Cuándo Cambia el Mundo: Un Análisis Profundo del Paquete R RegimeChange

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

    Series temporales · Changepoints · Inferencia bayesiana

    ¿Cuándo cambió realmente el sistema? Una introducción a RegimeChange

    Un paquete de R que reúne métodos clásicos, bayesianos y de deep learning para detectar cambios de régimen, cuantificar su incertidumbre y distinguir una transición real de una simple fluctuación aleatoria.

    RegimeChange · R · Código abierto · GitHub

    Una línea de producción funciona con normalidad y, de pronto, los sensores comienzan a verse distintos. Ninguna observación individual parece imposible, pero algo cambió. Un economista observa décadas de crecimiento y sospecha que el país dejó atrás un régimen para entrar en otro. Un médico sigue una serie de signos vitales y necesita saber cuándo la estabilidad comienza a convertirse en deterioro.

    En los tres casos la pregunta estadística es esencialmente la misma: ¿en qué momento el proceso dejó de comportarse como antes?

    Éste es el problema de la detección de cambios de régimen, también conocida como changepoint detection.

    RegimeChange intenta abordarlo mediante una biblioteca única que reúne métodos que normalmente aparecen dispersos entre varios paradigmas y paquetes: estadística frecuentista, inferencia bayesiana, detección secuencial y, opcionalmente, deep learning.

    La pregunta fundamental

    Toda serie fluctúa. El problema es determinar cuándo una fluctuación es solamente ruido dentro del mismo régimen y cuándo constituye evidencia de que el sistema pasó a un estado estadísticamente diferente.

    Detectar un cambio significa decidir cuánto error estamos dispuestos a tolerar

    La dificultad aparece porque ninguna regla de detección puede escapar por completo de dos clases de error.

    Falsa alarma — Error tipo I

    Declaramos que hubo un cambio cuando el proceso simplemente estaba atravesando una fluctuación normal. En una fábrica puede significar detener innecesariamente una línea de producción.

    Cambio no detectado — Error tipo II

    El sistema sí cambió, pero el algoritmo no genera una alarma. Dependiendo de la aplicación, esto puede significar reaccionar demasiado tarde ante una crisis, un brote o un deterioro operativo.

    El umbral de detección regula ese compromiso. Un umbral bajo detectará cambios rápidamente, pero también puede producir muchas falsas alarmas. Uno muy alto será más conservador, aunque puede reconocer el cambio demasiado tarde.

    No existe un umbral universalmente correcto: depende del costo práctico de cada error.

    Tres familias metodológicas bajo una misma interfaz

    RegimeChange organiza sus algoritmos en tres familias principales.

    Frecuentistas

    Incluyen CUSUM, PELT, Binary Segmentation, WBS, FPOP, E-Divisive, Kernel CPD y NOT. Cubren desde cambios simples en la media hasta transformaciones complejas de la distribución.

    Bayesianos

    BOCPD y Shiryaev-Roberts permiten representar probabilísticamente la incertidumbre acerca de cuándo ocurrió el cambio y, en contextos online, actualizar esa evidencia a medida que llegan datos.

    Deep learning

    Autoencoders, TCN, Transformers y Contrastive Predictive Coding amplían la detección hacia patrones temporales complejos y no lineales.

    CUSUM: dejar que la evidencia se acumule

    CUSUM —Cumulative Sum— es uno de los métodos clásicos de detección secuencial.

    La intuición es especialmente clara. Mientras el proceso permanece en el mismo régimen, las desviaciones positivas y negativas respecto de un nivel de referencia tienden a compensarse.

    Pero si la media cambia, las desviaciones comienzan a acumularse persistentemente en una dirección.

    Cuando esa acumulación supera un umbral, se genera una alarma.

    Intuición de CUSUM

    Una observación extraña puede no significar nada. Muchas desviaciones consecutivas en la misma dirección sí comienzan a constituir evidencia de un cambio.

    Su complejidad es lineal, \(O(n)\), y resulta especialmente natural para monitoreo online y detección de cambios en la media.

    PELT: encontrar múltiples cambios sin probar cada partición posible

    Cuando existe más de un cambio, la dificultad aumenta. Debemos decidir simultáneamente cuántos segmentos existen y dónde comienzan y terminan.

    PELT —Pruned Exact Linear Time— utiliza programación dinámica para buscar la segmentación global que minimiza una función de costo, incorporando al mismo tiempo una penalización por introducir demasiados cambios.

    La penalización es importante: sin ella, el modelo podría mejorar artificialmente su ajuste dividiendo la serie en un número excesivo de segmentos.

    RegimeChange permite criterios como:

    • BIC;
    • AIC;
    • MBIC;
    • MDL;
    • o una penalización numérica especificada manualmente.

    El mecanismo de pruning elimina posiciones candidatas que ya no pueden producir la solución óptima, permitiendo que PELT alcance complejidad promedio cercana a \(O(n)\) bajo las condiciones correspondientes.

    No todo cambio se parece a un salto limpio en la media

    RegimeChange incorpora métodos adicionales porque distintos cambios dejan firmas estadísticas diferentes.

    Binary Segmentation

    Localiza un cambio, divide la serie y repite recursivamente. Es rápido, aunque su estrategia greedy no garantiza el óptimo global.

    Wild Binary Segmentation

    Busca cambios sobre numerosos subintervalos aleatorios y puede mejorar la localización cuando existen varios changepoints próximos.

    FPOP

    Utiliza poda funcional y funciones de costo por tramos para realizar particionamiento óptimo.

    E-Divisive

    Emplea estadísticas de energía y permite detectar cambios más generales en la distribución sin imponer una forma paramétrica específica.

    Kernel CPD

    Traslada la información a un espacio de características mediante kernels para capturar cambios distribucionales complejos.

    NOT

    Narrowest-Over-Threshold está orientado a localizar cambios con precisión mediante intervalos que superan un umbral.

    BOCPD: en lugar de preguntar “¿cambió?”, preguntar “¿qué probabilidad hay de que haya cambiado?”

    La aproximación bayesiana cambia profundamente la forma del resultado.

    Bayesian Online Changepoint Detection mantiene en cada instante una distribución posterior sobre el llamado run length: cuántas observaciones han transcurrido desde el último cambio.

    Cuando llega una nueva observación, existen esencialmente dos posibilidades:

    • el régimen continúa y el run length aumenta;
    • ocurre un cambio y el run length vuelve a cero.

    Una función de riesgo —hazard function— controla la probabilidad previa de que ocurra un cambio en cada instante.

    El resultado es especialmente útil porque BOCPD no devuelve únicamente un indicador binario. Produce una probabilidad posterior de cambio a lo largo del tiempo.

    RegimeChange implementa distintas familias conjugadas, entre ellas Normal-Gamma para media y varianza desconocidas, Normal con varianza conocida, Gamma-Poisson para conteos y Normal-Wishart para datos multivariados.

    Y cuando la relación temporal es demasiado compleja: deep learning

    Algunos cambios no se manifiestan como una modificación simple de media, varianza o tendencia.

    Para esos casos el paquete incorpora, como módulos opcionales, métodos de aprendizaje profundo.

    Autoencoders

    Aprenden a reconstruir el comportamiento normal. Si cambia el régimen, aumenta el error de reconstrucción.

    Temporal Convolutional Networks

    Utilizan convoluciones causales dilatadas para capturar dependencias temporales de largo alcance.

    Transformers

    Aplican mecanismos de self-attention para representar relaciones temporales distantes.

    Contrastive Predictive Coding

    Aprende representaciones auto-supervisadas y busca cambios importantes en el espacio de embeddings resultante.

    Existe además un modo ensemble que exige acuerdo entre múltiples detectores antes de declarar un cambio.

    La interfaz única: cambiar de método sin cambiar de lógica

    Una de las decisiones prácticas más importantes del paquete es que los algoritmos principales pueden llamarse desde detect_regimes().

    library(RegimeChange)
    
    set.seed(42)
    
    data <- c(
      rnorm(200, 0, 1),
      rnorm(200, 2, 1)
    )
    
    # PELT
    result <- detect_regimes(
      data,
      method = "pelt"
    )
    
    print(result)
    plot(result)

    Para pasar a un detector bayesiano:

    result <- detect_regimes(
      data,
      method = "bocpd",
      prior = normal_gamma(
        mu0 = 0,
        kappa0 = 1,
        alpha0 = 1,
        beta0 = 1
      )
    )

    Y para monitoreo online con CUSUM:

    result <- detect_regimes(
      data,
      method = "cusum",
      mode = "online",
      threshold = 5
    )

    El usuario puede especificar si busca cambios en media, varianza, ambas, tendencia o distribución, además del número esperado de cambios y el criterio de penalización.

    Offline y online son problemas relacionados, pero no idénticos

    En modo offline ya conocemos la serie completa. Queremos reconstruir retrospectivamente cuándo ocurrieron los cambios.

    En modo online, en cambio, los datos llegan uno por uno. La pregunta es si debemos generar una alarma ahora.

    detector <- regime_detector(
      method = "bocpd",
      prior = normal_gamma(),
      threshold = 0.5
    )
    
    for (x in data_stream) {
    
      detector <- update(detector, x)
    
      if (detector$last_result$alarm) {
    
        message(
          "Changepoint detected at time ",
          detector$last_result$t
        )
    
        detector <- reset(detector)
      }
    }

    Esa arquitectura es relevante para aplicaciones como vigilancia epidemiológica, control industrial, detección de fraude o monitoreo financiero.

    El mundo real tiene outliers, colas pesadas y autocorrelación

    Aquí aparece uno de los puntos más interesantes del paquete. Muchos procedimientos clásicos funcionan mejor cuando las observaciones son aproximadamente independientes y la distribución no contiene contaminación severa.

    Los datos reales rara vez cooperan tanto.

    El modo robusto de PELT puede combinar varias defensas.

    Winsorización

    Limita el impacto de observaciones extremas recortándolas según cuantiles configurables.

    Pérdidas robustas

    Puede utilizar Huber M-estimation o Tukey biweight en lugar de pérdida cuadrática convencional.

    Escala Qn

    Emplea el estimador robusto de Rousseeuw y Croux, diseñado para mantener alta resistencia frente a contaminación.

    Modo automático

    robust = "auto" examina indicadores de contaminación y selecciona un nivel de robustez apropiado.

    Para series autocorrelacionadas, correct_ar = TRUE estima una estructura AR(1) y pre-blanquea la serie antes de ejecutar la detección.

    La idea es evitar que una dependencia temporal ordinaria sea confundida con evidencia de un cambio estructural.

    ¿Qué muestran los benchmarks documentados?

    La wiki del paquete reporta una comparación con paquetes establecidos de R en 17 escenarios y 50 repeticiones por escenario.

    Escenario Resultado reportado para RegimeChange Comparación documentada
    Promedio general F1 = 0.804 El selector automático obtuvo el mayor F1 medio de los métodos evaluados.
    Datos contaminados F1 = 0.998 Frente a 0.479 para PELT estándar del paquete de referencia indicado en la documentación.
    Cambio sutil de varianza 2:1 F1 = 0.667 Frente a 0.400 en los paquetes de referencia reportados.
    Autocorrelación fuerte, AR = 0.7 F1 = 0.900 Frente a 0.720 en la comparación documentada.
    Resumen de escenarios Ganó o empató en 16 de 17 La pérdida restante fue reportada como marginal, de 0.017 en un escenario de colas pesadas.
    Cómo leer estos resultados

    Son resultados de los benchmarks descritos en la documentación del paquete. No implican que RegimeChange vaya a superar a cualquier alternativa en cualquier conjunto de datos. El comportamiento real depende del tipo de cambio, la contaminación, la autocorrelación, el tamaño muestral y la parametrización.

    No basta con saber dónde: también importa saber cuán seguros estamos

    Decir que un cambio ocurrió en la observación 200 parece preciso, pero puede dar una falsa sensación de certeza.

    RegimeChange diferencia al menos dos dimensiones.

    Incertidumbre sobre la localización

    Para los métodos frecuentistas puede utilizar block bootstrap: se remuestrean bloques para preservar dependencia local, se vuelve a ejecutar la detección y se obtiene una distribución de las posiciones estimadas.

    A partir de ella pueden construirse intervalos de confianza para la localización del changepoint.

    Incertidumbre sobre la existencia del cambio

    En BOCPD la pregunta puede plantearse directamente en términos probabilísticos: ¿qué probabilidad posterior existe de que un cambio haya ocurrido en este momento?

    Esa información puede ser más útil operacionalmente que un simple “sí/no”, especialmente cuando las decisiones dependen del costo de una falsa alarma.

    R por fuera, Julia por dentro cuando hace falta velocidad

    El paquete incorpora un backend opcional en Julia para varios de sus algoritmos principales.

    init_julia()
    
    julia_available()

    Según la documentación, el backend incluye implementaciones de PELT, FPOP, BOCPD, CUSUM, Kernel CPD, WBS y PELT multivariado.

    Para conjuntos grandes el paquete puede despachar automáticamente el cálculo hacia Julia, mientras mantiene la interfaz en R. Si Julia no está disponible, vuelve a la implementación en R.

    La implementación también incorpora técnicas de estabilidad numérica como el algoritmo de Welford para media y varianza acumuladas, suma compensada de Kahan y cálculos en dominio logarítmico para evitar underflow en BOCPD.

    Evaluar un detector también requiere más de una métrica

    Cuando conocemos los changepoints verdaderos —por ejemplo en simulaciones— RegimeChange puede evaluar los resultados mediante varias medidas.

    metrics <- evaluate(
      result,
      true_changepoints = c(100, 250),
      tolerance = 10
    )
    
    print(metrics)

    El marco incluye:

    • precision;
    • recall;
    • F1;
    • distancia de Hausdorff;
    • Rand Index;
    • Adjusted Rand Index;
    • covering metric.

    compare_methods() permite además aplicar varios algoritmos a la misma serie y compararlos bajo un formato común.

    ¿Qué método elegir?

    Situación Opción sugerida por la documentación
    Datos limpios y cambios claros de media PELT
    Outliers o colas pesadas PELT con robust = TRUE o "auto"
    Serie autocorrelacionada PELT con correct_ar = TRUE
    Detección en tiempo real BOCPD o CUSUM
    Necesitamos probabilidad de cambio BOCPD
    Queremos un enfoque no paramétrico E-Divisive o Kernel CPD
    Patrones complejos y no lineales Métodos de deep learning
    No sabemos qué método elegir Ensemble o method = "auto"

    Instalación

    RegimeChange puede instalarse desde GitHub:

    # install.packages("devtools")
    
    devtools::install_github(
      "IsadoreNabi/RegimeChange"
    )

    La documentación indica R 4.0.0 o posterior como requisito base. El backend Julia es opcional y requiere Julia 1.6 o posterior junto con JuliaCall. Los detectores de deep learning requieren keras y tensorflow.

    La cuestión de fondo: ¿cuánta sorpresa hace falta para decir que el mundo cambió?

    Hay una forma interesante de interpretar todo este problema.

    Cada nueva observación proporciona evidencia acerca de dos posibilidades: el sistema sigue funcionando bajo el mismo régimen o algo cambió.

    Los distintos métodos formalizan esa evidencia de maneras diferentes. CUSUM la acumula. PELT busca la segmentación óptima. BOCPD actualiza una distribución posterior. Los detectores neuronales observan cuándo una representación aprendida deja de describir bien los datos nuevos.

    Pero la pregunta conceptual permanece: ¿la desviación que estamos viendo es suficientemente improbable bajo el régimen anterior como para justificar afirmar que el proceso ya no es el mismo?

    Y en aplicaciones reales esa respuesta nunca depende exclusivamente de la estadística. También depende de qué cuesta equivocarse.

    Ésa es la apuesta de RegimeChange: convertir la detección de cambios de régimen en un problema que pueda abordarse desde varios paradigmas sin abandonar una interfaz común, incorporando robustez, cuantificación de incertidumbre, evaluación comparativa y detección online. El objetivo no es simplemente señalar un punto rojo sobre una serie temporal, sino responder con mayor rigor tres preguntas: si realmente hubo un cambio, dónde ocurrió y cuánta confianza deberíamos depositar en esa conclusión.

    RegimeChange está disponible en GitHub. La documentación del paquete incluye guías de introducción, detección offline, métodos bayesianos y benchmarks comparativos.

  • Extracción de Señales del Ruido: Cómo SignalY Aborda Tres Problemas Complejos en Datos de Panel

    Extracción de Señales del Ruido: Cómo SignalY Aborda Tres Problemas Complejos en Datos de Panel

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

    Econometría · Extracción de señales · Series temporales multivariadas

    Del ruido a la estructura: cómo SignalY busca la señal oculta en datos complejos

    Un paquete de R que reúne selección bayesiana de variables, descubrimiento de factores, wavelets, descomposición empírica, filtrado bayesiano y pruebas de persistencia en un mismo flujo para paneles y series temporales multivariadas.

    Desarrollado por José Mauricio Gómez Julián · Licencia MIT · GitHub

    Imaginemos una matriz con cincuenta columnas y apenas unos cientos de observaciones. Cada columna representa un indicador macroeconómico, financiero o político. Sabemos que, en alguna parte de esa matriz, existe una señal que merece nuestra atención. El problema es que también hay ruido, redundancia, tendencias comunes y variables que parecen importantes únicamente porque se mueven junto con otras.

    Entonces aparecen tres preguntas distintas, pero estrechamente conectadas: ¿qué variables importan realmente?, ¿qué estructura latente existe detrás de ellas? y ¿qué tan persistentes son las señales que terminamos extrayendo?

    Normalmente responderlas obliga a saltar entre varios paquetes: uno para selección de variables, otro para PCA, otro para filtros, otro para pruebas de raíz unitaria y otro para visualizar resultados.

    SignalY nace precisamente para reducir esa fragmentación. Su idea no es inventar de nuevo cada uno de esos métodos, sino organizarlos dentro de un marco coherente donde las diferentes etapas del análisis puedan comunicarse entre sí.

    La idea en una frase

    SignalY intenta convertir una tarea fragmentada — seleccionar, descomponer y caracterizar una señal— en un único flujo reproducible de análisis estadístico.

    Tres preguntas, tres pilares

    Selección: ¿cuáles de todas las variables disponibles contienen información estructural y cuáles pueden considerarse principalmente ruido?

    Descomposición: una vez identificada o construida la señal, ¿qué parte corresponde a tendencia, ciclos de distintas frecuencias y fluctuaciones residuales?

    Persistencia: ¿los componentes extraídos son estacionarios, poseen raíz unitaria o se encuentran en una zona fronteriza cercana a la no estacionariedad?

    Primer pilar: ¿qué variables importan?

    En un problema de alta dimensión podemos tener decenas de predictores, aunque sólo unos pocos contengan la señal que realmente interesa. Una regresión convencional puede intentar asignar un coeficiente a todos, pero con muestras moderadas eso abre rápidamente la puerta al sobreajuste.

    SignalY aborda el problema mediante regresión bayesiana dispersa con prior Horseshoe.

    La intuición detrás de la Horseshoe

    La prior Horseshoe pertenece a la familia de priors global-local shrinkage. Su objetivo es ejercer mucha presión sobre los coeficientes pequeños —probablemente asociados a ruido— y, simultáneamente, permitir que las señales fuertes escapen de esa contracción.

    Podemos representar la idea esquemáticamente como:

    $$ \beta_j \sim \mathcal{N} \left( 0, \tau^2 \lambda_j^2 \right) $$

    donde $\tau$ controla la contracción global y $\lambda_j$ permite una adaptación local para cada coeficiente.

    Si la evidencia a favor de una variable es débil, la fuerza global puede empujar su coeficiente hacia cero. Si existe una señal suficientemente fuerte, su parámetro local puede permitir que sobreviva.

    La intuición

    En lugar de preguntar “¿incluyo o elimino esta variable?” antes de estimar, la Horseshoe plantea algo más gradual: ¿cuánto debe contraerse cada coeficiente dada la información disponible?

    Una posterior no selecciona variables por sí sola

    Ajustar una prior de contracción es apenas la primera parte del problema. Todavía necesitamos convertir las distribuciones posteriores en alguna regla práctica para determinar qué variables conservar.

    SignalY incluye cuatro estrategias distintas.

    Projection predictive selection

    Proyecta la distribución posterior del modelo completo sobre modelos más pequeños y busca el subconjunto mínimo cuyo desempeño predictivo permanezca suficientemente próximo al modelo de referencia.

    Intervalos creíbles

    Conserva variables cuyos intervalos posteriores no incluyen cero. Es una estrategia sencilla de interpretar, aunque puede resultar conservadora cuando la dimensión es alta.

    Selección por contracción

    Utiliza la intensidad de shrinkage —representada mediante cantidades como $\kappa$— para detectar qué variables consiguieron escapar sustancialmente de la contracción.

    Selección por magnitud

    Aplica un filtro basado directamente en el tamaño del efecto, útil como cribado inicial o como complemento a las decisiones bayesianas.

    La ventaja de ofrecer las cuatro dentro del mismo sistema es que el investigador puede comprobar hasta qué punto una selección depende de una única definición de “variable importante”.

    Otra pregunta: quizá las cincuenta variables sean la manifestación de tres factores

    No todo problema de alta dimensión exige seleccionar columnas individualmente. A veces muchas variables son expresiones diferentes de unos pocos procesos latentes.

    SignalY incorpora dos estrategias para explorar esta posibilidad.

    PCA + block bootstrap

    La componente principal resume variación común, mientras que el bootstrap por bloques intenta respetar la dependencia temporal al construir medidas de incertidumbre.

    Dynamic Factor Model

    Utiliza criterios de información de Bai y Ng para determinar el número de factores estáticos y posteriormente modela su evolución mediante un VAR.

    Topología informacional

    El módulo de PCA incorpora además análisis basados en entropía para caracterizar el contenido informativo de los componentes extraídos.

    La diferencia es importante. PCA ayuda a encontrar direcciones de máxima variación común. Un modelo factorial dinámico intenta además describir cómo evolucionan temporalmente esos factores.

    Segundo pilar: una serie no es una sola cosa

    Después de seleccionar variables o construir una señal compuesta aparece una nueva pregunta: ¿qué estructura interna tiene esa serie?

    Una observación temporal puede mezclar tendencia secular, oscilaciones de mediano plazo, ciclos rápidos y ruido. SignalY ofrece tres maneras metodológicamente diferentes de intentar separarlos.

    Wavelets: mirar el tiempo y la escala simultáneamente

    Una transformada de Fourier representa una señal mediante ondas sinusoidales que se extienden indefinidamente. Eso es extremadamente útil para identificar frecuencias, pero sacrifica localización temporal: sabemos qué frecuencia existe, pero no necesariamente cuándo aparece.

    Las wavelets utilizan oscilaciones localizadas. SignalY implementa la Maximal Overlap Discrete Wavelet Transform (MODWT) con wavelets de Daubechies.

    La descomposición produce componentes de detalle:

    $$ D_1,\;D_2,\;D_3,\;\ldots,\;D_J $$

    y una aproximación suave:

    $$ S_J. $$

    Los primeros niveles recogen variaciones relativamente rápidas; al avanzar hacia escalas mayores aparecen oscilaciones progresivamente más lentas. El componente suave representa la estructura de baja frecuencia.

    Una ventaja de MODWT es que no realiza downsampling: cada escala conserva la longitud temporal de la serie original.

    SignalY calcula además una descomposición de la varianza por escala. Esto permite preguntar si la dinámica de una serie está dominada por fluctuaciones rápidas, ciclos intermedios o movimiento de largo plazo.

    EMD: dejar que la propia serie decida cómo descomponerse

    La Empirical Mode Decomposition adopta una filosofía casi opuesta. En lugar de imponer una familia matemática de funciones base, construye los componentes directamente a partir de la geometría local de los datos.

    El algoritmo identifica máximos y mínimos locales, construye envolventes y aplica sucesivamente un procedimiento de sifting para extraer Intrinsic Mode Functions o IMFs.

    De forma esquemática:

    $$ x(t) = \sum_{k=1}^{K} \mathrm{IMF}_k(t) + r(t) $$

    donde $r(t)$ es el residuo o tendencia restante.

    Esto vuelve a EMD especialmente interesante cuando la serie es no estacionaria, no lineal o posee frecuencias que cambian con el tiempo.

    La flexibilidad tiene un costo. EMD puede ser sensible a efectos de borde y al llamado mode mixing, por lo que los componentes extraídos no deberían interpretarse mecánicamente.

    HP-GC: un Hodrick-Prescott donde $\lambda$ deja de ser una elección arbitraria

    El filtro Hodrick-Prescott tradicional es familiar para muchos macroeconomistas. También lo es una de sus críticas más recurrentes: el usuario tiene que escoger un parámetro de suavizado $\lambda$.

    La regla $\lambda=1600$ para datos trimestrales es famosa, pero sigue siendo una regla fijada externamente.

    SignalY incorpora el enfoque de componentes no observados de Grant y Chan, estimado mediante MCMC.

    La señal puede conceptualizarse como:

    $$ y_t = \tau_t + c_t + \varepsilon_t $$

    donde $\tau_t$ representa la tendencia y $c_t$ el ciclo. La tendencia se regula mediante sus segundas diferencias, mientras que el ciclo se modela como un proceso AR(2).

    La diferencia decisiva es que $\lambda$ se estima a partir de los datos mediante MCMC en lugar de fijarse manualmente.

    El resultado incluye distribuciones posteriores para tendencia, ciclo y residuo, de modo que la descomposición incorpora también incertidumbre.

    Tres filtros, una misma serie: ¿por qué no escoger simplemente el mejor?

    SignalY incluye filter_all(), que aplica wavelets, EMD y HP-GC a la misma serie y devuelve los resultados en un formato comparable.

    Esto es más que una comodidad de programación.

    La idea metodológica

    Si un componente aparece bajo varias descomposiciones con supuestos diferentes, tenemos más razones para considerarlo una propiedad robusta de la señal. Si aparece únicamente bajo un filtro, puede ser una característica dependiente del método.

    Wavelets parten de una base predeterminada. EMD deja que la descomposición sea guiada por los propios datos. HP-GC utiliza un modelo probabilístico de componentes no observados. No responden exactamente la misma pregunta y por eso compararlos puede resultar más informativo que declarar a uno universalmente superior.

    Tercer pilar: ¿la señal vuelve a su centro o se aleja indefinidamente?

    Extraer una tendencia o un ciclo no termina el análisis. Para modelar correctamente un componente necesitamos conocer su régimen de persistencia.

    Un proceso estacionario y un random walk pueden parecer similares en una muestra corta y, sin embargo, tienen propiedades estadísticas muy diferentes.

    Por eso SignalY ejecuta una batería de cuatro pruebas de raíz unitaria.

    Prueba Hipótesis nula Qué aporta
    ADF Existe raíz unitaria Es la prueba clásica de Dickey-Fuller aumentada y depende de la especificación de rezagos.
    Phillips-Perron Existe raíz unitaria Introduce una corrección no paramétrica frente a correlación serial y heterocedasticidad.
    KPSS La serie es estacionaria Invierte la hipótesis nula, lo que la hace especialmente útil como contraste de las pruebas anteriores.
    ERS Existe raíz unitaria La prueba Elliott-Rothenberg-Stock busca mayor potencia en alternativas cercanas a la unidad.

    Por qué cuatro pruebas pueden ser mejores que una

    El problema es que ninguna prueba individual es definitiva. ADF y Phillips-Perron pueden tener poca potencia cuando el proceso se encuentra muy cerca de una raíz unitaria.

    KPSS parte, en cambio, de la hipótesis nula opuesta. Esa asimetría permite utilizar los resultados conjuntamente.

    SignalY resume la evidencia con una lógica del tipo:

    Estacionaria

    ADF, PP o ERS ofrecen evidencia contra la raíz unitaria y KPSS no rechaza estacionariedad.

    Raíz unitaria

    Las pruebas con raíz unitaria como nula no logran rechazarla y KPSS sí rechaza la hipótesis de estacionariedad.

    Zona fronteriza

    Los resultados son mixtos o inconsistentes entre pruebas, sugiriendo un proceso potencialmente cercano a la unidad.

    Transparencia

    La clasificación automática no oculta las pruebas originales: estadísticas y valores p permanecen disponibles para inspección.

    El punto de unión: signal_analysis()

    Todos estos módulos pueden utilizarse de manera independiente, pero el diseño de SignalY cobra sentido cuando se encadenan.

    La función signal_analysis() funciona como orquestador:

    result <- signal_analysis(
      data = data,
      y_formula = Y ~ X1 + X2 + X3,
      methods = c(
        "wavelet",
        "emd",
        "pca",
        "dfm",
        "unitroot"
      ),
      verbose = TRUE
    )

    Una llamada puede combinar:

    • selección o reducción de columnas;
    • descubrimiento de factores;
    • descomposición temporal;
    • análisis de persistencia;
    • resúmenes y visualizaciones dentro de una estructura común.

    Los objetos resultantes incluyen métodos como print(), summary() y plot(), y las visualizaciones pueden mostrar perfiles de coeficientes, cargas de PCA, factores dinámicos y componentes de los filtros.

    ¿Cómo sabemos que los procedimientos recuperan lo que deberían?

    La documentación incluye experimentos sobre datos sintéticos con estructura verdadera conocida. Esto es importante: si sabemos de antemano qué variables, factores o ciclos generaron los datos, podemos medir qué tan bien los recupera cada método.

    Tarea sintética Método Resultado documentado
    Recuperar 3 factores latentes PCA / DFM Correlación $$r>0.95$$ y recuperación exacta del número de factores.
    Seleccionar 5 variables entre 50 Horseshoe $F1>0.85$ y precisión superior a $0.90$.
    Recuperar una tendencia logarítmica EMD Correlación $r>0.95$ con la tendencia verdadera.
    Extraer un ciclo multiescala Wavelet $D_3+D_4$ Correlación $r>0.70$ con el ciclo verdadero.
    Tendencia estocástica + ciclo AR(2) HP-GC bayesiano Tendencia $r>0.90$; ciclo $r>0.50$.
    Clasificación de estacionariedad Batería de raíz unitaria 4 de 4 casos sintéticos clasificados correctamente.
    Cómo interpretar estos números

    Son pruebas de recuperación sobre simulaciones. Demuestran que, bajo los escenarios sintéticos evaluados, los métodos pueden recuperar estructuras conocidas. No implican que la misma precisión esté garantizada en cualquier conjunto de datos del mundo real.

    ¿Quién puede sacar provecho de SignalY?

    Economistas

    Para paneles y sistemas multivariados donde interesa separar predictores relevantes, factores comunes, ciclos y tendencias antes de especificar modelos posteriores.

    Investigación cuantitativa

    Para finanzas, macroeconomía o economía política cuando existen conjuntos de predictores amplios y la selección ad hoc resulta difícil de justificar.

    Ciencia de datos

    Para señales no estacionarias, no lineales o multiescala donde se necesita algo más que una rutina puramente descriptiva de procesamiento digital.

    Un flujo mínimo

    La instalación y una primera ejecución pueden ser muy compactas:

    # Instalar desde GitHub
    remotes::install_github("IsadoreNabi/SignalY")
    
    library(SignalY)
    
    # Preparar un data frame
    data <- data.frame(
      Y = as.vector(Y),
      X
    )
    
    # Flujo mínimo
    result <- signal_analysis(
      data = data,
      y_formula = "Y",
      methods = c(
        "pca",
        "wavelet",
        "unitroot"
      )
    )
    
    plot(result)

    SignalY está distribuido bajo licencia MIT y está diseñado para trabajar con estructuras de datos habituales de R.

    La cuestión metodológica de fondo

    Ninguno de los elementos centrales de SignalY existe exclusivamente dentro del paquete. La Horseshoe tiene una literatura propia. PCA y los modelos factoriales dinámicos poseen décadas de desarrollo. MODWT, EMD, el filtro HP y las pruebas de raíz unitaria son herramientas establecidas.

    La propuesta está en cómo se conectan.

    Podemos comenzar con cincuenta variables, utilizar shrinkage para identificar aquellas que contienen mayor señal, descubrir después factores latentes comunes, descomponer la serie resultante en escalas temporales y, finalmente, preguntarnos si cada componente es estacionario o persistente.

    También podemos someter la misma serie a wavelets, EMD y HP-GC y observar qué estructuras aparecen bajo los tres enfoques.

    O podemos obtener factores dinámicos y estudiar después el régimen de persistencia de cada uno antes de utilizarlos en una etapa econométrica posterior.

    Ésa es la idea central de SignalY: la extracción de señal no debería entenderse como una colección de procedimientos aislados. Seleccionar variables cambia qué señal vemos; descomponerla cambia qué escalas estudiamos; y determinar su persistencia cambia qué modelos pueden ser apropiados después. El valor del paquete está en convertir esas decisiones sucesivas en un flujo coherente, comparable y reproducible.

    SignalY es desarrollado por José Mauricio Gómez Julián y se distribuye bajo licencia MIT. El código fuente, la documentación y la wiki están disponibles en GitHub.

  • EconCausal: Un Paquete de R Que Toma En Serio la Inferencia Causal en Series Temporales.

    EconCausal: Un Paquete de R Que Toma En Serio la Inferencia Causal en Series Temporales.

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

    Inferencia causal · Series temporales · Validación predictiva

    Una relación estadística no basta: cómo EconCausal intenta comprobar si sobrevivirá al futuro

    Un paquete de R que integra modelos de corrección de errores, regresión no lineal, series temporales estructurales bayesianas, errores autorregresivos y validación temporal dentro de un protocolo reproducible para evaluar relaciones causales en series temporales.

    EconCausal · R · Econometría aplicada · GitHub

    Encontramos una relación en nuestros datos. Es estadísticamente significativa. Los coeficientes parecen razonables. Tal vez incluso encaje perfectamente con la teoría. Pero todavía queda una pregunta incómoda: ¿seguirá apareciendo dentro de seis meses, cuando el modelo tenga que enfrentarse a datos que aún no existen?

    Esta pregunta es especialmente importante en economía. Las relaciones temporales que parecen sólidas dentro de una muestra pueden desaparecer cuando cambia el régimen macroeconómico, cuando llega una crisis o, sencillamente, cuando el modelo deja de describir el pasado y tiene que predecir el futuro.

    EconCausal fue construido alrededor de ese problema. Su objetivo no es ofrecer un nuevo botón que convierta correlaciones en causalidad, sino imponer un procedimiento más exigente: preanalizar los datos, estimar la relación desde varios marcos metodológicos y obligarla a sobrevivir a pruebas temporales antes de aceptarla.

    La idea en una frase

    EconCausal funciona como una especie de línea de control de calidad para afirmaciones causales en series temporales: una relación candidata debe superar una secuencia explícita de pruebas antes de recibir luz verde.

    El problema: correlación hoy no significa estabilidad mañana

    Una regresión convencional puede indicarnos que dos variables se mueven juntas. Pero una covariación estadística no nos dice automáticamente por qué ocurre, en qué dirección opera la relación ni si seguirá apareciendo cuando cambien las condiciones económicas.

    En series temporales existe además una dificultad adicional: las observaciones no son intercambiables. El año 2020 viene después de 2019. El trimestre siguiente depende, en mayor o menor medida, de la historia anterior. Ignorar esta estructura puede generar resultados que parecen mucho más robustos de lo que realmente son.

    EconCausal aborda el problema combinando tres marcos metodológicos distintos. Ninguno de ellos pretende monopolizar el significado de causalidad; la idea es obtener perspectivas complementarias sobre una misma relación.

    ECM-MARS

    Combina corrección de errores y cointegración con Multivariate Adaptive Regression Splines para capturar ajustes no lineales entre equilibrio de largo plazo y dinámica de corto plazo.

    BSTS

    Descompone la serie en componentes estructurales dentro de un marco bayesiano y permite construir distribuciones contrafactuales y pronósticos con incertidumbre explícita.

    BGLM-AR(1)

    Ajusta un modelo lineal generalizado bayesiano mientras representa explícitamente la dependencia temporal de los errores mediante una estructura autorregresiva de primer orden.

    Primera vía: ECM-MARS y la diferencia entre corto y largo plazo

    Muchas variables económicas pueden alejarse entre sí durante períodos relativamente cortos y, sin embargo, mantener una relación de equilibrio a largo plazo.

    Ésta es precisamente la intuición detrás de un Modelo de Corrección de Errores o ECM. Si dos variables están cointegradas, sus movimientos de corto plazo pueden desviarse, pero existe alguna fuerza de ajuste que impide que esa divergencia crezca indefinidamente.

    En su forma conceptual más sencilla, podemos imaginar:

    $$ \Delta Y_t = \alpha + \lambda \left( Y_{t-1} – \beta X_{t-1} \right) + \gamma \Delta X_t + \varepsilon_t $$

    El término entre paréntesis representa el desequilibrio acumulado respecto de la relación de largo plazo. El parámetro $\lambda$ refleja la velocidad con la que el sistema responde a ese desequilibrio.

    El problema es que la respuesta real puede no ser lineal. Una economía podría tolerar pequeñas desviaciones durante bastante tiempo y reaccionar bruscamente cuando se cruza cierto umbral.

    Ahí aparece MARS —Multivariate Adaptive Regression Splines—. En lugar de obligar al ajuste a seguir una única pendiente lineal, MARS puede encontrar automáticamente regiones y umbrales donde la dinámica cambia.

    Intuición

    ECM aporta la arquitectura económica del equilibrio de largo plazo y la corrección de corto plazo; MARS permite que el mecanismo de ajuste sea flexible y potencialmente no lineal.

    Antes de estimar, hay que demostrar que el problema está bien planteado

    EconCausal no lanza automáticamente un ECM sobre cualquier par de series. Antes, el protocolo comprueba las condiciones que justifican un análisis de cointegración.

    Comprueba si las variables son integradas de orden uno, $I(1)$, condición previa para el análisis de cointegración utilizado por este procedimiento.

    Ejecuta las pruebas de cointegración de Engle-Granger y Johansen.

    Aplica una regla de tipo either: si cualquiera de las dos pruebas proporciona evidencia suficiente de cointegración, el análisis puede continuar.

    Controla correlación serial y heterocedasticidad mediante errores estándar consistentes HAC.

    Ajusta el ECM utilizando MARS como motor de regresión.

    Somete posteriormente la relación a validación temporal mediante ventanas de origen móvil.

    La utilización conjunta de Engle-Granger y Johansen es deliberada. Engle-Granger es relativamente directo, mientras que Johansen puede manejar estructuras de cointegración más ricas en contextos multivariados. El protocolo prefiere utilizar ambas perspectivas en lugar de hacer depender todo el análisis de una sola prueba.

    Segunda vía: BSTS y el contrafactual

    La segunda familia metodológica cambia la pregunta. En lugar de concentrarse primero en cointegración y corrección de errores, un modelo de Bayesian Structural Time Series representa la serie como un sistema de componentes estructurales.

    Conceptualmente, podemos pensar en una descomposición como:

    $$ Y_t = \mu_t + \tau_t + \mathbf{x}_t^{\top}\boldsymbol{\beta} + \varepsilon_t $$

    donde $\mu_t$ puede representar el nivel o tendencia, $\tau_t$ algún componente temporal adicional y $\mathbf{x}_t^{\top}\boldsymbol{\beta}$ el efecto de variables predictoras.

    Esta representación resulta especialmente útil para inferencia causal cuando queremos formular una pregunta contrafactual: ¿qué habría ocurrido con la variable analizada si una intervención o cambio determinado no hubiese sucedido?

    EconCausal incorpora además priors spike-and-slab, que realizan selección probabilística de variables. En lugar de incluir automáticamente todos los predictores o eliminarlos mediante procedimientos stepwise, el modelo estima qué variables tienen mayor probabilidad de pertenecer a la estructura predictiva.

    Al ser bayesiano, el resultado no es solamente una predicción puntual. Se obtiene una distribución posterior, lo que permite expresar explícitamente la incertidumbre asociada al contrafactual.

    Tercera vía: BGLM-AR(1) y el problema de los errores que recuerdan el pasado

    Uno de los errores más comunes en econometría aplicada consiste en estimar una regresión como si los residuos de un período no tuviesen ninguna relación con los del período anterior.

    En muchos procesos económicos esto es poco plausible.

    EconCausal incorpora por ello un Bayesian Generalized Linear Model con errores AR(1). Una representación básica de la estructura residual es:

    $$ \varepsilon_t = \rho\varepsilon_{t-1} + \eta_t, \qquad |\rho|<1 $$

    Si $\rho$ es distinto de cero, parte del error actual está relacionado con el error del período anterior.

    Ignorar esa dependencia puede generar intervalos excesivamente estrechos y una falsa sensación de precisión. Modelarla explícitamente permite que la incertidumbre estadística refleje mejor la estructura temporal de los datos.

    La estimación se realiza mediante Hamiltonian Monte Carlo a través de Stan, con priors débilmente informativas calibradas para variables estandarizadas.

    La regla que hace distinto al protocolo: no basta con mejorar una sola métrica

    Uno de los elementos centrales de EconCausal es su criterio dual de evaluación.

    Una relación candidata no se considera respaldada simplemente porque obtenga mejores predicciones puntuales, ni porque mejore la distribución predictiva. Debe mejorar simultáneamente ambas dimensiones.

    1. Densidad predictiva — ELPD

    Se evalúa la calidad de la distribución predictiva mediante Expected Log Predictive Density, utilizando PSIS-LOO cuando corresponde.

    2. Precisión puntual — RMSE

    También debe mejorar la precisión de los pronósticos puntuales, evaluada mediante Root Mean Squared Error.

    Esto importa porque ambos criterios responden preguntas distintas. Un modelo podría reducir el RMSE y, al mismo tiempo, producir una distribución de incertidumbre peor calibrada. Otro podría representar muy bien la incertidumbre, pero producir predicciones centrales peores.

    EconCausal exige superar ambos filtros.

    La prueba decisiva: dejar que el futuro haga de árbitro

    El rasgo más característico del protocolo aparece en la validación. Una relación temporal no se considera estable porque haya funcionado en una única partición de entrenamiento y prueba.

    El paquete utiliza validación Leave-Future-Out con ventanas y horizontes configurables.

    La lógica es:

    $$ \underbrace{ y_1,\ldots,y_t }_{\text{entrenamiento}} \quad\longrightarrow\quad \underbrace{ y_{t+1},\ldots,y_{t+h} }_{\text{futuro}} $$

    Después el punto de corte avanza y el proceso se repite:

    Se entrena utilizando únicamente información disponible hasta cierto momento.

    Se pronostican observaciones estrictamente posteriores.

    Se calcula el desempeño predictivo.

    La frontera temporal avanza.

    El procedimiento se repite en múltiples ventanas.

    El resultado incluye una medida de soporte temporal: la proporción de ventanas en las que la relación continúa satisfaciendo los criterios establecidos.

    Por qué esto importa

    Una relación que funciona magníficamente en una única ventana puede ser casualidad. Una relación que reaparece sistemáticamente cuando el modelo debe predecir distintos segmentos futuros ofrece una evidencia mucho más difícil de atribuir a una partición afortunada de la muestra.

    Menos libertad invisible para el investigador

    Buena parte del análisis aplicado contiene decisiones que el lector nunca llega a observar: qué transformación se probó primero, qué ventana se descartó, qué modelo alternativo se abandonó, qué umbral se modificó después de mirar los resultados.

    Este problema suele describirse como researcher degrees of freedom.

    EconCausal intenta reducirlos mediante un protocolo explícito: prepruebas, reglas de aceptación, umbrales y procedimientos de validación están integrados dentro del mismo flujo reproducible.

    Esto no elimina el juicio científico. Pero vuelve más visible qué reglas condujeron desde los datos hasta la conclusión.

    ¿Dónde está la novedad?

    No en inventar desde cero Engle-Granger, Johansen, MARS, BSTS, modelos AR(1), Stan, PSIS-LOO o validación temporal.

    Todas estas herramientas tienen antecedentes bien establecidos.

    Según una evaluación de novedad incluida en la documentación del paquete, la contribución reside en la combinación de esos componentes dentro de un protocolo end-to-end concreto, con prepruebas, reglas duales de decisión, umbrales de soporte y validación temporal.

    Esa distinción es importante: la afirmación metodológica no es “hemos inventado nuevas matemáticas”, sino “hemos convertido varias técnicas existentes en un procedimiento único, explícito y auditable”.

    ¿Quién podría utilizar EconCausal?

    Aunque el paquete fue desarrollado inicialmente para investigación económica, el problema que intenta resolver es mucho más general: relaciones direccionales entre variables observadas a lo largo del tiempo.

    Macroeconomía

    Para estudiar relaciones entre producción, precios, salarios, inversión, crédito, empleo u otras variables con dinámica temporal.

    Política pública

    Para evaluar si una relación asociada a una intervención permanece estable bajo distintos contextos económicos.

    Finanzas

    Para diferenciar una asociación histórica aparente de una relación que mantiene capacidad predictiva fuera de muestra.

    También puede servir como herramienta pedagógica para estudiantes de econometría e inferencia causal, precisamente porque obliga a recorrer etapas que en un análisis manual resultan fáciles de omitir.

    Instalación

    El paquete puede instalarse directamente desde GitHub:

    # Instalar desde GitHub
    remotes::install_github("IsadoreNabi/EconCausal")
    
    # En Windows, si falla la construcción de las viñetas:
    remotes::install_github(
      "IsadoreNabi/EconCausal",
      build_vignettes = FALSE
    )

    EconCausal utiliza una infraestructura bayesiana moderna, incluyendo cmdstanr para muestreo HMC, loo para cálculos PSIS-LOO y bsts para los componentes de series temporales estructurales.

    Lo que EconCausal no puede hacer por vos

    Un protocolo riguroso no convierte datos pobres en datos excelentes.

    Si la muestra es demasiado pequeña, las variables contienen errores de medición importantes o existen rupturas estructurales tan fuertes que destruyen la relación estudiada, ningún paquete estadístico puede eliminar mágicamente esas limitaciones.

    Tampoco sustituye el conocimiento del dominio.

    Que una relación sea estable, direccional y predictivamente robusta es una evidencia importante, pero una interpretación causal todavía necesita un mecanismo teórico, una consideración seria de variables confusoras y una evaluación de los supuestos identificadores.

    Límite fundamental

    EconCausal intenta disciplinar la inferencia estadística. No puede decidir por sí solo qué mecanismo causal existe en el mundo real.

    La cuestión de fondo

    En análisis temporal es relativamente fácil encontrar relaciones que describen bien el pasado. Lo difícil es encontrar relaciones que permanezcan cuando llega información nueva.

    EconCausal desplaza por ello parte del énfasis metodológico desde “¿obtuvimos significancia?” hacia una pregunta más dura: “¿esta relación sigue funcionando cuando le pedimos que sobreviva fuera de la muestra donde la descubrimos?”

    Esa diferencia puede parecer pequeña, pero cambia la filosofía del análisis. La significancia estadística deja de ser la meta final y se convierte apenas en una pieza dentro de una cadena de validación mucho más amplia.

    La contribución de EconCausal está en el protocolo. ECM-MARS, BSTS, modelos bayesianos con errores AR(1), HMC, PSIS-LOO, RMSE y validación Leave-Future-Out ya pertenecen al repertorio de la econometría moderna. Lo distintivo es obligarlos a trabajar juntos bajo reglas explícitas y reproducibles, de modo que una relación no sea aceptada porque se vea convincente en una muestra, sino porque resista una batería organizada de pruebas y mantenga apoyo cuando se enfrenta al futuro.

    EconCausal está disponible en GitHub. Las metodologías subyacentes se apoyan, entre otros trabajos, en Engle & Granger (1987), Johansen (1991), Friedman (1991), Scott & Varian (2014), Vehtari et al. (2017) y Hyndman & Athanasopoulos (2021).