Quant Memo
Core

Granger Causality

A test for whether one time series's past helps predict another beyond that series's own past. It measures predictive precedence, not true cause and effect, and the difference matters enormously.

Prerequisites: ARMA Models, Ordinary Least Squares (OLS)

Granger causality tackles a very specific question: does knowing the past of series XX help you predict series YY better than YY's own past already does? If yes, we say "XX Granger-causes YY." The name is unfortunate, because it is not about causation in the everyday sense. It is about predictive usefulness with a time ordering: XX's history contains information about YY's future that YY's own history did not already carry.

Clarence "Clive" Granger's insight was to make a slippery idea testable. Cause is philosophically messy, but "does adding these extra lags shrink my forecast error?" is a clean statistical question you can answer with a regression and an F-test.

The two-regression test

Fit two models of YtY_t. The restricted model uses only YY's own past:

Yt=a+i=1pbiYti+ut.Y_t = a + \sum_{i=1}^{p} b_i\, Y_{t-i} + u_t .

The unrestricted model adds lags of XX:

Yt=a+i=1pbiYti+j=1pcjXtj+et.Y_t = a + \sum_{i=1}^{p} b_i\, Y_{t-i} + \sum_{j=1}^{p} c_j\, X_{t-j} + e_t .

Here the bib_i are the weights on YY's own past, the cjc_j are the weights on XX's past, and ut,etu_t, e_t are the leftover errors. The null hypothesis is that all the cjc_j are zero, meaning XX's past adds nothing. You test it with an F-test comparing the two models' leftover error (residual sum of squares, RSS):

F=(RSSrestrictedRSSunrestricted)/pRSSunrestricted/(n2p1).F = \frac{(\mathrm{RSS}_{\text{restricted}} - \mathrm{RSS}_{\text{unrestricted}})/p}{\mathrm{RSS}_{\text{unrestricted}}/(n - 2p - 1)} .

If adding XX's lags cuts the error by a lot more than chance would, FF is large, the p-value is small, and you conclude XX Granger-causes YY.

ModelPredictors of YtY_tWhat it captures
RestrictedYY's own lags onlyhow well YY forecasts itself
UnrestrictedYY's lags + XX's lagswhether XX's past adds forecasting power

The test is simply: does moving from the top row to the bottom row shrink the forecast error by more than luck would?

Granger causality means the past of XX improves the forecast of YY beyond YY's own past. Test it by whether the cross-lag coefficients cjc_j are jointly zero, an F-test on two nested regressions. It is predictive precedence, not real causation.

Worked example

You have n=120n = 120 months of a factor's returns (YY) and a sentiment index (XX), and you use p=2p = 2 lags. Fitting the restricted model (returns on their own two lags) leaves RSSrestricted=100\mathrm{RSS}_{\text{restricted}} = 100. Adding two lags of sentiment lowers it to RSSunrestricted=88\mathrm{RSS}_{\text{unrestricted}} = 88. Then

F=(10088)/288/(1205)=6.00.7657.8.F = \frac{(100 - 88)/2}{88/(120 - 5)} = \frac{6.0}{0.765} \approx 7.8 .

With p=2p = 2 and 115115 degrees of freedom, an FF of 7.87.8 sits well past the 5%5\% critical value of about 3.13.1, so you reject the null: sentiment's past does help predict this factor's returns. Note what you have and have not shown, you have shown predictive usefulness with the right time ordering, not that sentiment causes returns.

The causation trap

The word "causality" oversells what the test delivers. Three ways it misleads:

  • A hidden common driver. If some third variable ZZ moves XX first and YY a bit later, XX will Granger-cause YY even though XX does nothing to YY. This is the classic confounder, the same problem Correlation vs Causation warns about, now dressed in a time index.
  • Anticipation reverses the arrow. Markets are forward-looking. If traders foresee an event, prices move before the fundamental does, so the price Granger-causes the fundamental, the arrow points the wrong way relative to true cause.
  • It is only linear and only about the lags you chose. A nonlinear link or the wrong lag length can hide a real relationship or manufacture a fake one.

Granger causality is not proof of cause and effect. A lurking common factor, or markets anticipating news, can make XX "Granger-cause" YY with no real mechanism between them. Treat it as evidence about forecasting, then argue causation separately.

Practical cautions

  • Stationarity first. Run the test on stationary series. On trending or unit-root data it inherits the spurious-regression disease and rejects far too often. Difference the series, or if they are cointegrated use the error-correction form.
  • Lag length matters. Too few lags miss the relationship; too many burn degrees of freedom and add noise. Pick pp with an information criterion and check robustness.
  • It is a joint test. You are testing all the cjc_j at once, so report the F-test, not the individual t-stats, which multiple testing would render unreliable.

Granger causality is the natural read-out of a VAR: testing whether a block of off-diagonal lag coefficients is jointly zero is a Granger test. If you have already fit a VAR, the test is essentially free.

In quant work Granger tests show up when screening lead-lag relationships, does one asset's move precede another's, does an alternative-data feed lead returns. Useful for building forecasts, dangerous the moment someone reads "causality" literally. Pair it with Correlation vs Causation and, for genuine causal claims, instrumental variables.

Related concepts

Practice in interviews

Further reading

  • Granger (1969), Investigating Causal Relations by Econometric Models
  • Hamilton, Time Series Analysis (Ch. 11)
  • Lütkepohl, New Introduction to Multiple Time Series Analysis
ShareTwitterLinkedIn