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.

Chapter 25 — ARCH Models

In earlier chapters, we studied models for the mean of a time series.

For example:

But financial time series often display another important feature.

Periods of calm are often followed by periods of turbulence.

Large shocks tend to cluster together.

ARCH models were developed precisely to model this behavior.

This chapter introduces:

The discussion emphasizes intuition and financial applications.


Learning Objectives

By the end of this chapter, you should be able to:


25.1 Volatility in Financial Markets

Financial returns rarely fluctuate with constant intensity.

Instead:

Large returns tend to cluster together.

Example: Stock Returns

During financial crises:

During stable periods:

This feature appears repeatedly in:


25.2 Constant Variance vs Time-Varying Variance

Classical regression models often assume:

Var(et)=σ2Var(e_t)=\sigma^2

where:

The Problem

Financial returns often violate this assumption.

Instead:

Var(et)Var(e_t)

changes over time.


25.3 Conditional Variance

ARCH models focus on conditional variance rather than unconditional variance.

Intuition

If yesterday experienced a large shock, today may also be volatile.

Example

Suppose markets experienced a crash yesterday.

Would you expect volatility today to be:

Most investors would expect volatility to remain elevated.

ARCH models formalize this intuition.


25.4 Volatility Clustering

Volatility clustering is one of the most important empirical features of financial returns.

A plot of returns often shows:

The sign may change:

but the magnitude tends to persist.


25.5 A Simple ARCH(1) Model

The ARCH model was introduced by Robert Engle in 1982.

The simplest ARCH model is ARCH(1).

Mean Equation

Suppose returns follow:

rt=μ+etr_t=\mu+e_t

where:

ARCH Variance Equation

The ARCH(1) variance equation is:

ht=α0+α1et12h_t = \alpha_0 + \alpha_1 e_{t-1}^2

where:


25.6 Intuition of ARCH

Suppose yesterday produced a large return shock:

et12e_{t-1}^2

Then the model predicts:

hth_t

will increase.

Large shocks yesterday imply elevated volatility today.


25.7 Why Squared Errors?

Why do we square the errors?

Because volatility concerns magnitude rather than direction.

Both:

increase volatility.

Squaring removes the sign.

Example

ShockSquared Shock
39
-39

Both imply high volatility.


25.8 ARCH as Volatility Memory

ARCH models create persistence in volatility.

Suppose:

This creates volatility clustering naturally.


25.9 Simulating ARCH Data in Python

We now simulate an ARCH(1) process.

import numpy as np
import matplotlib.pyplot as plt

np.random.seed(123)

T = 500

alpha0 = 1
alpha1 = 0.8

e = np.zeros(T)
h = np.zeros(T)

z = np.random.normal(size=T)

h[0] = alpha0

for t in range(1, T):

    h[t] = alpha0 + alpha1 * e[t-1]**2

    e[t] = np.sqrt(h[t]) * z[t]

plt.figure(figsize=(10,4))

plt.plot(e)

plt.title("Simulated ARCH(1) Process")

plt.savefig("figs/ch25/arch.png", dpi=300, bbox_inches="tight")
plt.close()   # replace with plt.show()
ARCH

Even though the shocks are random, the variance evolves systematically through time.


25.10 ARCH Effects in Real Financial Data

ARCH effects are extremely common in:

Financial returns often display:


Example from Financial Markets

[Figure Placeholder: Volatility clustering in stock returns]

25.11 Testing for ARCH Effects

Before estimating ARCH models, we usually test whether ARCH effects exist.

The test was developed by Engle.

Intuition Behind the ARCH Test

If volatility is constant:

et2e_t^2

should display little serial dependence.

But if volatility clusters, large squared residuals tend to follow large squared residuals.

Steps in the ARCH Test

Suppose we estimate:

rt=μ+etr_t=\mu+e_t

using OLS.

Step 1 — Obtain Residuals

Compute residuals:

e^t\hat e_t

Step 2 — Square the Residuals

Compute:

e^t2\hat e_t^2

Step 3 — Estimate Auxiliary Regression

Estimate:

e^t2=α0+α1e^t12+ut\hat e_t^2 = \alpha_0 + \alpha_1 \hat e_{t-1}^2 + u_t

More generally, multiple lags may be included.

Step 4 — Compute the LM Statistic

where:

Step 5 — Hypothesis Test

Under the null hypothesis:

H0:α1=0H_0: \alpha_1=0

