Repository Public Research preview
1# Model card — `fiegarch11` (FIEGARCH(1,d,1), fractionally integrated EGARCH) — post-registration extension23## 1. Identity4- **model_id:** `fiegarch11` · **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::FIEGARCH11`)5- **Label:** FIEGARCH(1,d,1) · **distributions:** normal, t (registry `dists`; the class also accepts ged/skewt but those pairs are not scored)6- **Seminal citation:** `bollerslev1996modeling`7- **Other references:** `nelson1991conditional` (EGARCH, the d = 0 limit, scored as `egarch11`), `baillie1996fractionally` (FIGARCH), `ding1996modeling` (long memory in volatility), `straumann2006quasi` (EGARCH QMLE theory). 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 \log\sigma_t^2 = \omega + \sum_{k=0}^{999}\lambda_k\,g(z_{t-1-k}),\qquad g(z) = \theta z + \gamma\big(|z| - E|z|\big),$$11$$\lambda(L) = (1-\phi L)^{-1}(1-L)^{-d}(1+\psi L),$$12i.e. `bollerslev1996modeling`'s $\log\sigma_t^2 = \omega + \phi(L)^{-1}(1-L)^{-d}[1+\psi(L)]\,g(z_{t-1})$ with first-order $\phi(L)$, $\psi(L)$ and the ARFIMA(1,d,1) filter expanded into a 1,000-term MA (`fiegarch_weights`: $\pi_k$ of $(1-L)^{-d}$, then $(1+\psi L)$, then division by $(1-\phi L)$; $\lambda_0 = 1$). $E|z|$ is the exact mean absolute value of the **fitted** law: $\sqrt{2/\pi}$ for the normal, otherwise the 20,000-point midpoint quadrature of $|F^{-1}(u)|$ (`_ez`, cached by ν) — unlike arch's EGARCH, which uses $\sqrt{2/\pi}$ for every law (`_discrepancies.md` 15), so ω is Nelson's unconditional mean of $\log\sigma^2$ here. Recursion `rec_fiegarch`: pre-sample $g = 0$ (its mean) for all 1,000 lags — **the backcast argument is not used**, so $\log\sigma_0^2 = \omega$; $\log\sigma_t^2$ clipped to [−50, 50]. Innovations: standardised normal or Student-t.1314## 3. Parameter space and admissibility15- Parameters: `mu, omega, d, phi, psi, theta, gamma` (+ `nu` for t).16- Reparameterisation: ω free; $d = 0.499\,\sigma(\theta_1) \in (0, 0.499)$; $\phi = 0.99\tanh(\theta_2)$, $\psi = 0.99\tanh(\theta_3) \in (-0.99, 0.99)$; θ free; $\gamma = e^{\theta_5} > 0$.17- Admissibility flag: $d < 0.5$, $|\phi| < 1$, $|\psi| < 1$ — the covariance-stationarity/invertibility region of the ARFIMA log-variance (`bollerslev1996modeling`); all hold by construction, so the flag is vacuous. No positivity constraint is needed (log specification). The literature leaves γ's sign and d ≥ 0.5 free at estimation; the code restricts both (γ > 0 = magnitude effect positive; d < 0.5 enforced rather than flagged).1819## 4. Nesting and relations20- d → 0: $(1-\phi L)(\log\sigma_t^2 - \omega) = (1+\psi L)\,g(z_{t-1})$, Nelson's EGARCH(1,1) with one extra MA term (ψ = 0 gives `egarch11` with $\beta_{arch} = \phi$, $\alpha_{arch} = \gamma$, $\gamma_{arch} = \theta$, $\omega_{arch} = \omega(1-\phi)$); the limit is excluded by $d = 0.499\,\sigma(\theta)$, hence "≈ EGARCH" at the boundary only.21- d ∈ (0, ½): hyperbolic decay of the $\lambda_k$ ($\lambda_k \sim k^{d-1}$, $\sum_k\lambda_k = \infty$ in the untruncated model) with a finite-variance log-volatility; the 1,000-lag truncation makes the implemented sum finite.22- `figarch11`/`hygarch11`/`fiaparch11` are the level-variance fractional models; `betategarch11` is the score-driven log-variance relative (bounded forcing instead of $|z|$).2324## 5. Estimation25Own `_negll` (needs $E|z|$ of the current law; cache keyed by the rounded distribution parameters) with the shared optimiser (`CustomModel.fit`): L-BFGS-B (maxiter 2000, ftol 1e-10, gtol 1e-6) from up to three starts (ω, d, φ, ψ, θ, γ) ∈ {(0.05ℓ, 0.3, 0.9, 0, −0.05, 0.15), (0.02ℓ, 0.45, 0.95, −0.2, −0.08, 0.1), (0.1ℓ, 0.2, 0.8, 0.2, 0, 0.2)}, ℓ = log sample variance; μ 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). The backcast $s_0$ is computed but not used by the recursion (§2). Each likelihood evaluation recomputes the 1,000 weights and the O(T × 1000) convolution of $g(z)$, where $z_t$ itself depends on the current $\log\sigma_t^2$ (sequential, not vectorisable). Point estimates only.2627## 6. Forecasting28`FIEGARCH11.forecast` (method `simulation`): the filtered $g(z_s)$, s ≤ t, fill the 1,000-lag history (older lags = 0); $\log\hat\sigma^2_{t+1|t} = \omega + \sum_i\lambda_i g_{t+1-1-i}$ is deterministic; for k ≥ 2, 2,000 paths draw $z \sim$ fitted law (`rvs`, seeded), append $g(z)$ to the path history and recompute $\log\sigma^2_{t+k}$ (clipped to ±50); forecast = cross-path mean of $\exp(\log\sigma^2_{t+k})$ (exponentiation is nonlinear, so no closed form is used; `bollerslev1996modeling` give lognormal-type moment formulas under normality that the code does not use). Cumulative h-day variance = sum of the first h steps.2930## 7. Implementation and verification31- `src/wp46/models/extensions.py::FIEGARCH11`, `fiegarch_weights`, numba `rec_fiegarch`; dispatched through `EXTENSIONS`.32- Tests (`tests/unit/test_extensions.py`): `test_betategarch_fiegarch_realegarch_fit_and_forecast` (FIEGARCH-t fit on the simulated GARCH-t fixture converges; 22-step forecast positive, finite, seed-reproducible); `test_no_lookahead_extensions` (5-step forecast unchanged when post-window returns are scaled ×5). No test of the weights `fiegarch_weights` against an ARFIMA reference and no test of the d → 0 EGARCH limit.33- **No external-package cross-check** (FIEGARCH is not in arch 8.0.0 or rugarch 1.5-6), no simulation-recovery test, no likelihood identity test. The only external identity in the extension set is HYGARCH(amp = 1) vs arch's FIGARCH (`hygarch11.md` §7). CLAUDE.md rule 6 is not met — hence `extension` status.3435## 8. Known limitations / failure modes36Post-registration, exploratory. **Clipping of $\log\sigma^2$ at ±50** (variance between e⁻⁵⁰ and e⁵⁰ percent²) is a hard wall for the optimiser and a silent truncation in the simulation; the ARFIMA filter is truncated at 1,000 lags (every in-sample value within the 1,000-day window uses zeros for its oldest lags); initialisation at $\log\sigma_0^2 = \omega$ ignores the backcast; d is confined to (0, 0.499) by construction (no d ≥ ½ or d < 0 fits, no d = 0 EGARCH point), γ > 0 by construction; d, φ and ψ are weakly separately identified in a 1,000-day window (a near-unit φ mimics d); breaks mimic long memory (`lamoureux1990persistence`, `hillebrand2005neglecting`); $E|z|$ depends on ν, so ω moves with ν during the optimisation.3738## 9. Computational footprint39Sequential O(T × 1000) numba recursion per likelihood evaluation (the forcing $g(z_t)$ needs $\sigma_t$, so the convolution cannot be vectorised) plus the O(1000) weight construction and, for the t law, a one-off 20,000-point quadrature per distinct ν; simulation forecasts O(2000 × 22 × 1000). Qualitatively **10–30× slower than GARCH(1,1)**, comparable to `fiaparch11`. Not timed in the pilot.4041## 10. Literature expectations42`bollerslev1996modeling` report long memory in S&P 500 log-volatility and option-pricing implications; `ding1996modeling` and `baillie1996fractionally` document hyperbolic decay; `lamoureux1990persistence`/`hillebrand2005neglecting` attribute part of it to breaks; `hansen2005forecast` find no h = 1 gain for long-memory models. Under H1 (asymmetry through θ) and H4 (persistence) the expectation is a performance close to `egarch11` at h = 1 and a possible small gain at h = 22 on equity indices; under H5 a high cost and failure rate.43