SPB Git

Repository Public Research preview

heavy11.md 5.2 KB 44 lines markdown

1# Model card — `heavy11` (HEAVY(1,1), Shephard–Sheppard)23## 1. Identity4- **model_id:** `heavy11` · **family:** realized (Tier B) · **tier:** B · **status:** implemented · **impl:** custom (`src/wp46/models/custom.py::HEAVY11`)5- **Label:** HEAVY(1,1) · **distributions:** normal, t (return equation)6- **Seminal citation:** `shephard2010realising`7- **Other references:** `noureldin2012multivariate` (multivariate HEAVY), `engle2002new` (GARCH-X), `engle2006multiple` (MEM, the model class of the RM equation), `hansen2012realized`; `boudt2012highfrequency` (`HEAVYmodel` in R, not run).89## 2. Definition10With $RM_t = x_t$ (`rv5ss_on`, percent², end of day t):11$$r_t = \mu + \varepsilon_t,\ \varepsilon_t = \sqrt{h_t}\,z_t,\qquad h_t = \omega + \alpha\,RM_{t-1} + \beta\,h_{t-1}\quad(\text{HEAVY-r: } \operatorname{Var}[r_t\mid\mathcal F_{t-1}]),$$12$$\mu_t = \omega_R + \alpha_R\,RM_{t-1} + \beta_R\,\mu_{t-1}\quad(\text{HEAVY-RM: } E[RM_t\mid\mathcal F_{t-1}]) .$$13The return-variance equation uses the lagged realized measure, **not** $\varepsilon_{t-1}^2$ (literature-matrix caveat #7). `rec_heavy_r`: $h_0 = s_0$ (backcast of $\varepsilon^2$), $\mu_0$ = mean of the first min(75, T) realized measures. Innovations: $z_t$ normal or standardised t(ν); the RM equation has no distributional assumption beyond the multiplicative-error QL.1415## 3. Parameter space and admissibility16- Parameters: `mu, omega, alpha, beta, omega_r, alpha_r, beta_r` (+ `nu`).17- Reparameterisation: $\omega = e^{\theta}$, $\alpha = e^{\theta}$ (unbounded above), $\beta = \sigma(\theta) \in (0,1)$, $\omega_R = e^{\theta}$, $\alpha_R + \beta_R = \sigma(\theta) \in (0,1)$, $\alpha_R = (\alpha_R+\beta_R)\sigma(\theta')$.18- Admissibility flag: $\omega > 0$, $\alpha \ge 0$, $0 \le \beta < 1$, $\omega_R > 0$, $\alpha_R \ge 0$, $\alpha_R + \beta_R < 1$ (stationarity of the RM equation; stationarity of $h_t$ given stationary $RM$).1920## 4. Nesting and relations21Nests `rm_rw` in the return equation ($\alpha = 1$, $\omega = \beta = 0$); GARCH-X adds $\alpha_G\varepsilon_{t-1}^2$ to HEAVY-r (`garchx_rv11` reuses the HEAVY-RM equation); Realized GARCH is the log-linear relative with a measurement equation; the HEAVY-RM equation is a MEM(1,1) for the realized measure (`engle2006multiple`).2223## 5. Estimation24Quasi-maximum likelihood (`CustomModel.fit` with `extra_loglik`): objective $= -\sum_t\big[\log f_z(\varepsilon_t/\sqrt{h_t}) - \tfrac12\log h_t\big] + \sum_t\big[\log\mu_t + RM_t/\mu_t\big]$ — Gaussian (or t) QL for returns plus the multiplicative-error (exponential/Gamma, QLIKE-type) QL for the realized measure; the two equations share no parameters, so the joint maximisation is equivalent to the separate estimation described by Shephard & Sheppard, but the code performs it in **one** L-BFGS-B run (maxiter 2000) over all seven (eight) parameters from three starts (ω, α, β, ω_R, α_R, β_R) ∈ {(0.05 m, 0.4, 0.6, 0.05 m, 0.4, 0.55), (0.1 m, 0.3, 0.65, 0.1 m, 0.3, 0.6), (0.02 m, 0.5, 0.5, 0.02 m, 0.5, 0.48)} with $m$ = mean RM; Nelder–Mead polish on failure; μ start = sample mean. Point estimates only; the reported `loglik` is the joint QL (not comparable with GARCH).2526## 6. Forecasting27`HEAVY11.step_forecast` (closed form, as in `shephard2010realising`):28$$\hat h_{t+1} = \omega + \alpha RM_t + \beta h_t,\quad \hat\mu_{t+1} = \omega_R + \alpha_R RM_t + \beta_R\mu_t,\qquad \hat h_{t+k} = \omega + \alpha\,\hat\mu_{t+k-1} + \beta\,\hat h_{t+k-1},\quad \hat\mu_{t+k} = \omega_R + (\alpha_R + \beta_R)\,\hat\mu_{t+k-1},\ k \ge 2 .$$29Cumulative = sum over k ≤ h. Method: `analytic`.3031## 7. Implementation32- `src/wp46/models/custom.py::HEAVY11` (numba `rec_heavy_r` for both equations).33- Cross-check: **none against a library** (not in `results/metrics/rugarch_crosscheck.json`; `highfrequency::HEAVYmodel` not run).34- Tests: `tests/simulation/test_recovery.py::test_heavy_recovery` (T = 4,000, Gamma(4, 0.25) multiplicative RM noise; α, β, α_R within 0.1 of (0.4, 0.55, 0.45)); `tests/unit/test_custom_models.py::test_realized_models_fit_on_synthetic_measure`; `tests/integration/test_rolling_driver.py::test_driver_tier_b_and_failure_flags` (`heavy11`, normal, Tier B input and failure flags).3536## 8. Known limitations / failure modes37The return equation has no $\varepsilon^2$ term, so on days with invalid realized measures the imputed $r^2$ drives $h_t$ directly; α is unbounded above (large α with small β is admissible); μ_0 initialised by a 75-day mean of RM (not a backcast of the same form as $h_0$); the RM equation's multiplicative-error QL is consistent for $E[RM_t\mid\mathcal F_{t-1}]$ but the t option affects only the return equation; near-unit $\alpha_R + \beta_R$ makes long-horizon RM forecasts slow to revert.3839## 9. Computational footprint40Analytic; 7–8 parameters; two cheap recursions per evaluation. Not in the pilot; cost order of `garch11` custom to `nagarch11`.4142## 10. Literature expectations43`shephard2010realising`: HEAVY beats GARCH in-sample and out-of-sample at short horizons and adapts faster after level shifts, with the gain decaying as the horizon grows (their multi-step results); `noureldin2012multivariate` extend this to covariances. Pre-registered H3 applies; the matrix lists HEAVY among the three likelihood-based Tier B models.44
Files main
Menu

Theme