the statistic follows approximately:

χ2(q)\chi^2(q)

where:

Interpreting the ARCH Test

ResultInterpretation
small p-valueevidence of ARCH
large p-valuelittle evidence of ARCH

Example of an ARCH Test

Suppose we obtain:

StatisticValue
LM statistic62.15
p-value0.000

This implies volatility is not constant through time.


25.12 ARCH Estimation in Python

We now estimate an ARCH model using Python.

# !pip install arch

import yfinance as yf
import numpy as np
from arch import arch_model

sp500 = yf.download("^GSPC", start="2018-01-01", auto_adjust=False)

returns = 100 * np.log(
    sp500["Adj Close"] /
    sp500["Adj Close"].shift(1)
).dropna()

model = arch_model(
    returns,
    vol="ARCH",
    p=1
)

results = model.fit()

print(results.summary())
[*********************100%***********************]  1 of 1 completed
Iteration:      1,   Func. Count:      5,   Neg. LLF: 22080.30900905849
Iteration:      2,   Func. Count:     13,   Neg. LLF: 700493.8997438303
Iteration:      3,   Func. Count:     19,   Neg. LLF: 3163.8892644355155
Iteration:      4,   Func. Count:     25,   Neg. LLF: 3124.9447385811245
Iteration:      5,   Func. Count:     29,   Neg. LLF: 3124.944202980584
Iteration:      6,   Func. Count:     33,   Neg. LLF: 3124.9442004194407
Iteration:      7,   Func. Count:     36,   Neg. LLF: 3124.9442004194448
Optimization terminated successfully    (Exit mode 0)
            Current function value: 3124.9442004194407
            Iterations: 7
            Function evaluations: 36
            Gradient evaluations: 7
                      Constant Mean - ARCH Model Results                      
==============================================================================
Dep. Variable:                  ^GSPC   R-squared:                       0.000
Mean Model:             Constant Mean   Adj. R-squared:                  0.000
Vol Model:                       ARCH   Log-Likelihood:               -3124.94
Distribution:                  Normal   AIC:                           6255.89
Method:            Maximum Likelihood   BIC:                           6272.82
                                        No. Observations:                 2091
Date:                Thu, Apr 30 2026   Df Residuals:                     2090
Time:                        09:45:06   Df Model:                            1
                                Mean Model                                
==========================================================================
                 coef    std err          t      P>|t|    95.0% Conf. Int.
--------------------------------------------------------------------------
mu             0.1090  2.578e-02      4.226  2.380e-05 [5.843e-02,  0.159]
                            Volatility Model                            
========================================================================
                 coef    std err          t      P>|t|  95.0% Conf. Int.
------------------------------------------------------------------------
omega          0.7970  5.646e-02     14.115  3.052e-45 [  0.686,  0.908]
alpha[1]       0.4822  9.694e-02      4.974  6.562e-07 [  0.292,  0.672]
========================================================================

Covariance estimator: robust

25.13 Plotting Conditional Volatility

We now plot the estimated conditional volatility.

vol = results.conditional_volatility

vol.plot(figsize=(10,4))

plt.title("Estimated ARCH Volatility")

plt.savefig("figs/ch25/arch_vol.png", dpi=300, bbox_inches="tight")
plt.close()   # replace with plt.show()
ARCH Conditional Volatility

25.14 ARCH vs GARCH

ARCH models are useful but sometimes require many lag terms.

GARCH models solve this problem by including lagged variance terms.

We will study GARCH models in the next chapter.

ARCH(1)

ht=α0+α1et12h_t = \alpha_0 + \alpha_1 e_{t-1}^2

GARCH(1,1)

ht=ω+α1et12+β1ht1h_t = \omega + \alpha_1 e_{t-1}^2 + \beta_1 h_{t-1}

25.15 Gretl Example: Testing for ARCH

GRETL makes ARCH testing very straightforward.


Step 1 — Estimate a Regression Model

Menu:

Model → Ordinary Least Squares

Step 2 — Run ARCH Test

From the model window:

Tests → ARCH

Choose the number of ARCH lags.


[GRETL Screenshot Placeholder: ARCH test dialog]

Example Output

Null hypothesis: no ARCH effect is present

LM statistic = 62.15

p-value = 0.000

ARCH effects are present.


25.16 Gretl Example: Estimating ARCH

To estimate an ARCH(1) model:

Model → Time Series → GARCH

