Moving-Average Models

Some series have a short, sharp memory. A surprise announcement moves a market today and its echo lingers for a day or two — then it is genuinely gone, not slowly fading, just gone. A moving-average model captures exactly this: the value now is a blend of the current shock and a few of the most recent shocks, and nothing older. Where an autoregression remembers its own past values forever (with fading weight), a moving average remembers only the last handful of surprises.

The order-q model, MA(q), is a finite linear combination of present and past white-noise shocks:

x_t = \varepsilon_t + \theta_1 \varepsilon_{t-1} + \theta_2 \varepsilon_{t-2} + \dots + \theta_q \varepsilon_{t-q}.

In backshift form it is x_t = \theta(B)\,\varepsilon_t with \theta(B) = 1 + \theta_1 B + \dots + \theta_q B^{q}. It is simply a linear process with a finite number of non-zero weights.

Always stationary — for free

Because an MA(q) is a finite sum of white-noise terms, each with mean zero and finite variance, the series automatically has a constant mean, a constant variance, and autocovariances that depend only on the lag. There is no condition to check: every MA(q) is stationary, for any values of the \theta's. Contrast AR, where you had to demand |\phi| < 1 to stop the series exploding. MA models never explode — a finite blend of bounded-variance shocks stays bounded. (There is a separate condition, invertibility, but that is about identifiability, not about whether the process is well-defined.)

The signature: an ACF that cuts off

Here is the single most useful fact about MA models. Two observations x_t and x_{t-k} share a shock only when their windows of "remembered surprises" overlap. An MA(q) reaches back q steps, so once the gap k exceeds q the windows are disjoint, they share no shock, and the correlation is exactly zero.

This sharp cutoff is what lets you read the order q straight off a correlogram — the cornerstone of identifying an ARMA model.

The MA(1) worked out

Take the simplest case, x_t = \varepsilon_t + \theta\,\varepsilon_{t-1}, with \operatorname{Var}(\varepsilon_t) = \sigma^2. Compute the autocovariances by multiplying out and using the fact that different shocks are uncorrelated:

\gamma_0 = \operatorname{Var}(x_t) = (1 + \theta^{2})\,\sigma^{2}, \gamma_1 = \operatorname{Cov}(x_t, x_{t-1}) = \theta\,\sigma^{2}, \qquad \gamma_k = 0 \ \text{ for } k \ge 2.

Dividing gives the lag-1 autocorrelation

\rho_1 = \frac{\theta}{1 + \theta^{2}}, \qquad \rho_k = 0 \ \text{ for } k \ge 2.

A neat surprise falls out: no matter how large you make \theta, the fraction \theta/(1+\theta^2) can never exceed 0.5 in size (it is maximised at \theta = 1, giving \rho_1 = 0.5). So an MA(1) can never have a lag-1 correlation stronger than \tfrac12. If your data show |\hat\rho_1| > 0.5, an MA(1) simply cannot have produced it.

The ±0.5 ceiling, plotted

Below is \rho_1 = \theta/(1+\theta^2) as \theta ranges over the real line. Notice how it rises to a peak of exactly 0.5 at \theta = 1, mirrors to -0.5 at \theta = -1, and heads back toward zero for large |\theta| — the whole curve trapped in the band [-0.5,\,0.5].

The cutoff you can see

This stem plot is the ACF of an MA(2) (\theta_1 = 0.7, \theta_2 = 0.4). Bars stand at lags 1 and 2; from lag 3 onward every bar is flat on the axis — the correlation is not "small", it is identically zero. That flat tail is the visual proof that the model reaches back exactly two steps.

The name collides with something you already met, and the two are genuinely different animals. A moving-average smoother is a filter you apply to observed data — average each point with its neighbours to suppress noise and reveal a trend. A moving-average model is a generative equation: it says the data were produced as a weighted sum of unobservable random shocks \varepsilon_t. One is a data-processing operation on numbers you can see; the other is a probabilistic statement about a mechanism you cannot see. They happen to share the phrase "moving average" and little else — don't let a smoother in your pipeline make you think you have fitted an MA model, or vice versa.

MA structure appears wherever a quantity is a running tally of recent independent events. Think of a measurement that is itself a short average — a monthly figure reported as a 3-month rolling number carries the same shocks for three months, then drops them. Or "overdifferencing": if you difference a series that was already stationary, you induce a negative MA(1) term as an artefact. Or survey data where each respondent is counted in a couple of consecutive waves. In all of these, an event's influence is real but strictly time-limited — exactly the finite, cut-off memory the MA model was built to describe.