# Model card — `qgarch11` (QGARCH(1,1), Sentana's quadratic GARCH) ## 1. Identity - **model_id:** `qgarch11` · **family:** asymmetric · **tier:** A · **status:** implemented · **impl:** custom (`src/wp46/models/custom.py::QGARCH11`) - **Label:** QGARCH(1,1) (Sentana) · **distributions:** normal, t, ged, skewt - **Seminal citation:** `sentana1995quadratic` - **Other references:** `engle1993measuring` (NAGARCH, the shifted form), `glosten1993relation`. ## 2. Definition $$r_t = \mu + \varepsilon_t,\ \varepsilon_t = \sigma_t z_t,\qquad \sigma_t^2 = \omega + \alpha\,\varepsilon_{t-1}^2 + \gamma\,\varepsilon_{t-1} + \beta\,\sigma_{t-1}^2 ,$$ `rec_qgarch` with $\sigma_0^2 = \omega + (\alpha+\beta)s_0$ and a floor $\sigma_t^2 \ge 10^{-12}$ inside the recursion. Innovations: normal, t, GED, Hansen skew-t. ## 3. Parameter space and admissibility - Parameters: `mu, omega, alpha, gamma, beta` (+ distribution). - Positivity: $\omega + \alpha\varepsilon^2 + \gamma\varepsilon > 0$ for all ε ⇔ $\gamma^2 < 4\alpha\omega$ (minimum of the quadratic at $\varepsilon = -\gamma/(2\alpha)$ equals $\omega - \gamma^2/(4\alpha)$). - Reparameterisation: $\omega = e^{\theta_0}$, $s = \alpha+\beta = \sigma(\theta_1)$, $\alpha = s\,\sigma(\theta_2)$, $\gamma = 2\sqrt{\alpha\omega}\,\tanh(\theta_3)$ (so the positivity condition holds by construction). - Admissibility flag: $\omega > 0$, $\alpha > 0$ (strict), $\beta \ge 0$, $\alpha + \beta < 1$, $\gamma^2 < 4\alpha\omega$. ## 4. Nesting and relations Nests `garch11` (γ = 0). Linear-asymmetry counterpart of `nagarch11` (news-impact parabola shifted by $-\gamma/(2\alpha)$, a constant shift in ε rather than one proportional to σ). Sentana's general quadratic ARCH includes cross terms not used here. ## 5. Estimation Custom MLE (`CustomModel.fit`): L-BFGS-B on θ from three starts (ω, α, γ, β) ∈ {(0.05v, 0.06, −0.3√(0.05v·0.06), 0.90), (0.03v, 0.10, 0, 0.87), (0.1v, 0.1, −0.5√(0.1v·0.1), 0.8)}, Nelder–Mead polish on failure; μ start = sample mean; backcast $s_0$ arch-style. Point estimates only. ## 6. Forecasting `QGARCH11.step_forecast`: $\hat\sigma^2_{t+1|t} = \max(\omega + \alpha\varepsilon_t^2 + \gamma\varepsilon_t + \beta\sigma_t^2,\ 10^{-12})$; for $k \ge 2$, $\hat\sigma^2_{t+k|t} = \omega + (\alpha+\beta)\hat\sigma^2_{t+k-1|t}$ (uses $E[\varepsilon_{t+j}\mid\mathcal F_t] = 0$, exact for all four zero-mean laws). Cumulative = sum over k ≤ h. Method: `analytic`. ## 7. Implementation - `src/wp46/models/custom.py::QGARCH11` (numba `rec_qgarch`). - Cross-check: **none** — QGARCH is in neither arch 8.0.0 nor rugarch 1.5-6; not in `results/metrics/rugarch_crosscheck.json`. The registry marks it `custom (validated vs arch/rugarch)` by the generic `impl` comment, but no library reference exists for this architecture (recorded in `_discrepancies.md`; it is the only scored custom architecture without any library counterpart besides `gas_t11` and `garchx_rv11`). - Tests: `tests/unit/test_custom_models.py::test_nesting_and_admissibility[QGARCH11]` (converged, admissible, log-likelihood ≥ GARCH(1,1) − 0.5, positive finite 22-step forecasts). No simulation-recovery test, no rugarch test. ## 8. Known limitations / failure modes The positivity bound $\gamma^2 < 4\alpha\omega$ is restrictive when ω is small (highly persistent series): γ is then forced toward zero and the model collapses to GARCH(1,1), so the asymmetry cannot be large on persistent equity series. Admissibility requires α > 0 strictly (α → 0 makes γ → 0 by construction). Floors at 1e-12 silently mask any numerical negativity. ## 9. Computational footprint Analytic; 5–7 parameters; same cost order as `nagarch11`. Not in the pilot. ## 10. Literature expectations `sentana1995quadratic` shows the quadratic form captures asymmetry with a linear term; the literature matrix lists QGARCH as "custom (if time permits)" and notes the positivity restriction. `hansen2005forecast` do not include QGARCH. Expectation: between GARCH(1,1) and NAGARCH on equities; the positivity constraint is the main practical limitation (H5: more boundary optima).