Then set:


[GRETL Screenshot Placeholder: ARCH estimation dialog]

25.17 Common Mistakes


25.18 Looking Ahead

ARCH models introduced the idea of modeling volatility dynamically.

However, pure ARCH models often require many lag terms.

The next chapter introduces:

Key Takeaways

Concept Check

Basic

  1. What is volatility?

  2. What is the difference between:

    • mean

    • variance

  3. What does homoskedasticity mean?

  4. What does heteroskedasticity mean?


Intuition

  1. What is volatility clustering?

  2. Why do financial returns often display clustering in volatility?

  3. Why do large shocks tend to be followed by large shocks?

  4. Why is volatility easier to “see” than to model?


ARCH Structure

  1. What is the key idea behind an ARCH model?

  2. What does the equation

ht=α0+α1et12h_t = \alpha_0 + \alpha_1 e_{t-1}^2

represent?

  1. Why are squared residuals used?

  2. Suppose volatility spikes after a large shock.


Interpretation

  1. What does a large value of α1\alpha_1 imply?

  2. What does it mean if α1=0\alpha_1 = 0?


Challenge

  1. Can volatility be predictable even if returns are not?

  2. You analyze stock returns and find:



Interpretation & Practice

  1. A return series shows:

  1. Residuals show no autocorrelation, but squared residuals do.

    • What does this imply?

  2. A model assumes constant variance, but volatility clearly changes.

    • What problem arises?

  3. An ARCH model is estimated and α1\alpha_1 is significant.

    • What does this indicate?


Economic Interpretation

  1. A financial crisis leads to large return shocks.

    • What does the ARCH model predict for future volatility?

  2. A period of calm persists.

    • What does the model predict?


Challenge

  1. Why might volatility clustering be important for risk management?


Numerical Practice

Squared Shocks

  1. Suppose shocks are:

2,3,12, -3, 1

ARCH Equation

  1. Suppose:

ht=1+0.5et12h_t = 1 + 0.5 e_{t-1}^2

and:

et1=2e_{t-1} = 2

  1. Suppose:

et1=2e_{t-1} = -2

Interpretation

  1. Suppose α1=0.8\alpha_1 = 0.8.


  1. Suppose α1=0.1\alpha_1 = 0.1.


Stability

  1. What happens if α11\alpha_1 \ge 1?


Challenge

  1. Suppose:


ARCH Testing

  1. What is the purpose of the ARCH LM test?

  2. What is the null hypothesis?


Interpretation

  1. Suppose:

  1. Suppose:


Conceptual

  1. Why does the ARCH test use squared residuals?


Challenge

  1. Why is autocorrelation in squared residuals important?


Graph Interpretation

Volatility Clustering

Consider the following simulated return series:

Source
import numpy as np
import matplotlib.pyplot as plt

np.random.seed(123)

T = 300
alpha0 = 1
alpha1 = 0.8

e = np.zeros(T)
h = np.zeros(T)

z = np.random.normal(size=T)

h[0] = alpha0

for t in range(1, T):
    h[t] = alpha0 + alpha1 * e[t-1]**2
    e[t] = np.sqrt(h[t]) * z[t]

plt.figure(figsize=(10,4))
plt.plot(e)
plt.title("Simulated ARCH(1) Returns")
plt.axhline(0, linestyle='--', linewidth=1)
plt.tight_layout()

plt.savefig("figs/ch25/rtn_Q.png", dpi=300, bbox_inches="tight")
plt.close()   # replace with plt.show()
Rtn
  1. What feature of financial data does this illustrate?

  2. Identify periods of:

    • high volatility

    • low volatility

  3. Why is this inconsistent with constant variance?

  4. Why might a standard regression model fail to capture this behavior?



Appendix 25A — ARCH(1) Stability Condition

For the ARCH(1) model:

ht=α0+α1et12h_t = \alpha_0 + \alpha_1 e_{t-1}^2

the parameter restrictions are:

α0>0\alpha_0>0

and:

0α1<10 \le \alpha_1 < 1

The condition:

α1<1\alpha_1<1

ensures the variance process remains stable.

If:

α11\alpha_1 \ge 1

volatility may become explosive.


Appendix 25B — Why Financial Returns Often Display Fat Tails

ARCH processes naturally generate:

Even if the underlying shocks are normal, the resulting returns may appear fat-tailed.

This is one reason ARCH and GARCH models became so influential in finance.