SPB Git

Repository Public Research preview

README.md 7.7 KB 50 lines markdown

1# WP46 model cards — index23One card per architecture of the binding registry `configs/model_registry.yaml` (37 entries: 29 implemented, 1 unsupported, 7 post-registration `extension` entries added 2026-11-09 — E-01, `src/wp46/models/extensions.py`; scored with the frozen protocol, reported separately as exploratory). Each card follows the same ten sections: 1 Identity · 2 Definition · 3 Parameter space and admissibility · 4 Nesting and relations · 5 Estimation · 6 Forecasting · 7 Implementation (file/class, library, cross-check evidence, tests) · 8 Known limitations / failure modes · 9 Computational footprint · 10 Literature expectations. Equations are those **implemented in the code** (`src/wp46/models/{arch_models,custom,extensions,baselines,distributions}.py`, `src/wp46/estimation/rolling.py`, arch 8.0.0 internals), not the textbook forms when they differ; such differences are listed in `_discrepancies.md`. Bibkeys refer to `paper/references.bib` only; references that would be needed but are absent are listed in `_missing_references.md`. **No card reports a WP46 benchmark result** (the benchmark has not been run); the only numbers quoted are the rugarch cross-check (`results/metrics/rugarch_crosscheck.json`), unit/simulation test tolerances, and pilot fit timings on the validation period (`results/metrics/pilot/pilot_report.json`, currently CL and EURUSD).45Common conventions: daily log returns in percent, variances in percent²; $r_t = \mu + \varepsilon_t$, $\varepsilon_t = \sigma_t z_t$; innovation laws standardised to unit variance (normal; Student-t `bollerslev1987conditionally`; GED `nelson1991conditional`; Hansen skew-t `hansen1994autoregressive`, arch parameterisations); rolling window 1,000 days, refit every 5 days, daily filtering with fixed parameters; per-step forecasts $E[\sigma^2_{t+k}\mid\mathcal F_t]$, k = 1..22, cumulative h-day variance = sum of the first h steps (h = 1, 5, 22); seed 46 + origin index for simulation forecasts (2,000 paths); only point estimates are used (no standard errors enter the benchmark).67| model_id | family | tier | implementation | distributions | status | card |8|---|---|---|---|---|---|---|9| `constvar` | baseline | A | arch 8.0.0 `ConstantVariance` | normal | implemented | [constvar.md](constvar.md) |10| `histvar22` | baseline | A | parameter-free (`baselines.HistVar`) | empirical | implemented | [histvar22.md](histvar22.md) |11| `histvar66` | baseline | A | parameter-free (`baselines.HistVar`) | empirical | implemented | [histvar66.md](histvar66.md) |12| `histvar252` | baseline | A | parameter-free (`baselines.HistVar`) | empirical | implemented | [histvar252.md](histvar252.md) |13| `ewma094` | baseline | A | arch 8.0.0 `EWMAVariance(0.94)` | normal | implemented | [ewma094.md](ewma094.md) |14| `rm2006` | baseline | A | arch 8.0.0 `RiskMetrics2006` | normal | implemented | [rm2006.md](rm2006.md) |15| `arch5` | classical | A | arch 8.0.0 `ARCH(5)` | normal, t, ged, skewt | implemented | [arch5.md](arch5.md) |16| `garch11` | classical | A | arch 8.0.0 `GARCH(1,0,1)` | normal, t, ged, skewt | implemented (**benchmark**) | [garch11.md](garch11.md) |17| `garch21` | classical | A | arch 8.0.0 `GARCH(2,0,1)` | normal, t, ged, skewt | implemented | [garch21.md](garch21.md) |18| `garch12` | classical | A | arch 8.0.0 `GARCH(1,0,2)` | normal, t, ged, skewt | implemented | [garch12.md](garch12.md) |19| `igarch11` | classical | A | custom `IGARCH11` | normal, t, ged, skewt | implemented | [igarch11.md](igarch11.md) |20| `garchm11` | classical | A | custom `GARCHM11` | normal, t, ged, skewt | implemented | [garchm11.md](garchm11.md) |21| `gjr11` | asymmetric | A | arch 8.0.0 `GARCH(1,1,1)` | normal, t, ged, skewt | implemented | [gjr11.md](gjr11.md) |22| `tarch11` | asymmetric | A | arch 8.0.0 `GARCH(1,1,1, power=1)` (Zakoïan) | normal, t, ged, skewt | implemented | [tarch11.md](tarch11.md) |23| `egarch11` | asymmetric | A | arch 8.0.0 `EGARCH(1,1,1)` | normal, t, ged, skewt | implemented | [egarch11.md](egarch11.md) |24| `nagarch11` | asymmetric | A | custom `NAGARCH11` | normal, t, ged, skewt | implemented | [nagarch11.md](nagarch11.md) |25| `qgarch11` | asymmetric | A | custom `QGARCH11` | normal, t, ged, skewt | implemented | [qgarch11.md](qgarch11.md) |26| `avgarch11` | power | A | arch 8.0.0 `GARCH(1,0,1, power=1)` | normal, t, ged, skewt | implemented | [avgarch11.md](avgarch11.md) |27| `aparch11` | power | A | arch 8.0.0 `APARCH(1,1,1)` | normal, t, ged, skewt | implemented | [aparch11.md](aparch11.md) |28| `figarch11` | fractional | A | arch 8.0.0 `FIGARCH(1,1)` (truncation 1000) | normal, t, ged, skewt | implemented | [figarch11.md](figarch11.md) |29| `fiegarch11` | fractional | A | custom `FIEGARCH11` (truncation 1000) | normal, t | extension | [fiegarch11.md](fiegarch11.md) |30| `fiaparch11` | fractional | A | custom `FIAPARCH11` (truncation 1000) | normal, t | extension | [fiaparch11.md](fiaparch11.md) |31| `hygarch11` | fractional | A | custom `HYGARCH11` (truncation 1000) | normal, t | extension | [hygarch11.md](hygarch11.md) |32| `cgarch11` | component | A | custom `CGARCH11` | normal, t, ged, skewt | implemented | [cgarch11.md](cgarch11.md) |33| `msgarch2` | regime-switching | A | custom `MSGARCH2` (Haas–Mittnik–Paolella) | normal, t | implemented | [msgarch2.md](msgarch2.md) |34| `stgarch11` | regime-switching | A | custom `STGARCH11` (logistic) | normal, t | extension | [stgarch11.md](stgarch11.md) |35| `garch_midas` | component | A | custom `GARCHMIDAS` (own monthly RV, K = 24) | normal, t | extension | [garch_midas.md](garch_midas.md) |36| `gas_t11` | score-driven | A | custom `GAST11` | t | implemented | [gas_t11.md](gas_t11.md) |37| `betategarch11` | score-driven | A | custom `BetaTEGARCH11` | t | extension | [betategarch11.md](betategarch11.md) |38| `sv` | score-driven (registry grouping) | A | none | — | unsupported | [sv.md](sv.md) |39| `rm_rw` | realized | B | parameter-free (`baselines.RMRandomWalk`) | empirical | implemented | [rm_rw.md](rm_rw.md) |40| `har_rv` | realized | B | OLS (`baselines.HARRV`) | empirical | implemented | [har_rv.md](har_rv.md) |41| `loghar_rv` | realized | B | OLS (`baselines.HARRV(log=True)`) | empirical | implemented | [loghar_rv.md](loghar_rv.md) |42| `realgarch11` | realized | B | custom `RealGARCH11` | normal, t | implemented | [realgarch11.md](realgarch11.md) |43| `heavy11` | realized | B | custom `HEAVY11` | normal, t | implemented | [heavy11.md](heavy11.md) |44| `garchx_rv11` | realized | B | custom `GARCHXRV11` | normal, t | implemented | [garchx_rv11.md](garchx_rv11.md) |45| `realegarch11` | realized | B | custom `RealEGARCH11` | normal, t | extension | [realegarch11.md](realegarch11.md) |4647Companion files: `_discrepancies.md` (registry ↔ code ↔ literature differences found while writing the cards), `_missing_references.md` (references needed by the cards but absent from `paper/references.bib`).4849Cross-check coverage at a glance (`results/metrics/rugarch_crosscheck.json`, rugarch 1.5-6, shared GJR-t fixture, log-likelihood difference ours − rugarch): garch11-t +0.041, garch11-skewt +0.039 (different skew-t families), gjr11-t +0.037, egarch11-t +0.013, aparch11-t +0.090, figarch11-t **−1.471**, igarch11-t +0.050, cgarch11-t +0.300, nagarch11-t +0.038; realgarch11 — rugarch did not converge (no comparison); tarch11 — rugarch fitted but no arch counterpart computed (no comparison). No library cross-check exists for `garchm11`, `qgarch11`, `gas_t11`, `msgarch2`, `heavy11`, `garchx_rv11`, `arch5`, `garch21`, `garch12`, `avgarch11`, the baselines and the HAR models. The seven `extension` entries have **no external-package cross-check** either, except the likelihood identity HYGARCH(amp = 1) = arch FIGARCH (`tests/unit/test_extensions.py`, tolerance 5.0); see `_discrepancies.md`, section "Extensions (E-01)".50
Files main
Menu

Theme