SPB Git

Repository Public Research preview

tarch11.md 5.2 KB

# Model card — tarch11 (TGARCH(1,1), Zakoïan threshold on the conditional standard deviation)

# 1. Identity

  • 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")
  • Label: TGARCH(1,1) (Zakoian, threshold on sigma) · distributions: normal, t, ged, skewt
  • Seminal citation: zakoian1994threshold
  • 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").

# 2. Definition (arch parameterisation, power = 1)

$$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} .$$ Mapping 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.

# 3. Parameter space and admissibility

  • Parameters: mu, omega, alpha[1], gamma[1], beta[1] (+ distribution).
  • 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).
  • Admissibility flag: always True in ArchModel.fit (no model-specific check for tarch11; only the optimizer constraints apply). Recorded in _discrepancies.md.

# 4. Nesting and relations

APARCH 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.

# 5. Estimation

arch 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.

# 6. Forecasting

h = 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).

# 7. Implementation

  • src/wp46/models/arch_models.py (SPECS["tarch11"]), arch 8.0.0.
  • 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.
  • Tests: none dedicated (not in the pilot).

# 8. Known limitations / failure modes

Boundary 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.

# 9. Computational footprint

Estimation like GJR; forecasts by simulation (22 × 2,000 draws per origin) — one of the slower forecast steps with aparch11, egarch11, avgarch11. No pilot timing.

# 10. Literature expectations

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).

Files main
Menu

Theme