Vector Autoregression (VAR)
Interest rates, inflation and unemployment do not move in separate boxes. A jump in one leaks into
the others within a quarter or two, and their responses feed back again. Model any one of
them alone and you have quietly assumed the other two are irrelevant — which is exactly the
assumption a central bank cannot afford. What you want is a single model in which
every series is explained by the recent past of every series, its own included.
That model is the vector autoregression, and since Christopher Sims put it at the
centre of empirical macroeconomics in 1980 it has been the default workhorse for systems of series
that talk to each other.
The idea is disarmingly simple: take the
autoregressive
model you already know and let the scalar become a vector. Instead of
a number x_t at each time you carry a stack of numbers
\mathbf{y}_t = (y_{1t}, y_{2t}, \dots, y_{kt})^\top, and instead of a
scalar coefficient \phi you carry a matrix of
coefficients that lets each series draw on the lagged values of all the others.
The VAR(p) equation
With k series and p lags, the model is
\mathbf{y}_t = \mathbf{c} + A_1 \mathbf{y}_{t-1} + A_2 \mathbf{y}_{t-2} + \dots + A_p \mathbf{y}_{t-p} + \boldsymbol{\varepsilon}_t,
where each A_i is a k \times k coefficient
matrix, \mathbf{c} is a k-vector of intercepts,
and \boldsymbol{\varepsilon}_t is vector white noise:
mean zero, no correlation across time, but with a full contemporaneous
covariance
matrix \Sigma = \operatorname{Var}(\boldsymbol{\varepsilon}_t).
That last point matters: the shocks hitting the different series at the same instant are
allowed to be correlated, even though nothing predicts them from the past.
Read the matrix A_1 row by row and you see the machinery. Row
i is the equation for series i; the entry in
column j says how much yesterday's series j
pushes today's series i. The diagonal entries are the
familiar own-persistence; the off-diagonal entries are the cross-links that make a
VAR more than k separate AR models glued together.
Worked example: a bivariate VAR(1) as two ordinary regressions
Take k = 2, p = 1, with
\mathbf{c} = \begin{pmatrix} 1 \\ 2 \end{pmatrix}, \qquad A_1 = \begin{pmatrix} 0.5 & 0.2 \\ 0.1 & 0.4 \end{pmatrix}.
Multiplying out \mathbf{y}_t = \mathbf{c} + A_1 \mathbf{y}_{t-1} + \boldsymbol{\varepsilon}_t
row by row turns the compact matrix line into two perfectly ordinary regression equations:
\begin{aligned} y_{1t} &= 1 + 0.5\,y_{1,t-1} + 0.2\,y_{2,t-1} + \varepsilon_{1t}, \\ y_{2t} &= 2 + 0.1\,y_{1,t-1} + 0.4\,y_{2,t-1} + \varepsilon_{2t}. \end{aligned}
Each equation regresses one variable on a lag of both variables. Because the regressors are
identical across the two equations (both use y_{1,t-1} and
y_{2,t-1}), you can estimate the whole system by running plain
equation-by-equation OLS — that is the small miracle that makes VARs so easy to
fit. The coupling between the series lives entirely in the off-diagonal
0.2 and 0.1, and in the shock correlation
stored in \Sigma.
When is a VAR stable?
A scalar AR(1) is stationary when |\phi| < 1. The vector version
replaces "size of a number" with "size of the eigenvalues of a matrix". Stack the lags into one big
first-order system — the companion form — and the condition becomes clean:
- Write the VAR(p) as a first-order VAR in the stacked vector
(\mathbf{y}_t, \dots, \mathbf{y}_{t-p+1}); its coefficient matrix is
the kp \times kp companion matrix F.
- The process is stable (and hence stationary) iff every eigenvalue of
F lies strictly inside the unit circle,
|\lambda| < 1.
- Equivalently, all roots of \det(I - A_1 z - \dots - A_p z^p) = 0
lie outside the unit circle.
For our example the companion matrix is just A_1 itself. Its eigenvalues
solve \lambda^2 - 0.9\lambda + 0.18 = 0 (trace
0.9, determinant 0.18), giving
\lambda = 0.6 and \lambda = 0.3. Both are
comfortably inside the unit circle, so this VAR is stable: shocks fade and the system has a
well-defined long-run mean (I - A_1)^{-1}\mathbf{c}.
Seeing the coupling
Below are two series generated by a bivariate VAR. Series x (the driver)
turns first; series y repeats its swings a couple of steps later, because
y's equation leans on the lagged value of
x. Cover the last few points of x and you could
still guess where y is heading — that predictive lead is the whole reason
to model them jointly, and it is exactly what
cross-correlation
and
Granger
causality will let us measure and test.
Reading a VAR: impulse responses
A fitted VAR is a dense table of coefficients that no one can interpret by staring at it. The
remedy is the impulse-response function (IRF): give one shock a single unit kick at
time zero, set all other shocks to zero, and trace the ripple forward through the system. Because a
stable VAR has a moving-average representation
\mathbf{y}_t = \sum_{h \ge 0} \Psi_h\, \boldsymbol{\varepsilon}_{t-h},
the response of variable i at horizon h to a
shock in variable j is simply the (i,j) entry
of \Psi_h = F^h (in companion form). Stability guarantees these responses
decay back to zero.
Drag the persistence dial and watch two responses to the same shock: the series's
own response (which starts at one and tapers) and the cross
response of a partner series (which builds to a hump as the shock propagates, then fades).
A companion tool, the forecast-error variance decomposition, asks the mirror-image
question: of the uncertainty in forecasting series i at horizon
h, what fraction is due to shocks originating in each series? Together the
IRF and the variance decomposition are how a VAR is actually reported.
A VAR(p) with k series has
k^2 p autoregressive coefficients (plus k
intercepts and the k(k+1)/2 free entries of
\Sigma). Seven macro series with four lags is already
7^2 \times 4 = 196 slope coefficients — more than most quarterly samples
have observations. Fit that and you are not estimating a model, you are memorizing noise:
gorgeous in-sample fit, useless forecasts. The disciplines that keep a VAR honest are all forms of
restraint — use few series and few lags, pick the lag order with an information
criterion, or shrink toward a sensible prior with a Bayesian VAR (the famous
"Minnesota prior" nudges every coefficient toward the random-walk value and pulls distant lags
toward zero). Never let the matrices grow just because you can.
Before 1980, large macro-econometric models imposed hundreds of assumptions to decide which variable
was allowed to affect which — this equation gets these regressors, that one does not, this variable
is "exogenous". Christopher Sims argued that most of those exclusion restrictions were
incredible: no one really believed, for instance, that money had literally zero effect on
output within a quarter, yet the identification of the whole model hung on such claims. His
alternative was radical modesty: throw every variable into every equation with the
same lags — a VAR — and let the data speak, reserving structural assumptions only for the minimal
step of interpreting shocks. It won him a share of the 2011 Nobel Prize and reshaped how
macroeconomics is done. The catch, of course, is that turning IRFs into causal statements
still needs some identifying assumption about \Sigma — Sims moved the
incredible restrictions, he did not abolish them.