SPB Git

Repository Public Research preview

betategarch11.md 7.5 KB 44 lines markdown

1# Model card — `betategarch11` (Beta-t-EGARCH(1,1), score-driven log-variance with leverage) — post-registration extension23## 1. Identity4- **model_id:** `betategarch11` · **family:** score-driven · **tier:** A · **status:** extension (E-01, added 2026-11-09 after the protocol freeze; scored with the frozen protocol, reported separately as exploratory) · **impl:** custom (`src/wp46/models/extensions.py::BetaTEGARCH11`)5- **Label:** Beta-t-EGARCH · **distributions:** t only (the model is defined by the Student-t score)6- **Seminal citation:** `harvey2008beta`7- **Other references:** `harvey2013dynamic` (dynamic conditional score models, closed-form moments, robustness), `harvey2014egarch` (Beta-t-EGARCH with skewness and leverage), `creal2013generalized` (GAS framework; `gas_t11` is the level-variance twin), `blasques2015information` (optimality of score updates), `nelson1991conditional` (EGARCH, the model it is designed to replace).89## 2. Definition (as coded, unit-variance Student-t)10$$r_t = \mu + \varepsilon_t,\quad \varepsilon_t = \sigma_t z_t,\quad z_t \sim t_\nu\ \text{standardised to unit variance},\qquad11\log\sigma_t^2 = \omega + \beta\log\sigma_{t-1}^2 + \alpha\,u_{t-1} + \gamma\,\operatorname{sgn}(-\varepsilon_{t-1})\,(u_{t-1} + 1),$$12$$u_t = \frac{(\nu+1)\,z_t^2}{\nu - 2 + z_t^2} - 1,\qquad z_t = \varepsilon_t/\sigma_t .$$13$u_t$ is the score of the unit-variance t log-density with respect to $\log\sigma_t$ (equivalently twice the score with respect to $\log\sigma_t^2$: $\partial\log f/\partial\log\sigma^2 = u_t/2$); it is bounded, $u_t \in [-1, \nu)$, with $E[u_t] = 0$ under correct specification ($u_t + 1$ is $(\nu+1)$ times a Beta(½, ν/2) variable, hence the name). The leverage term $\operatorname{sgn}(-\varepsilon)(u+1)$ is non-negative for negative shocks (γ > 0 = volatility rises more after losses); `sgn(0) = 0`. Mapping to `harvey2008beta` (unstandardised $t_\nu$ with log-scale $\lambda_{t|t-1}$, $\lambda_{t+1|t} = \delta + \phi\lambda_{t|t-1} + \kappa u_t + \kappa^*\operatorname{sgn}(-y_t)(u_t+1)$): the score $u_t$ is identical, $\log\sigma_t^2 = 2\lambda_{t|t-1} + \log\frac{\nu}{\nu-2}$, so $\beta = \phi$, $\alpha = 2\kappa$, $\gamma = 2\kappa^*$, $\omega = 2\delta + (1-\phi)\log\frac{\nu}{\nu-2}$. Recursion `rec_betategarch`: $\log\sigma_0^2 = \log s_0$ (backcast), $\log\sigma_t^2$ clipped to [−50, 50].1415## 3. Parameter space and admissibility16- Parameters: `mu, omega, alpha, gamma, beta, nu`.17- Reparameterisation: ω free; $\alpha = e^{\theta_1} > 0$; γ free; $\beta = \tanh(\theta_3) \in (-1, 1)$; $\nu = 2.05 + e^{\theta_4}$.18- Admissibility flag: $|\beta| < 1$ (stationarity of the linear log-variance recursion; `harvey2013dynamic`) and $\alpha \ge 0$ — both hold by construction, so the flag can only fail numerically. No positivity constraint is needed (log specification). The literature does not restrict the sign of κ; the code imposes α > 0.1920## 4. Nesting and relations21- **vs `gas_t11` (GAS-t / Beta-t-GARCH):** same score $u_t$; `gas_t11` updates the variance level with inverse-information scaling, $f_t = \omega + \alpha\frac{\nu+3}{\nu}f_{t-1}u_{t-1} + \beta f_{t-1}$, without leverage; Beta-t-EGARCH updates $\log\sigma^2$ with unit scaling and adds the sign term.22- **vs `egarch11` (Nelson EGARCH with t innovations):** EGARCH's forcing variable $\theta z + \gamma(|z| - E|z|)$ is unbounded in z, so one outlier can raise the log-variance without bound; $u_t$ is bounded, which is the robustness argument of `harvey2008beta`/`harvey2013dynamic`. The two models are not nested.23- $\nu \to \infty$: $u_t \to z_t^2 - 1$, giving $\log\sigma_t^2 = \omega + \beta\log\sigma_{t-1}^2 + \alpha(z_{t-1}^2 - 1) + \gamma\operatorname{sgn}(-\varepsilon_{t-1})z_{t-1}^2$ — a log-GARCH-type model in squared innovations, **not** GARCH(1,1) and not EGARCH. The A-05 floor nevertheless compares the fit with GARCH(1,1)-t (the model is not in the exclusion list of `CustomModel.fit`).2425## 5. Estimation26Own `_negll` (t only): $-\sum_t[\log f_{t_\nu}(z_t) - \tfrac12\log\sigma_t^2]$ with ν estimated jointly; shared optimiser (`CustomModel.fit`): L-BFGS-B (maxiter 2000, ftol 1e-10, gtol 1e-6) from up to three starts (ω, α, γ, β) ∈ {(0.02ℓ, 0.05, 0.02, 0.98), (0.05ℓ, 0.1, 0.04, 0.95), (0.01ℓ, 0.03, 0, 0.99)}, ℓ = log sample variance, ν start 6, μ start = sample mean; stop after the second start if converged; Nelder–Mead polish (maxiter 4000) + final L-BFGS-B if not converged or stalled; A-05 floor vs GARCH(1,1)-t (−50 units → two perturbed restarts → `degenerate` flag). Backcast $s_0$ = exponentially weighted mean (75 lags, 0.94) of the first squared demeaned returns. Point estimates only. (`sigma2()` reads `self._nu`, which is set by `filter()`; `fit`/`forecast` use their own code paths — same pattern as `gas_t11`.)2728## 6. Forecasting29`BetaTEGARCH11.forecast` (method `simulation`): $\log\hat\sigma^2_{t+1|t}$ is deterministic from $(\log\sigma_t^2, \varepsilon_t)$; for k ≥ 2, 2,000 paths with $\varepsilon = \sigma z$, $z \sim t_\nu$ (unit variance, `rvs`, seeded), path update as in §2 with clipping at ±50, forecast = cross-path mean of $\exp(\log\sigma^2_{t+k})$. Cumulative h-day variance = sum of the first h steps. `harvey2013dynamic` give closed-form multi-step moments of $\sigma_{t+k}^2$ (products of Beta-function moments) that the code does not use.3031## 7. Implementation and verification32- `src/wp46/models/extensions.py::BetaTEGARCH11`, numba `rec_betategarch`; dispatched through `EXTENSIONS`.33- Tests (`tests/unit/test_extensions.py::test_betategarch_fiegarch_realegarch_fit_and_forecast`): fit on the simulated GARCH-t fixture converges; 22-step forecast positive and finite; identical forecasts for identical seeds.34- **No external-package cross-check** (Beta-t-EGARCH is not in arch 8.0.0 or rugarch 1.5-6; the R package `betategarch` is not part of the version-locked toolchain and was not run), no simulation-recovery test, no likelihood identity test. The only external identity in the extension set is HYGARCH(amp = 1) vs arch's FIGARCH (`hygarch11.md` §7). CLAUDE.md rule 6 is not met in full — hence `extension` status.3536## 8. Known limitations / failure modes37Post-registration, exploratory. Student-t only (no normal/GED/skew-t pair). One-component specification (Harvey's two-component variants are not implemented); leverage through a sign function rather than a smooth asymmetry; β may be negative by construction (the literature uses 0 < φ < 1); clipping of $\log\sigma^2$ at ±50 is a hard wall for the optimiser; the ν → ∞ limit is not a GARCH model, so the A-05 floor against GARCH(1,1)-t is a heuristic rather than a nesting argument; multi-step forecasts rely on simulation although closed forms exist.3839## 9. Computational footprint40One O(T) numba recursion per likelihood evaluation with a ν-dependent density — the same order as `gas_t11`/`garch11_custom`; one 2,000 × 22 vectorised simulation per forecast origin. Qualitatively a small multiple of GARCH(1,1), far below the fractional extensions. Not timed in the pilot.4142## 10. Literature expectations43`harvey2008beta`/`harvey2013dynamic` report better in-sample fit than EGARCH-t and robustness to outliers; `harvey2014egarch` add skewness and leverage; `creal2013generalized`/`blasques2015information` motivate score updates. Under H2 (distribution) and H1 (asymmetry) the expectation is a modest gain over `garch11`-t and `gas_t11` on heavy-tailed, outlier-prone instruments and in stressed regimes (H6), with no gain where returns are close to Gaussian; no large cross-asset forecasting benchmark of Beta-t-EGARCH is in the literature matrix.44
Files main
Menu

Theme