SPB Git

Repository Public Research preview

tarch11.md 5.2 KB 40 lines markdown

1# Model card — `tarch11` (TGARCH(1,1), Zakoïan threshold on the conditional standard deviation)23## 1. Identity4- **model_id:** `tarch11` · **family:** asymmetric · **tier:** A · **status:** implemented · **impl:** arch 8.0.0 (`GARCH(p=1, o=1, q=1, power=1.0)`, arch name "TARCH/ZARCH")5- **Label:** TGARCH(1,1) (Zakoian, threshold on sigma) · **distributions:** normal, t, ged, skewt6- **Seminal citation:** `zakoian1994threshold`7- **Other references:** `glosten1993relation` (GJR, the **different** variance-threshold model), `ding1993long` (APARCH nests it with δ = 1), `taylor2008modelling`/`schwert1989why` (absolute-value dynamics), `bollerslev2010glossary` (definition caveat #1 of the literature matrix: "TGARCH ≠ GJR").89## 2. Definition (arch parameterisation, power = 1)10$$r_t = \mu + \varepsilon_t,\ \varepsilon_t = \sigma_t z_t,\qquad \sigma_t = \omega + \alpha\,|\varepsilon_{t-1}| + \gamma\,|\varepsilon_{t-1}|\,\mathbb 1\{\varepsilon_{t-1} < 0\} + \beta\,\sigma_{t-1} .$$11Mapping to Zakoïan's $\sigma_t = \omega + \alpha^+\varepsilon_{t-1}^+ - \alpha^-\varepsilon_{t-1}^- + \beta\sigma_{t-1}$ ($\varepsilon^+ = \max(\varepsilon,0)$, $\varepsilon^- = \min(\varepsilon,0)$): $\alpha^+ = \alpha$, $\alpha^- = \alpha + \gamma$. arch's recursion runs on $\sigma_t^{1}$ (`fresids = |ε|`), then squares; pre-sample terms use the power-1 backcast (weighted mean of $|\varepsilon|$) and $0.5\times$ it for the asymmetric term. Innovations: normal, t, GED, Hansen skew-t.1213## 3. Parameter space and admissibility14- Parameters: `mu, omega, alpha[1], gamma[1], beta[1]` (+ distribution).15- arch bounds: $\omega \in [10^{-8}v_1, 10v_1]$ with $v_1 = \overline{|\varepsilon|}$, $\alpha \in [0,1]$, $\gamma \in [-1, 2]$, $\beta \in [0,1]$; constraints $\omega > 0$, $\alpha \ge 0$, $\alpha+\gamma \ge 0$ (so $\alpha^- \ge 0$), $\beta \ge 0$, $\alpha + \tfrac12\gamma + \beta < 1$. The last constraint is arch's generic GARCH constraint applied to power-1 coefficients; it is **not** the second-order stationarity condition of the TGARCH (which involves $E[(\alpha|z| + \gamma|z|\mathbb 1\{z<0\} + \beta)^2] < 1$, see `he1999properties`/`ling2002necessary` for the APARCH family).16- Admissibility flag: **always `True`** in `ArchModel.fit` (no model-specific check for `tarch11`; only the optimizer constraints apply). Recorded in `_discrepancies.md`.1718## 4. Nesting and relations19APARCH with δ = 1 and $\gamma_{APARCH}$ mapped via $(1-\gamma_A)\alpha_A = \alpha$, $(1+\gamma_A)\alpha_A = \alpha + \gamma$. Nests `avgarch11` (γ = 0). Not nested in and not nesting `gjr11`/`garch11` (different power). Same sign asymmetry as GJR but on σ, which makes the variance response to a shock quadratic in $|\varepsilon|$ with a kink at zero.2021## 5. Estimation22arch `ConstantMean` + `GARCH(1,1,1,power=1.0)` + distribution, SLSQP (`maxiter` 1000), grid starting values (same grid as GJR, target scaled to the power-1 moment), power-1 backcast, ≤ 2 restarts (`ArchModel.fit`). Point estimates only.2324## 6. Forecasting25h = 1: analytic ($\hat\sigma_{t+1|t}$ from the recursion, squared). **h > 1: simulation** (`SPECS["tarch11"]["analytic"] = False`; arch raises for analytic multi-step when power ≠ 2): 2,000 paths of $\sigma_{t+k}$ via `GARCH._simulate_paths` with power 1 (shock $= z\,\sigma$, $|{\rm shock}|$ and its negative part feed the next step), forecast $\hat\sigma^2_{t+k|t}$ = mean over paths of $\sigma_{t+k}^2$. Shocks: for the normal, `np.random.default_rng(seed).standard_normal` with seed = 46 + origin index (reproducible); **for t/GED/skew-t, `rng=None` → arch draws from the fitted distribution with an unseeded generator** (`Distribution(seed=None)` → `default_rng()`), so multi-step forecasts are not bit-reproducible (recorded in `_discrepancies.md`). Cumulative = sum over k ≤ h. Method recorded: `simulation` (h > 1).2627## 7. Implementation28- `src/wp46/models/arch_models.py` (`SPECS["tarch11"]`), arch 8.0.0.29- Cross-check: rugarch `fGARCH(TGARCH)`-t was fitted on the fixture (`results/metrics/rugarch_crosscheck.json["rugarch"]["tgarch11_t"]`, log-likelihood −3378.2657, converged) **but no arch fit of `tarch11` was computed in `tests/replication/test_rugarch.py`, so no comparison exists** (the `comparison` block has no `tgarch11_t` entry). Gap recorded in `_discrepancies.md`.30- Tests: none dedicated (not in the pilot).3132## 8. Known limitations / failure modes33Boundary optima at α = 0 (all asymmetry on γ); the power-1 recursion is less conditioned for very small |ε| (percent units mitigate); simulation forecasts carry Monte-Carlo error (2,000 paths) and, for non-normal laws, are not seeded; no admissibility flag beyond the optimizer constraints.3435## 9. Computational footprint36Estimation like GJR; forecasts by simulation (22 × 2,000 draws per origin) — one of the slower forecast steps with `aparch11`, `egarch11`, `avgarch11`. No pilot timing.3738## 10. Literature expectations39`zakoian1994threshold` and `hansen2005forecast` (who include "TGARCH"/"TS-GARCH" power-1 variants) report that absolute-value/threshold specifications are competitive on equities; the matrix flags the definitional ambiguity rather than a ranking. Expectation: close to GJR and APARCH on equities (H1), with the simulation step adding cost (H5).40
Files main
Menu

Theme