Repository Public Research preview
1# Model card — `hygarch11` (HYGARCH(1,d,1), hyperbolic GARCH) — post-registration extension23## 1. Identity4- **model_id:** `hygarch11` · **family:** fractional · **tier:** A · **status:** extension (E-01, added 2026-11-09 after the protocol freeze; scored with the frozen protocol, reported separately as exploratory) · **impl:** custom (`src/wp46/models/extensions.py::HYGARCH11`)5- **Label:** HYGARCH(1,d,1) · **distributions:** normal, t (registry `dists`; the class also accepts ged/skewt but those pairs are not scored)6- **Seminal citation:** `davidson2004moment`7- **Other references:** `baillie1996fractionally` (FIGARCH, the amp = 1 case, scored as `figarch11`), `conrad2006inequality` (positivity of FIGARCH ARCH(∞) weights), `ding1996modeling` (long memory in volatility), `sheppard2025arch` (the FIGARCH truncation convention reproduced here). Conrad's HYGARCH positivity conditions are not in the .bib (`_missing_references.md`). This card replaces the former unsupported stub.89## 2. Definition (as coded)10$$r_t = \mu + \varepsilon_t,\quad \varepsilon_t = \sigma_t z_t,\qquad \sigma_t^2 = \frac{\omega}{1-\beta} + \sum_{k=1}^{1000}\lambda_k\,\varepsilon_{t-k}^2,\qquad11\lambda(L) = 1 - (1-\beta L)^{-1}(1-\phi L)\big[1 + \mathrm{amp}\,\big((1-L)^d - 1\big)\big],$$12the ARCH(∞) form of `davidson2004moment` truncated at 1,000 lags (arch's FIGARCH convention). `figarch_weights` builds the weights by polynomial arithmetic: $\pi_0 = 1$, $\pi_k = \pi_{k-1}(k-1-d)/k$ (coefficients of $(1-L)^d$); $c_0 = 1$, $c_k = \mathrm{amp}\,\pi_k$ (k ≥ 1); $a(L) = (1-\phi L)\,c(L)$; $b_k = a_k + \beta b_{k-1}$ (division by $1-\beta L$); $\lambda_k = -b_k$, k = 1..1000 (so $\lambda_1 = \mathrm{amp}\,d + \phi - \beta$, and for amp = 1 the weights coincide with arch's $\lambda_j = \beta\lambda_{j-1} + \delta_j - \phi\delta_{j-1}$). Recursion `rec_archinf`: pre-sample $\varepsilon_{t-k}^2$ (t − k < 0) replaced by the backcast $s_0$ for all 1,000 lags, as in arch's `figarch_recursion`. Innovations: standardised normal or Student-t.1314## 3. Parameter space and admissibility15- Parameters: `mu, omega, d, phi, beta, amp` (+ `nu` for t).16- Reparameterisation: $\omega = e^{\theta_0}$; $d = \sigma(\theta_1) \in (0,1)$; $\phi = \sigma(\theta_2) \in (0,1)$; $\beta = \sigma(\theta_3) \in (0,1)$; $\mathrm{amp} = e^{\theta_4} > 0$. arch's sufficient constraints ($\phi \le (1-d)/2$, $\beta \le d + \phi$) are **not** imposed.17- Admissibility (`admissible`, and inside the likelihood): $\omega > 0$ and all 1,000 truncated weights $\lambda_k \ge -10^{-10}$, checked numerically; a proposal with a negative weight raises `FloatingPointError` in `sigma2`, which `_negll` turns into the penalty value 1e10 (a hard, non-differentiable wall for L-BFGS-B — the Nelder–Mead fallback handles stalls). Davidson's covariance-stationarity condition amp < 1 is **not** part of the flag: amp > 1 (explosive hyperbolic memory) is admissible as long as the weights are non-negative.1819## 4. Nesting and relations20- amp = 1: FIGARCH(1,d,1) exactly (same truncation; the identity is tested, §7); `figarch11` (arch) is the registry twin.21- amp → 0: $\lambda(L) = (\phi-\beta)L/(1-\beta L)$, i.e. GARCH(1,1) with $\alpha = \phi - \beta$ (reached only in the limit since amp = e^θ).22- d → 0: GARCH(1,1) for any amp (same reduction).23- amp < 1: covariance-stationary hyperbolic memory (finite unconditional variance $\frac{\omega}{1-\beta}\big/\big(1 - \sum_k\lambda_k\big)$ in the truncated representation); amp > 1: explosive. `fiaparch11` shares the amp = 1 weights with a power/asymmetry transform; `fiegarch11` is the log-variance analogue.2425## 5. Estimation26Shared custom MLE (`CustomModel.fit`): L-BFGS-B (maxiter 2000, ftol 1e-10, gtol 1e-6) from up to three starts (ω, d, φ, β, amp) ∈ {(0.1v, 0.4, 0.2, 0.5, 1.0), (0.05v, 0.6, 0.1, 0.4, 0.9), (0.2v, 0.3, 0.3, 0.6, 1.1)}, v = sample variance of the demeaned window; μ start = sample mean; ν start 6; stop after the second start if converged; Nelder–Mead polish (maxiter 4000) + final L-BFGS-B if not converged or stalled; A-05 floor vs GARCH(1,1) with the same law (−50 units → two perturbed restarts → `degenerate` flag). Backcast $s_0$ = exponentially weighted mean (75 lags, 0.94) of the first squared demeaned returns. Each likelihood evaluation recomputes the 1,000 weights (O(1000)) and the O(T × 1000) convolution. Point estimates only.2728## 6. Forecasting29`HYGARCH11.step_forecast` (method `analytic`): the ARCH(∞) recursion iterated forward with future squared innovations replaced by their forecasts, exactly as arch's `FIGARCH._analytic_forecast`:30$$\hat\sigma^2_{t+k|t} = \frac{\omega}{1-\beta} + \sum_{i=1}^{1000}\lambda_i\,\widetilde{\varepsilon^2}_{t+k-i},\qquad \widetilde{\varepsilon^2}_s = \varepsilon_s^2\ (s \le t),\quad = \hat\sigma^2_{s|t}\ (s > t),$$31floor 1e-12; exact under $E z^2 = 1$. Lags older than the window are padded with $\sigma_0^2$ (the first in-sample variance; this only matters for windows shorter than 1,000 days, where it differs from the backcast used in-sample). Cumulative h-day variance = sum of the first h steps.3233## 7. Implementation and verification34- `src/wp46/models/extensions.py::HYGARCH11`, `figarch_weights`, `frac_diff_coefs`, numba `rec_archinf`; dispatched through `EXTENSIONS`.35- Tests (`tests/unit/test_extensions.py`): `test_frac_diff_coefficients` (binomial coefficients of $(1-L)^{0.4}$; $\lambda_k = -\pi_k$ when φ = β = 0); **`test_hygarch_amp1_matches_arch_figarch_likelihood`** — the only external identity in the extension set: with amp = 1 and arch's FIGARCH-t optimum (same backcast), our log-likelihood equals arch's within **5.0** units, and the HYGARCH fit attains at least arch's FIGARCH log-likelihood − 1.0 (nesting); `test_no_lookahead_extensions` (5-step forecast unchanged when post-window returns are scaled ×5).36- **No external cross-check of amp ≠ 1** (HYGARCH is not in arch 8.0.0 or rugarch 1.5-6), no simulation-recovery test; the ±5.0 tolerance of the identity test is loose for a claimed "exact re-implementation" (`_discrepancies.md`, E-01). CLAUDE.md rule 6 is partially met (identity at the FIGARCH point only) — hence `extension` status. The arch-vs-rugarch FIGARCH gap of −1.47 (D-14) carries over to this implementation.3738## 8. Known limitations / failure modes39Post-registration, exploratory. **Identification of amp:** amp and the truncation interact — the discarded tail mass $\sum_{k>1000}\lambda_k$ (of order $1000^{-d}$) is observationally similar to amp < 1, and amp, d and $\omega/(1-\beta)$ trade off within a 1,000-day window (every in-sample variance already uses the backcast for its oldest lags); expect amp estimates near 1 with flat likelihoods. The positivity wall makes the likelihood discontinuous at the boundary; d ∈ (0,1) and φ, β ∈ (0,1) exclude the GARCH/IGARCH limits; no covariance-stationarity flag (amp > 1 fits are `ok`); long-horizon forecasts grow slowly without bound when amp ≥ 1; ω is small and poorly identified (as for `figarch11`).4041## 9. Computational footprint42O(T × 1000) per likelihood evaluation plus the O(1000) weight construction, over six to seven parameters: qualitatively **10–30× slower than GARCH(1,1)** (same order as arch's FIGARCH, which is the heaviest analytic Tier A model); analytic forecasts O(22 × 1000). Not timed in the pilot.4344## 10. Literature expectations45`davidson2004moment` introduced HYGARCH to reconcile hyperbolic memory with finite variance (Asian-crisis exchange rates); `baillie1996fractionally`/`ding1996modeling` document hyperbolic autocorrelation decay; `lamoureux1990persistence`/`hillebrand2005neglecting` warn that structural breaks mimic long memory; `hansen2005forecast` include FIGARCH among models that do not beat GARCH(1,1) at h = 1. Under H4 the expectation is no gain at h = 1 and, at most, a small gain at h = 22 that is unlikely to exceed `figarch11`'s; under H5 the model should show the highest failure/inadmissibility rate of the fractional block.46