Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

Volatility Modeling

The ARCH Family

The fundamental insight of Engle (1982) was that volatility is time-varying and predictable from past squared residuals. The ARCH(q) model specifies:

rt=μ+εt,εt=σtzt,ztiid(0,1)r_t = \mu + \varepsilon_t, \qquad \varepsilon_t = \sigma_t z_t, \quad z_t \overset{iid}{\sim} (0,1)
σt2=ω+i=1qαiεti2\sigma_t^2 = \omega + \sum_{i=1}^{q} \alpha_i \varepsilon_{t-i}^2

For covariance stationarity we require ω>0\omega > 0, αi0\alpha_i \geq 0, and αi<1\sum \alpha_i < 1.

GARCH(1,1)

Bollerslev (1986) extended ARCH to include lagged conditional variance terms, yielding the GARCH(p,q) model. The canonical GARCH(1,1) is:

σt2=ω+αεt12+βσt12\sigma_t^2 = \omega + \alpha \varepsilon_{t-1}^2 + \beta \sigma_{t-1}^2

The persistence of volatility shocks is measured by α+β\alpha + \beta. In practice, estimates near financial data give α+β0.97\alpha + \beta \approx 0.970.99, implying highly persistent but mean-reverting volatility.

Asymmetric Extensions

Standard GARCH is symmetric — it treats positive and negative shocks identically. Empirically, negative shocks tend to increase volatility more than positive shocks of the same magnitude. This is the leverage effect.

GJR-GARCH (Glosten, Jagannathan, Runkle, 1993):

σt2=ω+αεt12+γεt121[εt1<0]+βσt12\sigma_t^2 = \omega + \alpha \varepsilon_{t-1}^2 + \gamma \varepsilon_{t-1}^2 \mathbf{1}[\varepsilon_{t-1} < 0] + \beta \sigma_{t-1}^2

Here γ>0\gamma > 0 captures the asymmetry: bad news contributes α+γ\alpha + \gamma to next period’s variance, good news only α\alpha.

EGARCH (Nelson, 1991):

lnσt2=ω+α(εt1σt12/π)+γεt1σt1+βlnσt12\ln \sigma_t^2 = \omega + \alpha \left(\frac{|\varepsilon_{t-1}|}{\sigma_{t-1}} - \sqrt{2/\pi}\right) + \gamma \frac{\varepsilon_{t-1}}{\sigma_{t-1}} + \beta \ln \sigma_{t-1}^2

EGARCH models the log-variance, which automatically ensures positivity without parameter constraints.

Model Comparison

ModelAsymmetryPositivity ConstraintParameters
GARCH(1,1)ω,α,β>0\omega, \alpha, \beta > 03
GJR-GARCHω,α,β0\omega, \alpha, \beta \geq 0; α+γ0\alpha + \gamma \geq 04
EGARCH(1,1)None (log specification)4

Estimation in Python

import pandas as pd
import yfinance as yf
from arch import arch_model

# Download data
ticker = yf.Ticker("^GSPC")
prices  = ticker.history(start="2015-01-01", end="2024-01-01")["Close"]
returns = 100 * prices.pct_change().dropna()

# GARCH(1,1) with normal errors
garch  = arch_model(returns, vol="Garch", p=1, q=1, dist="normal")
result = garch.fit(disp="off")
print(result.summary())

# GJR-GARCH with Student-t errors
gjr    = arch_model(returns, vol="Garch", p=1, o=1, q=1, dist="t")
result_gjr = gjr.fit(disp="off")
print(result_gjr.summary())

References