Repository Public Research preview
1# Model card — `garchm11` (GARCH-in-mean(1,1))23## 1. Identity4- **model_id:** `garchm11` · **family:** classical · **tier:** A · **status:** implemented · **impl:** custom (`src/wp46/models/custom.py::GARCHM11`)5- **Label:** GARCH-M(1,1) · **distributions:** normal, t, ged, skewt6- **Seminal citation:** `engle1987estimating` (Engle, Lilien & Robins 1987, ARCH-M)7- **Other references:** `bollerslev1986generalized`; literature matrix §a.1 ("mean and variance parameters not separable → affects multi-step forecasts of cumulative returns").89## 2. Definition10$$r_t = \mu + \delta\,\sigma_t^2 + \varepsilon_t,\quad \varepsilon_t = \sigma_t z_t,\qquad \sigma_t^2 = \omega + \alpha\,\varepsilon_{t-1}^2 + \beta\,\sigma_{t-1}^2 ,$$11with the risk-premium function $g(\sigma_t^2) = \sigma_t^2$ (variance in the mean, not $\sigma_t$ or $\log\sigma_t^2$). Recursion `rec_garchm`: $\sigma_0^2 = \omega + (\alpha+\beta)s_0$, $\varepsilon_t = r_t - \mu - \delta\sigma_t^2$ computed jointly with $\sigma_t^2$. Innovations: normal, t, GED, Hansen skew-t.1213## 3. Parameter space and admissibility14- Parameters: `mu, delta, omega, alpha, beta` (+ distribution). `delta` is unconstrained.15- Reparameterisation: $\omega = e^{\theta}$, persistence $s = \alpha + \beta = \sigma(\theta)$, share $\alpha/s = \sigma(\theta')$.16- Admissibility flag: $\omega > 0$, $\alpha, \beta \ge 0$, $\alpha + \beta < 1$ (variance equation as GARCH(1,1)).1718## 4. Nesting and relations19Nests `garch11` ($\delta = 0$). Only registry model whose conditional mean depends on the variance; its variance recursion is GARCH(1,1) but the residuals differ ($\varepsilon_t$ depends on δ).2021## 5. Estimation22Custom MLE with a model-specific objective (`GARCHM11._negll`): $-\sum_t[\log f_z(\varepsilon_t/\sigma_t) - \tfrac12\log\sigma_t^2]$ where $(\sigma_t^2, \varepsilon_t)$ come from `rec_garchm`. L-BFGS-B (maxiter 2000) from three starts (δ, ω, α, β) ∈ {(0, 0.05v, 0.05, 0.90), (0.02, 0.02v, 0.10, 0.88), (−0.02, 0.2v, 0.15, 0.65)}, Nelder–Mead polish on failure, μ start = sample mean, backcast $s_0$ from the demeaned returns (computed once with μ = sample mean, i.e. ignoring the in-mean term, and reused for filtering/forecasting). Point estimates only; no standard errors.2324## 6. Forecasting25`GARCHM11.forecast` recomputes $(\sigma_t^2, \varepsilon_t)$ with `rec_garchm`, then $\hat\sigma^2_{t+1|t} = \omega + \alpha\varepsilon_t^2 + \beta\sigma_t^2$ and $\hat\sigma^2_{t+k|t} = \omega + (\alpha+\beta)\hat\sigma^2_{t+k-1|t}$ (identical to GARCH(1,1)); mean forecast $\hat\mu_{t+1} = \mu + \delta\hat\sigma^2_{t+1|t}$ (used for VaR). Cumulative $h$-day variance = sum of per-step variances (the variance of the h-day return induced by the time-varying mean $\delta\sigma^2_{t+k}$ is ignored, as for all models). Method: `analytic`.2627## 7. Implementation28- `src/wp46/models/custom.py::GARCHM11` (numba `rec_garchm`).29- Cross-check: **none** — `garchm11` is not in `results/metrics/rugarch_crosscheck.json` (rugarch `archm` was not included in `tests/replication/rugarch_crosscheck.R`).30- Tests: **no unit, simulation or integration test references `GARCHM11`** (it is absent from `tests/unit/test_custom_models.py` imports and parametrisations). This is a gap relative to CLAUDE.md rule 6 — recorded in `_discrepancies.md`.3132## 8. Known limitations / failure modes33δ is weakly identified on daily data (risk-premium effects are second order; literature matrix: "low priority in a variance-forecast benchmark"); the joint mean/variance likelihood can be flat in δ and produce spurious large |δ| with near-integrated variance. The backcast ignores δ (minor). Positivity of $\sigma_t^2$ is guaranteed by the reparameterisation.3435## 9. Computational footprint36Analytic; 5–7 parameters; the recursion must recompute residuals at each likelihood evaluation (same cost order as `garch11` custom). Not in the pilot.3738## 10. Literature expectations39`engle1987estimating` motivate ARCH-M for term premia, not for variance forecasting; the literature matrix states the mean effect on h-day variance is second order. Expectation: variance forecasts essentially equal to GARCH(1,1); any difference comes from estimation noise in δ (H5: more failures, no accuracy gain).40