Methods Appendix
This appendix is designed to be review-ready. It explains what is published and how to interpret it, while keeping model implementation private.
All “actionable” signals on the site are based on ex-ante quantities (available at time t), unless explicitly labeled ex-post.
Definitions
Market-implied expectation (proxy): π̂_mkt(t, h)
Model forecast: π̂_model(t, h)
Realized inflation (ex-post): π_real(t+h)
Unexpected inflation: U(t,h) = π_real(t+h) − π̂_mkt(t,h)
Forecast Alpha (ex-ante): α(t,h) = π̂_model(t,h) − π̂_mkt(t,h)
Residual Surprise (ex-post): ε(t,h) = U(t,h) − α(t,h) = π_real(t+h) − π̂_model(t,h)
Key point: Residual Surprise cannot be known until the inflation print occurs.
Your site can be actionable ex-ante via Forecast Alpha, while tracking ex-post whether the model is earning that alpha share.
Primary regression (pooled + Newey–West)
We estimate a pooled relationship between model forecasts and market expectations, allowing for serial correlation and heteroskedasticity via HAC (Newey–West).
π̂_model(t,h) = a_h + b_h · π̂_mkt(t,h) + u(t,h)
Table caption (exact):
“Table A. Pooled relationship between model-implied inflation and market-implied inflation (Newey–West).
This table reports OLS estimates of π̂_model(t,h) on π̂_mkt(t,h) for each horizon h. Standard errors are Newey–West HAC to account for heteroskedasticity and serial correlation.”
Regime interaction model (also Newey–West)
Let s(t) denote the regime at time t, represented either as a discrete label or filtered posterior probabilities.
The interaction model tests whether the market–model mapping changes across regimes.
π̂_model(t,h) = a_h + b_h · π̂_mkt(t,h) + Σ_k [ γ_{h,k} · 1{s(t)=k} ] · π̂_mkt(t,h) + u(t,h)
Table caption (exact):
“Table A (Panel B). Regime interaction model (Newey–West).
Extends the pooled regression by interacting market expectations with regime indicators. Newey–West standard errors are reported.”
Regime-conditional inference (wild bootstrap)
Within each regime, sample sizes can be small and errors can be non-Gaussian.
We therefore report wild-bootstrap confidence intervals and p-values for regime-conditional coefficients, alongside effective sample size n_eff.
For each regime k: π̂_model(t,h) = a_{h,k} + b_{h,k} · π̂_mkt(t,h) + u(t,h), for t where s(t)=k
Wild bootstrap procedure (precise, implementation-agnostic): - Fit the regime-conditional OLS and collect residuals û(t,h).
- For bootstrap draw b=1..B, form pseudo-outcomes: y*(t)=x(t)β̂ + v_b(t)·û(t), where v_b(t) is a mean-zero wild weight (e.g., Rademacher ±1).
- Refit OLS on (x, y*) and store β̂*.
- Compute percentile CIs and two-sided p-values using the bootstrap distribution.
Table caption (exact):
“Table B. Regime-conditional coefficients with wild-bootstrap inference.
Reports b_{h,k} estimates by regime k. Confidence intervals and p-values are computed using a wild bootstrap to improve robustness in small samples and under heteroskedasticity. Effective sample size n_eff is reported for each regime.”
What is published (and what is not)
Published:
/mock/<series>/latest.json: per-horizon π̂_model, π̂_mkt, Forecast Alpha, and filtered regime posteriors. /mock/<series>/drivers.json: a compact, high-level “what moved” explanation. - (Recommended next)
model_health.json, history.json, backtest.json: rolling metrics & reliability guards.
Not published:
- Training code, feature code, model weights, proprietary pipelines, and raw research notebooks.