SPB Git

Repository Public Research preview

garch21.md 3.5 KB 41 lines markdown

1# Model card — `garch21` (GARCH with two ARCH lags: arch `GARCH(p=2, o=0, q=1)`)23## 1. Identity4- **model_id:** `garch21` · **family:** classical · **tier:** A · **status:** implemented · **impl:** arch 8.0.0 (`GARCH(p=2, o=0, q=1)`)5- **Label:** GARCH(2,1) · **distributions:** normal, t, ged, skewt6- **Seminal citation:** `bollerslev1986generalized`7- **Other references:** `nelson1992inequality` (positivity for higher orders), `bougerol1992stationarity` (strict stationarity of GARCH(p,q)), `francq2004maximum` (QMLE for general orders), `bollerslev2010glossary`.8- **Naming caveat:** in arch, `p` is the number of lagged squared residuals and `q` the number of lagged variances, so this is $\sigma_t^2 = \omega + \alpha_1\varepsilon_{t-1}^2 + \alpha_2\varepsilon_{t-2}^2 + \beta_1\sigma_{t-1}^2$. In Bollerslev's (1986) convention (p = GARCH lags, q = ARCH lags) the same model is written GARCH(1,2). The registry label follows arch's convention (recorded in `_discrepancies.md`).910## 2. Definition11$$r_t = \mu + \varepsilon_t,\ \varepsilon_t = \sigma_t z_t,\qquad \sigma_t^2 = \omega + \alpha_1\varepsilon_{t-1}^2 + \alpha_2\varepsilon_{t-2}^2 + \beta_1\sigma_{t-1}^2 ,$$12pre-sample $\varepsilon^2$ and $\sigma^2$ replaced by the backcast. Innovations: normal, t(ν), GED(ν), Hansen skew-t(η, λ).1314## 3. Parameter space and admissibility15- Parameters: `mu, omega, alpha[1], alpha[2], beta[1]` (+ distribution).16- arch bounds/constraints: $\omega \in [10^{-8}v, 10v]$, $\alpha_i, \beta_1 \in [0,1]$, $\omega > 0$, $\alpha_i \ge 0$, $\beta_1 \ge 0$, $\alpha_1 + \alpha_2 + \beta_1 < 1$. The non-negativity constraints are sufficient but not necessary for positivity when p > 1 (`nelson1992inequality`): arch excludes admissible negative-$\alpha_2$ solutions.17- Admissibility flag: $\alpha_1 + \alpha_2 + \beta_1 < 1$.1819## 4. Nesting and relations20Nests `garch11` ($\alpha_2 = 0$) and ARCH(2). Pre-registered order variant (protocol §4: "(1,1) everywhere, plus GARCH(2,1)/(1,2) and ARCH(5)"). Not nested in `garch12`.2122## 5. Estimation23As `garch11` (arch SLSQP, grid starting values with $\alpha$ split equally across the two ARCH lags, backcast initialisation, ≤ 2 restarts; `src/wp46/models/arch_models.py::ArchModel.fit`). Only point estimates are used in the rolling benchmark.2425## 6. Forecasting26arch `GARCH._analytic_forecast`: $\hat\sigma^2_{t+k|t} = \omega + \alpha_1\widetilde{\varepsilon^2}_{t+k-1} + \alpha_2\widetilde{\varepsilon^2}_{t+k-2} + \beta_1\tilde\sigma^2_{t+k-1}$ with observed $\varepsilon^2_s$, $\sigma^2_s$ for $s \le t$ and their forecasts for $s > t$ ($E[z^2] = 1$). Cumulative = sum over k ≤ h. Method: `analytic`.2728## 7. Implementation29- `src/wp46/models/arch_models.py` (`SPECS["garch21"]`), arch 8.0.0.30- Cross-check: not in the rugarch fixture (only the (1,1) orders are cross-checked); the recursion is the same `garch_recursion` validated for (1,1) in `tests/unit/test_custom_models.py`.31- Tests: none dedicated.3233## 8. Known limitations / failure modes34Weak identification of $\alpha_2$ (often at the zero bound → SLSQP boundary convergence); near-integrated persistence as for GARCH(1,1); extra parameter rarely improves out-of-sample (expectation §10).3536## 9. Computational footprint37Analytic; one more parameter than `garch11`. No pilot timing.3839## 10. Literature expectations40`hansen2005forecast` found higher-order GARCH specifications no better than (1,1) out of sample; `bollerslev1986generalized` and the surveys (`bollerslev1992arch`) note that (1,1) is adequate for most daily series. Expectation: no gain over `garch11`, slightly more failures.41
Files main
Menu

Theme