# WP46 model registry — the BINDING list of architectures and specifications (C1). One entry per architecture; # specifications = architecture x innovation distribution x order (orders other than (1,1) only where listed). # status: implemented | unsupported (no vetted implementation in the version-locked libraries; not scored) | extension. # impl: arch (Sheppard, arch 8.0.0) | custom (src/wp46/models/custom.py, validated vs arch/rugarch) | ols | none. # dists: innovation laws that are formally valid for the architecture AND available in the implementation. # tier: A = daily returns only; B = daily returns + lagged realized measure; C = multivariate (configs/study.yaml). version: 1 frozen_with_protocol: true families: baseline: {label: "Baselines", color_key: 0} classical: {label: "Classical ARCH/GARCH", color_key: 1} asymmetric: {label: "Asymmetric", color_key: 2} power: {label: "Power / absolute", color_key: 3} fractional: {label: "Fractional persistence", color_key: 4} component: {label: "Component", color_key: 5} regime-switching: {label: "Regime switching", color_key: 6} score-driven: {label: "Score-driven (non-GARCH)", color_key: 7} realized: {label: "Realized-measure models (Tier B)", color_key: 8} models: constvar: {family: baseline, tier: A, impl: arch, status: implemented, dists: [normal], label: "Constant variance (window mean)", ref: null, nested_in: garch11} histvar22: {family: baseline, tier: A, impl: ols, status: implemented, dists: [empirical], label: "Historical variance, 22 days", ref: null} histvar66: {family: baseline, tier: A, impl: ols, status: implemented, dists: [empirical], label: "Historical variance, 66 days", ref: null} histvar252: {family: baseline, tier: A, impl: ols, status: implemented, dists: [empirical], label: "Historical variance, 252 days", ref: null} ewma094: {family: baseline, tier: A, impl: arch, status: implemented, dists: [normal], label: "EWMA (RiskMetrics 1994, lambda = 0.94)", ref: jpmorgan1996riskmetrics, nested_in: igarch11} rm2006: {family: baseline, tier: A, impl: arch, status: implemented, dists: [normal], label: "RiskMetrics 2006", ref: zumbach2009riskmetrics} arch5: {family: classical, tier: A, impl: arch, status: implemented, dists: [normal, t, ged, skewt], label: "ARCH(5)", ref: engle1982autoregressive} garch11: {family: classical, tier: A, impl: arch, status: implemented, dists: [normal, t, ged, skewt], label: "GARCH(1,1)", ref: bollerslev1986generalized, benchmark: true} garch21: {family: classical, tier: A, impl: arch, status: implemented, dists: [normal, t, ged, skewt], label: "GARCH(2,1)", ref: bollerslev1986generalized} garch12: {family: classical, tier: A, impl: arch, status: implemented, dists: [normal, t, ged, skewt], label: "GARCH(1,2)", ref: bollerslev1986generalized} igarch11: {family: classical, tier: A, impl: custom, status: implemented, dists: [normal, t, ged, skewt], label: "IGARCH(1,1)", ref: engle1986modelling} garchm11: {family: classical, tier: A, impl: custom, status: implemented, dists: [normal, t, ged, skewt], label: "GARCH-M(1,1)", ref: engle1987estimating} gjr11: {family: asymmetric, tier: A, impl: arch, status: implemented, dists: [normal, t, ged, skewt], label: "GJR-GARCH(1,1)", ref: glosten1993relation} tarch11: {family: asymmetric, tier: A, impl: arch, status: implemented, dists: [normal, t, ged, skewt], label: "TGARCH(1,1) (Zakoian, threshold on sigma)", ref: zakoian1994threshold} egarch11: {family: asymmetric, tier: A, impl: arch, status: implemented, dists: [normal, t, ged, skewt], label: "EGARCH(1,1)", ref: nelson1991conditional} nagarch11: {family: asymmetric, tier: A, impl: custom, status: implemented, dists: [normal, t, ged, skewt], label: "NAGARCH(1,1) (Engle-Ng)", ref: engle1993measuring} qgarch11: {family: asymmetric, tier: A, impl: custom, status: implemented, dists: [normal, t, ged, skewt], label: "QGARCH(1,1) (Sentana)", ref: sentana1995quadratic} avgarch11: {family: power, tier: A, impl: arch, status: implemented, dists: [normal, t, ged, skewt], label: "AVGARCH(1,1) (Taylor-Schwert)", ref: taylor2008modelling} aparch11: {family: power, tier: A, impl: arch, status: implemented, dists: [normal, t, ged, skewt], label: "APARCH(1,1)", ref: ding1993long} figarch11: {family: fractional, tier: A, impl: arch, status: implemented, dists: [normal, t, ged, skewt], label: "FIGARCH(1,d,1)", ref: baillie1996fractionally, note: "arch truncates the ARCH(inf) representation at 1000 lags"} cgarch11: {family: component, tier: A, impl: custom, status: implemented, dists: [normal, t, ged, skewt], label: "Component GARCH (Engle-Lee)", ref: engle1999long} msgarch2: {family: regime-switching, tier: A, impl: custom, status: implemented, dists: [normal, t], label: "MS-GARCH(2) (Haas-Mittnik-Paolella)", ref: haas2004new, note: "common nu across regimes; regimes ordered by unconditional variance"} gas_t11: {family: score-driven, tier: A, impl: custom, status: implemented, dists: [t], label: "GAS-t(1,1) / Beta-t-GARCH (non-GARCH comparator)", ref: creal2013generalized} sv: {family: score-driven, tier: A, impl: none, status: unsupported, dists: [], label: "Stochastic volatility", ref: kim1998stochastic, note: "simulation-based estimation not feasible at the rolling re-estimation cadence of this benchmark; not scored"} rm_rw: {family: realized, tier: B, impl: ols, status: implemented, dists: [empirical], label: "Realized-measure random walk", ref: null} har_rv: {family: realized, tier: B, impl: ols, status: implemented, dists: [empirical], label: "HAR-RV (direct, levels)", ref: corsi2009simple} loghar_rv: {family: realized, tier: B, impl: ols, status: implemented, dists: [empirical], label: "log-HAR-RV (direct, smearing)", ref: corsi2009simple} realgarch11: {family: realized, tier: B, impl: custom, status: implemented, dists: [normal, t], label: "Realized GARCH(1,1), log-linear", ref: hansen2012realized} heavy11: {family: realized, tier: B, impl: custom, status: implemented, dists: [normal, t], label: "HEAVY(1,1)", ref: shephard2010realising} garchx_rv11: {family: realized, tier: B, impl: custom, status: implemented, dists: [normal, t], label: "GARCH-X(1,1) with lagged realized measure", ref: engle2002new} # ---- post-registration extensions (2026-11-09 evening; scored with the same protocol, reported separately as exploratory) stgarch11: {family: regime-switching, tier: A, impl: custom, status: extension, dists: [normal, t], label: "Smooth-transition GARCH (logistic)", ref: gonzalezrivera1998smooth} betategarch11: {family: score-driven, tier: A, impl: custom, status: extension, dists: [t], label: "Beta-t-EGARCH", ref: harvey2008beta} garch_midas: {family: component, tier: A, impl: custom, status: extension, dists: [normal, t], label: "GARCH-MIDAS (own monthly RV, 24 months)", ref: engle2013stock} hygarch11: {family: fractional, tier: A, impl: custom, status: extension, dists: [normal, t], label: "HYGARCH(1,d,1)", ref: davidson2004moment} fiaparch11: {family: fractional, tier: A, impl: custom, status: extension, dists: [normal, t], label: "FIAPARCH(1,d,1)", ref: tse1998conditional} fiegarch11: {family: fractional, tier: A, impl: custom, status: extension, dists: [normal, t], label: "FIEGARCH(1,d,1)", ref: bollerslev1996modeling} realegarch11: {family: realized, tier: B, impl: custom, status: extension, dists: [normal, t], label: "Realized EGARCH(1,1)", ref: hansen2016exponential} egarch11c: {family: asymmetric, tier: A, impl: arch, status: extension, dists: [normal, t, ged, skewt], label: "EGARCH(1,1), constrained (alpha >= 0, beta <= 0.995)", ref: nelson1991conditional, note: "A-06: constrained twin of egarch11 after the explosive-feedback diagnosis"}