The Backshift Operator
Time-series algebra is littered with lagged terms: x_{t-1},
x_{t-2}, differences like x_t - x_{t-1}, sums of
them stretching back years. Writing all those subscripts by hand is not just tedious — it hides the
structure. The backshift operator (also called the lag operator) is a single
piece of notation that turns those tangled subscripts into ordinary algebra. Once you have it, an
autoregression, a difference, and a seasonal filter all become polynomials you can multiply,
factor and cancel like numbers.
The whole idea is one definition. The operator B takes a series and shifts it
one step into the past:
B\,x_t = x_{t-1}.
That is all B does — reach back one tick. Apply it twice and you reach back
two, and in general
B^{k}\,x_t = x_{t-k}.
By convention B^{0} = 1 is the "do nothing" operator (1\cdot x_t
= x_t). Some authors write L for "lag" instead of
B for "backshift" — same operator, different letter.
Treat B like a number
The quiet miracle is that B obeys all the ordinary rules of algebra. It is a
linear operator, so it distributes over sums and pulls out constants:
B\,(a\,x_t + b\,y_t) = a\,x_{t-1} + b\,y_{t-1}.
Powers of B add the way exponents should — B^{i}B^{j} =
B^{\,i+j} — and different powers commute, because shifting back 2 then 3 is the same as
shifting back 3 then 2. So any expression built from B is just a
polynomial in B, and you may add, multiply and factor those
polynomials exactly as if B were a variable like z.
This is the licence that makes the whole ARMA machinery run.
- Definition: B\,x_t = x_{t-1}, and hence
B^{k} x_t = x_{t-k} with B^{0}=1.
- Linear: B(a x_t + b y_t) = a B x_t + b B y_t.
- Polynomial algebra: expressions in B add, multiply and
factor like polynomials in an ordinary variable — B^{i}B^{j}=B^{i+j} and
B^{i}B^{j}=B^{j}B^{i}.
Seeing the shift
Applying B geometrically means sliding the whole series one tick to the
right: the value that used to sit at time t-1 now lines up under
time t. Below, the solid line is x_t and the dashed
line is its backshifted copy B x_t. They have the same shape — one is just the
other, delayed by one step.
Reading a lagged model is now reading a delay: every extra power of B nudges a
copy one more step to the right.
Differencing, in one symbol
The operation you already know from
differencing —
subtracting each value from the next — is just 1 - B. We give it its own
symbol, the difference operator \nabla:
\nabla x_t = (1 - B)\,x_t = x_t - x_{t-1}.
Differencing twice is \nabla^2 = (1-B)^2 = 1 - 2B + B^2, which expands to
x_t - 2x_{t-1} + x_{t-2} — the polynomial algebra doing the bookkeeping for
you. A seasonal difference of period s (e.g.
s=12 for monthly data) reaches back a whole season:
\nabla_s x_t = (1 - B^{s})\,x_t = x_t - x_{t-s}.
Trend removal, seasonal removal, and their combinations are now just products of these factors — a fact
the seasonal ARIMA
models lean on completely.
Writing whole models compactly
Here is the payoff. An autoregression on p lags,
x_t = \phi_1 x_{t-1} + \dots + \phi_p x_{t-p} + \varepsilon_t,
collects all its lag terms into one polynomial. Move them to the left and factor out
x_t:
(1 - \phi_1 B - \dots - \phi_p B^{p})\,x_t = \varepsilon_t \quad\Longleftrightarrow\quad \phi(B)\,x_t = \varepsilon_t.
The bracket is the AR polynomial \phi(B). A
moving-average
model does the same on the noise side with an MA polynomial
\theta(B) = 1 + \theta_1 B + \dots + \theta_q B^{q}, and the general
ARMA model is the
elegant one-liner
\phi(B)\,x_t = \theta(B)\,\varepsilon_t.
Whole families of models now live in two short polynomials. And because they are polynomials, you can
factor them: the roots of \phi(z)=0 and
\theta(z)=0 decide whether a model is well-behaved — the subject of
causality and
invertibility.
Worked example
Expand (1 - B)(1 + B)\,x_t. Multiply the polynomials just as
you would numbers: (1-B)(1+B) = 1 - B^2 (the cross terms
+B and -B cancel). Apply it:
(1 - B^2)\,x_t = x_t - x_{t-2}.
So differencing "up then down" collapses to a single lag-2 difference — a fact you would have sweated
over in raw subscripts, delivered instantly by the algebra.
A second one: (1 - 0.5\,B)\,x_t. This is the AR(1) polynomial
with \phi = 0.5. Distribute:
(1 - 0.5\,B)\,x_t = x_t - 0.5\,x_{t-1}.
Setting that equal to \varepsilon_t recovers
x_t = 0.5\,x_{t-1} + \varepsilon_t — the familiar
autoregressive
model, now packaged as a single factor 1 - 0.5B.
The most common slip is to read 1 - B as ordinary arithmetic — as if you were
subtracting the number 1, or subtracting B as a scalar. It is neither. The
1 is the identity operator (leave the series alone) and
B is the shift operator (send it back one step). So
(1-B)x_t means "the series minus its own one-step-delayed copy,"
x_t - x_{t-1} — not x_t - 1 and not
x_t - B. Every symbol in a backshift expression is an operator acting on the
series; the constants multiply the identity operator. Keep that straight and the algebra is safe.
Yes — and it is where the magic hides. Take AR(1): (1 - \phi B)x_t = \varepsilon_t.
Formally "divide": x_t = (1-\phi B)^{-1}\varepsilon_t. If
|\phi| < 1 we can expand that inverse as a geometric series in the operator,
(1-\phi B)^{-1} = 1 + \phi B + \phi^2 B^2 + \dots, giving
x_t = \varepsilon_t + \phi\varepsilon_{t-1} + \phi^2 \varepsilon_{t-2} + \cdots
— an infinite moving average of past shocks. The convergence of that series is exactly the condition for
the model to make sense, and it is why the roots of the polynomial matter. Treating
B like a number, cautiously, unlocks the
linear-process
representation of nearly every stationary series.