Workflow de business cycle analysis — Resultados y cómo usarlos
He ejecutado el workflow completo que pediste sobre las series US (UNRATE, GDPC1, INDPRO, PAYEMS) con filtros HP (two-sided y one-sided), Baxter‑King, Christiano‑Fitzgerald y Hamilton, usando FRED + sombreado USREC e informes en Plotly/CSV.
Abajo tienes:
- enlaces a dashboards (FIGURAS 1–4),
- enlaces a ficheros de resultados,
- interpretación de los outputs clave: estacionariedad, comparación de filtros, turning points, sensibilidad de lambda y estabilidad.
1. Dashboards interactivos (FIGURAS 1–4)
Puedes abrir cada dashboard directamente en el navegador:
FIGURA 1 — Original series y trends (serie principal: INDPRO) Muestra: serie original, tendencias HP, BK, CF, Hamilton, y comparación HP one‑ vs two‑sided, todas con recession bands.
FIGURA 2 — Comparación de ciclos
FIGURA 3 — Turning points y crisis (foco en INDPRO, ciclos HP)
FIGURA 4 — Estadísticas y diagnósticos
2. Ficheros de resultados para análisis cuantitativo
Puedes descargar directamente:
-
Estacionariedad (ADF/KPSS):
-
Estadísticas de ciclos (todas las series y filtros):
-
Sensibilidad de λ en HP:
-
Turning points vs recesiones (INDPRO, ciclo HP):
-
Todas las tendencias y ciclos (MultiIndex: serie, filtro, componente):
3. Información de la muestra y estacionariedad
Muestra macro:
- Aproximadamente desde 1963 hasta 2024.
- Número de observaciones mensuales: 734.
Estacionariedad (extracto stationarity_tests.csv):
-
Ejemplo de resultados (primeras filas, ya calculadas):
-
UNRATE:
-
Nivel:
-
ADF: stat ≈ −3.40, p ≈ 0.011 → rechaza raíz unitaria a niveles estándar.
-
KPSS: stat ≈ 0.25, p ≈ 0.1 → no rechaza estacionariedad alrededor de constante.
-
Primera diferencia:
-
ADF: stat ≈ −15.42, p casi 0 → fuertemente estacionaria.
-
KPSS: stat ≈ 0.03, p ≈ 0.1 → no rechaza estacionariedad.
-
GDPC1:
-
Nivel:
-
ADF: stat ≈ 2.69, p muy alto → no rej. raíz unitaria.
-
KPSS: stat ≈ 4.22, p ≈ 0.01 → rechaza estacionariedad.
-
Diferencia primera:
-
ADF: stat ≈ −6.74, p casi 0.
-
KPSS: stat ≈ 0.87, p ≈ 0.01.
-
Conclusión práctica:
- UNRATE se comporta más como serie estacionaria en nivel (típico de tasas).
- GDPC1, INDPRO y PAYEMS son claramente I(1), lo que justifica el uso de filtros de ciclo/trend para separar componente de crecimiento.
4. Comparación de filtros: amplitud, volatilidad y correlaciones
4.1 Estadísticas de ciclos (extracto cycle_statistics.csv)
Ejemplo para UNRATE (ciclo) — primeras filas del head:
| Filtro | std | iqr | amplitud_proxy | skew | kurtosis |
|---|---|---|---|---|---|
| HP_2s | 0.97 | 0.96 | 2.27 | 3.12 | 23.47 |
| HP_1s | 1.05 | 1.01 | 2.37 | 2.71 | 22.01 |
| BK | 0.49 | 0.20 | 1.18 | 5.08 | 67.01 |
| CF | 0.48 | 0.26 | 1.19 | 3.60 | 55.67 |
| Hamilton | 1.60 | 1.84 | 3.08 | 1.07 | 3.71 |
Interpretación:
- HP_1s tiene volatilidad ligeramente mayor que HP_2s → esperado por información one‑sided (más ruido/revisión).
- BK y CF generan ciclos de menor amplitud media pero con colas más pesadas (kurtosis muy alta) → más sensibilidad a episodios extremos puntuales.
- Hamilton produce el ciclo más volátil para UNRATE (std ≈ 1.60), con distribución más cercana a normal (kurtosis ≈ 3.7).
Para GDPC1 los niveles de volatilidad son mucho mayores en términos absolutos (centenas de unidades), pero la lógica relativa entre filtros se mantiene.
4.2 Sensibilidad de λ en HP (hp_lambda_sensitivity.csv)
Ejemplos de resultados:
-
UNRATE:
- λ=14400: std(cycle) ≈ 0.71, corr con baseline(129600) ≈ 0.92.
- λ=129600: std ≈ 0.95 (baseline).
- λ=400000: std ≈ 1.07, corr con baseline ≈ 0.99.
-
INDPRO:
- std(cycle) crece de ≈ 1.56 a ≈ 2.43 al ir de λ=14400 a 400000.
- Corr con baseline > 0.98 en casi todos los casos.
Conclusión: la forma del ciclo es bastante robusta a cambios en λ (correlaciones altas); el efecto principal es escalar la volatilidad (más suavizado trend ⇒ ciclo más grande).
4.3 Correlaciones entre filtros (FIGURA 4, subplot 1)
- Correlación HP vs BK para la serie principal (INDPRO): ≈ −0.08 (de los
metrics), es decir, muy baja y ligeramente negativa. - En el heatmap verás que:
- HP, CF y Hamilton tienden a correlaciones moderadas/altas entre sí.
- BK, con la parametrización elegida (6–32 meses, K=12), está capturando una ventana de frecuencia algo distinta, lo que genera descorrelación.
5. HP one‑sided vs two‑sided y end‑point bias
De los metrics:
- Correlación entre ciclos HP one‑sided y two‑sided (serie principal INDPRO): corr≈0.61.
- RMSE entre trends HP one‑ vs two‑sided en los últimos 10 años: RMSE≈1.31 (en unidades de INDPRO).
Interpretación:
- El ciclo one‑sided está razonablemente alineado con el two‑sided, pero con discrepancias relevantes (corr ≈ 0.6, no >0.9).
- El end‑point bias de HP es visible y cuantitativamente no trivial: el trend two‑sided se “revisa” ex‑post respecto al one‑sided en torno a 1.3 puntos de INDPRO al final de la muestra.
- FIGURA 3, subplot “End-point bias: HP one-sided vs two-sided” te permite ver cómo divergen en la parte final, especialmente alrededor de COVID y post‑COVID.
6. Turning points y relación con recesiones
En turning_points_summary.csv se recogen picos y valles del ciclo HP de INDPRO y su distancia a recesiones USREC.
Ejemplo de las primeras filas (tipo “peak”):
- 1966‑10‑31: lead_lag a inicio de recesión más cercana: +39 meses (peak ~39 meses antes del inicio 1970‑01).
- 1969‑03‑31: +10 meses antes del inicio 1970‑01.
- 1973‑11‑30: +1 mes antes del inicio 1973‑12.
- 1978‑12‑31: +14 meses antes de la recesión de 1980‑02.
- …
Resumen de métrica agregada:
- Media del lead/lag de peaks respecto al inicio de recesión (INDPRO, ciclo HP): ≈ +2.15 meses (pico se produce en promedio unos 2 meses antes del inicio oficial de la recesión).
Interpretación:
- El ciclo HP de INDPRO actúa como un leading indicator leve de recesiones, con señal adelantada modesta pero consistente.
- FIGURA 3:
- Subplot 1: todos los turning points sobre HP cycle con bandas de recesión.
- Subplots 5 y 6: comportamiento en GFC y COVID, donde verás caídas bruscas del ciclo atravesando el eje cero justo en el entorno de los periodos USREC == 1.
7. Comparación de filtros en crisis específicas
A través de FIGURA 2 y FIGURA 3, centrando en ventanas:
-
Dot‑com (1998–2003):
- HP y CF muestran caídas claras en 2000–2001.
- BK, al ser un band‑pass más acotado, filtra algo más el movimiento de baja frecuencia y el patrón puede ser algo más suave o desfasado.
-
GFC 2007–2009:
- Todos los filtros marcan una contracción muy fuerte.
- Hamilton tiende a producir movimientos más bruscos por construcción (residuos de regresión), útil para capturar shocks, pero potencialmente más ruidoso fuera de crisis.
-
COVID 2020:
- Todos los ciclos muestran un spike extremo (caída pronunciadísima y rebote rápido).
- Aquí se ve muy bien la diferencia entre:
- Filtros simétricos (HP 2‑s, CF, BK) que revisan fuertemente los endpoints.
- Hamilton y HP 1‑s, que son más “real‑time” y evidencian la dificultad de detección al vuelo.
Filtro que mejor captura recesiones:
- Para detección visual y alineación con USREC, el ciclo HP de INDPRO funciona muy bien:
- Señal adelantada ligera (~2 meses).
- Buena correspondencia de signos con fases de contracción/expansión.
- CF también captura bien, con forma similar a HP.
- BK da una señal de ciclo algo diferente (y menos correlacionada), útil como contraste pero menos directamente alineada con NBER en esta parametrización.
- Hamilton es muy informativo en crisis, pero con más ruido fuera de ellas.
8. Diagnósticos adicionales (FIGURA 4)
-
Correlation heatmap Resume consistencia relativa de filtros. Útil para seleccionar un subconjunto “representativo” de ciclos.
-
ACF/PACF del ciclo HP de INDPRO
- Muestra autocorrelación significativa a varios lags (estructura cíclica genuina).
- PACF indica cuántos lags son realmente relevantes si quisieras modelar el ciclo con AR(p).
-
Distribución del ciclo (histograma + KDE)
- Fuertemente leptocúrtica (colas gordas): grandes shocks (GFC, COVID) dominan la distribución.
- Implica que métricas lineales (std) no capturan todo el riesgo cíclico.
-
QQ‑plot de residuos Hamilton
- Sirve para evaluar cuán razonable es el supuesto de normalidad en la construcción del ciclo como residuo.
-
Filter comparison metrics (std, amplitude)
- Visualmente comparas qué filtro genera ciclo más/menos volátil para la serie principal.
-
Rolling correlation stability (HP vs BK/CF/Hamilton)
- Te permite ver si la relación entre filtros es estable en el tiempo o cambia en crisis.
- Ejemplo: rolling corr HP vs BK puede caer fuertemente alrededor de grandes eventos, indicando distinta respuesta del filtro.
9. Cómo extender o adaptar el workflow
Con lo que ya está generado, puedes:
- Cambiar la serie principal (por ejemplo a UNRATE o GDPC1) recreando las figuras con el mismo código.
- Integrar un composite cycle (por ejemplo, primer componente principal de los ciclos de INDPRO, PAYEMS y GDPC1) y repetir turning‑points vs USREC.
- Ajustar parámetros de filtros:
- Ventana de frecuencias de BK/CF (por ejemplo 18–96 meses).
- Horizonte y lags de Hamilton (por ejemplo h=8, p=4 para adaptar trimestral a mensual).
- Grid más fino de λ en HP para comparar robustez.
10. Siguientes pasos sugeridos
- Revisión visual detallada
- Abrir FIGURA 1 y 2 para cada serie que te interese y anotar periodos donde filtro A y filtro B divergen fuertemente.
- Ranking de filtros por objetivo:
- Detección temprana de recesión.
- Robustez en tiempo real (bajo end‑point bias).
- Suavidad / interpretabilidad de la tendencia.
- Integración con modelos
- Usar el ciclo HP (o CF) de INDPRO y GDPC1 como inputs en modelos probit/logit de probabilidad de recesión (para validar estadísticamente qué ciclo tiene más poder predictivo).
- Sensitivity notebooks
- Leer
trends_and_cycles.csvyhp_lambda_sensitivity.csven tu entorno (R/Python) y construir tus propias variantes (otros lambdas, otros filtros).
- Leer
Si quieres, en el siguiente paso puedo:
- Cambiar la serie principal de las figuras (por ejemplo a GDPC1 o a un composite),
- O construir explícitamente un índice sintético de ciclo y repetir correlaciones vs USREC y turning points.

