Model card — garchm11 (GARCH-in-mean(1,1))
1. Identity
- model_id:
garchm11· family: classical · tier: A · status: implemented · impl: custom (src/wp46/models/custom.py::GARCHM11) - Label: GARCH-M(1,1) · distributions: normal, t, ged, skewt
- Seminal citation:
engle1987estimating(Engle, Lilien & Robins 1987, ARCH-M) - Other references:
bollerslev1986generalized; literature matrix §a.1 ("mean and variance parameters not separable → affects multi-step forecasts of cumulative returns").
2. Definition
$$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 ,$$
with 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.
3. Parameter space and admissibility
- Parameters:
mu, delta, omega, alpha, beta(+ distribution).deltais unconstrained. - Reparameterisation: $\omega = e^{\theta}$, persistence $s = \alpha + \beta = \sigma(\theta)$, share $\alpha/s = \sigma(\theta')$.
- Admissibility flag: $\omega > 0$, $\alpha, \beta \ge 0$, $\alpha + \beta < 1$ (variance equation as GARCH(1,1)).
4. Nesting and relations
Nests 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 δ).
5. Estimation
Custom 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.
6. Forecasting
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.
7. Implementation
src/wp46/models/custom.py::GARCHM11(numbarec_garchm).- Cross-check: none —
garchm11is not inresults/metrics/rugarch_crosscheck.json(rugarcharchmwas not included intests/replication/rugarch_crosscheck.R). - Tests: no unit, simulation or integration test references
GARCHM11(it is absent fromtests/unit/test_custom_models.pyimports and parametrisations). This is a gap relative to CLAUDE.md rule 6 — recorded in_discrepancies.md.
8. Known limitations / failure modes
δ 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.
9. Computational footprint
Analytic; 5–7 parameters; the recursion must recompute residuals at each likelihood evaluation (same cost order as garch11 custom). Not in the pilot.
10. Literature expectations
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).