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 13 — ARMA Models

In the previous chapters, we studied:

Each captures a different type of dependence:

In practice, many time series exhibit both types simultaneously.

This motivates the ARMA model.


Learning Objectives

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


13.1 Why Combine AR and MA?

AR models:

MA models:

But real-world data often show both.


13.2 The ARMA(1,1) Model

Interpretation

The present depends on:


13.3 Simulation

import numpy as np
import matplotlib.pyplot as plt

np.random.seed(123)

n = 400
phi = 0.7
theta = 0.5

w = np.random.normal(size=n)
x = np.zeros(n)

for t in range(1,n):
    x[t] = phi*x[t-1] + w[t] + theta*w[t-1]

plt.figure(figsize=(10,4))
plt.plot(x, lw=1)
plt.title(r"ARMA(1,1): $\phi=0.7,\ \theta=0.5$")

plt.savefig("figs/ch13/arma11.png", dpi=300, bbox_inches="tight")
plt.close()   # replace with plt.show()
ARMA11

13.4 Mean

Without a constant:

E[xt]=0E[x_t] = 0

13.5 Stationarity and Invertibility

ARMA requires:

Stationarity (AR part)

ϕ<1|\phi| < 1

Invertibility (MA part)

θ<1|\theta| < 1

13.6 Backshift Form

(1ϕB)xt=(1+θB)wt(1-\phi B)x_t = (1+\theta B)w_t

13.7 Infinite MA Representation

xt=θ(B)ϕ(B)wtx_t = \frac{\theta(B)}{\phi(B)} w_t

13.8 Infinite AR Representation

wt=ϕ(B)θ(B)xtw_t = \frac{\phi(B)}{\theta(B)} x_t

13.9 ACF and PACF Behavior

Why?


13.10 Simulated ACF/PACF

from statsmodels.graphics.tsaplots import plot_acf, plot_pacf

fig, ax = plt.subplots(2,1, figsize=(8,6))

plot_acf(x, lags=30, ax=ax[0])
plot_pacf(x, lags=30, method='ywm', ax=ax[1])

plt.tight_layout()

plt.savefig("figs/ch13/arma11_acf_pacf.png", dpi=300, bbox_inches="tight")
plt.close()   # replace with plt.show()
ARMA11 ACF PACF

13.11 AR vs MA vs ARMA

ModelACFPACF
ARtails offcuts off
MAcuts offtails off
ARMAtails offtails off

13.12 Identification in Practice

Steps:

  1. visualize data

  2. ensure stationarity

  3. inspect ACF/PACF

  4. estimate candidates

  5. check diagnostics

  6. compare models


13.13 Estimation

import statsmodels.api as sm

model = sm.tsa.ARIMA(x, order=(1,0,1))
res = model.fit()

print(res.summary())
                               SARIMAX Results                                
==============================================================================
Dep. Variable:                      y   No. Observations:                  400
Model:                 ARIMA(1, 0, 1)   Log Likelihood                -564.412
Date:                Mon, 04 May 2026   AIC                           1136.824
Time:                        22:05:59   BIC                           1152.790
Sample:                             0   HQIC                          1143.147
                                - 400                                         
Covariance Type:                  opg                                         
==============================================================================
                 coef    std err          z      P>|z|      [0.025      0.975]
------------------------------------------------------------------------------
const         -0.2646      0.248     -1.068      0.286      -0.750       0.221
ar.L1          0.6901      0.044     15.840      0.000       0.605       0.775
ma.L1          0.5423      0.049     11.081      0.000       0.446       0.638
sigma2         0.9803      0.069     14.148      0.000       0.845       1.116
===================================================================================
Ljung-Box (L1) (Q):                   0.07   Jarque-Bera (JB):                 0.11
Prob(Q):                              0.80   Prob(JB):                         0.95
Heteroskedasticity (H):               0.70   Skew:                             0.04
Prob(H) (two-sided):                  0.04   Kurtosis:                         3.01
===================================================================================

13.14 Diagnostics

from statsmodels.stats.diagnostic import acorr_ljungbox

acorr_ljungbox(res.resid, lags=[10,20], return_df=True)
|  | lb_stat   | lb_pvalue |
|---------|------------|-----------|
| 10      | 4.229114   | 0.936420  |
| 20      | 25.470103  | 0.184034  |

13.15 Information Criteria

AIC=2logL+2kAIC = -2\log L + 2k
BIC=2logL+klognBIC = -2\log L + k\log n

13.16 Applications

ARMA models are used for:


13.17 Common Mistakes


13.18 Looking Ahead

Next:


Key Takeaways

Concept Check

Basic

  1. What is an ARMA model?

  2. What are the two components of an ARMA model?

  3. What does the AR component capture?

  4. What does the MA component capture?


Intuition

  1. Why do many real-world time series require both AR and MA components?

  2. How does an ARMA model differ from a pure AR or pure MA model?

  3. What happens when both persistence and short-term shocks influence a series?


Intermediate

  1. What are the stationarity and invertibility conditions for an ARMA(1,1) model?

  2. Why must both conditions hold?

  3. What is the backshift representation of an ARMA model?


ACF & PACF

  1. What pattern does the ACF of an ARMA model exhibit?

  2. What pattern does the PACF of an ARMA model exhibit?

  3. Why do ARMA models not show sharp cutoffs in ACF or PACF?


Interpretation

  1. Why is model identification more difficult for ARMA models than for AR or MA models?

  2. Why should ACF and PACF be used cautiously in ARMA identification?


Challenge

  1. Suppose a time series exhibits both:


Interpretation & Practice

  1. A time series shows:

  1. ACF and PACF do not show clear cutoff patterns.

    • Why might this happen?

    • What modeling approach would you take?

  2. A series appears smoother than pure AR but still persistent.

    • What might this indicate?

  3. A model captures persistence but leaves short-term fluctuations unexplained.

    • What component might be missing?

  4. A model captures shocks well but fails to capture persistence.

    • What component might be missing?


Finance Interpretation

  1. A financial time series shows:

  1. A return series appears unpredictable but slightly autocorrelated.

    • What type of structure might exist?


Diagnostics

  1. After estimating an ARMA model, residuals still show autocorrelation.

    • What does this imply?

    • What should you do next?


Challenge

  1. Two ARMA models fit equally well visually.

    • How would you choose between them?


Numerical Practice

ARMA Construction

  1. Consider:

xt=0.5xt1+wt+0.3wt1x_t = 0.5 x_{t-1} + w_t + 0.3 w_{t-1}

with:



Comparing Models

  1. Compare:



ACF Interpretation

  1. Suppose you observe:



Identification

  1. You observe:



Estimation Output

  1. Suppose:

xt=0.8xt1+wt+0.4wt1x_t = 0.8 x_{t-1} + w_t + 0.4 w_{t-1}


Diagnostics

  1. Suppose residuals show:



Model Selection

  1. Suppose two models produce:



Challenge

  1. Suppose an ARMA model fits the data well but performs poorly in forecasting.


  1. Suppose ϕ\phi is close to 1 and θ\theta is large.


  1. A time series shows:

What model would you try first? Why?


Appendix 13A — Additional Insight

A.1 Why ACF Tails Off

AR component generates:

MA component adds:

Combined → no cutoff


A.2 Infinite Representations

ARMA can be expressed as: