SPB Git

Repository Public Research preview

constvar.md 3.7 KB 40 lines markdown

1# Model card — `constvar` (constant variance, window mean)23## 1. Identity4- **model_id:** `constvar` · **family:** baseline · **tier:** A · **status:** implemented · **impl:** arch 8.0.0 (`ConstantVariance`)5- **Label (registry):** Constant variance (window mean) · **distributions (registry):** normal6- **Seminal citation:** none (registry `ref: null`); the constant-variance model is the degenerate GARCH(1,1) with α = β = 0 (`bollerslev1986generalized`).7- **Other references:** `engle1982autoregressive` (ARCH as the alternative to constant variance); `hansen2005forecast` (uses the same kind of benchmarks).89## 2. Definition10Conditional mean and variance (returns in percent, variances in percent²):11$$r_t = \mu + \varepsilon_t,\qquad \varepsilon_t = \sigma_t z_t,\qquad \sigma_t^2 = \sigma^2 \ \ \text{for all } t .$$12Innovation law: $z_t \sim$ i.i.d. N(0,1) only (registry).1314## 3. Parameter space and admissibility15- Parameters: `mu`, `sigma2`; $\sigma^2 > 0$. arch bounds: $\sigma^2 \in [v/10^5,\ 10(v + \bar r^2)]$ with $v$ the sample variance of the residuals; constraint $\sigma^2 \ge 0$.16- No stationarity condition; the admissibility flag is always `True` in `ArchModel.fit` (no model-specific check).1718## 4. Nesting and relations19Nested in GARCH(1,1) ($\alpha = \beta = 0$), in ARCH(5) ($\alpha_i = 0$) and in every GARCH-type model of the registry. It is the "no dynamics" floor of the benchmark; `histvar252` is its rolling-window analogue without a mean equation.2021## 5. Estimation22arch 8.0.0 `ConstantMean` + `ConstantVariance` + `Normal`: closed form (arch's `_fit_no_arch_normal_errors`: $\hat\mu$ = window mean, $\hat\sigma^2$ = mean squared residual over the 1,000-day window) — no numerical optimisation, no backcast needed, no retries. Wrapper: `src/wp46/models/arch_models.py::ArchModel.fit`. Standard errors are not used: only point estimates enter the rolling benchmark (`src/wp46/estimation/rolling.py`).2324## 6. Forecasting25`res.forecast(horizon=22, method="analytic")`: $\hat\sigma^2_{t+k|t} = \hat\sigma^2$ for every $k$ (flat term structure); cumulative $h$-day variance $= h\,\hat\sigma^2$ (`Forecast.cumulative`). Method recorded: `analytic`.2627## 7. Implementation28- `src/wp46/models/arch_models.py` (`SPECS["constvar"]`, `ArchModel`), library arch 8.0.0 (`sheppard2025arch`).29- Cross-check: not part of the rugarch fixture (`results/metrics/rugarch_crosscheck.json` has no `constvar` entry); the closed-form estimate needs no numerical cross-check.30- Tests: no dedicated unit test; exercised only through the driver machinery (`tests/integration/test_rolling_driver.py` uses `garch11`, `har_rv`, `gjr11`, `heavy11`, not `constvar`).3132## 8. Known limitations / failure modes33No dynamics, so it is mis-specified for every instrument in the universe; its only role is a floor. No convergence failures possible. With rolling re-estimation it reacts to volatility changes with the 1,000-day window lag.3435## 9. Computational footprint36Closed form (fastest model of the registry together with `histvar*`); analytic forecasts. No pilot timing is recorded for `constvar` in `results/metrics/pilot/pilot_report.json` (pilot models: garch11, egarch11, gjr11, aparch11, nagarch11, realgarch11, har_rv, histvar22).3738## 10. Literature expectations39Hansen & Lunde (`hansen2005forecast`) and every later comparison find constant-variance / no-dynamics benchmarks dominated by any ARCH-type model at the 1-day horizon; the literature matrix (`docs/literature_matrix.md`, §a.1) lists it as a baseline only. Expected to be excluded from the MCS at short horizons; at h = 22 the gap to GARCH(1,1) is expected to narrow because mean reversion brings GARCH forecasts toward the unconditional variance (`christoffersen2000how`).40
Files main
Menu

Theme