There is a sentence that walks into meetings wearing a causal hat:

X helps predict Y.

Sometimes that is exactly the evidence you want. A pressure wave reaches one sensor before another. An order-flow imbalance precedes a price move. A neural population changes before a movement. A load spike in one service precedes a retry storm in another.

But prediction has an escape hatch. A variable can predict the future without being the thing that makes the future happen. It can be a witness, a delayed thermometer, a proxy for an earlier shock.

That is the tension inside Granger causality.

Granger’s original idea was deliberately operational: if the past of one series contains information that improves forecasts of another series, after accounting for the target’s own past, then the first series “causes” the second in the Granger sense.1 In a linear vector autoregression, that often becomes a nested regression test:

\[Y_t = \alpha + \sum_{\ell=1}^{p} a_\ell Y_{t-\ell} + \epsilon_t\]

versus

\[Y_t = \alpha + \sum_{\ell=1}^{p} a_\ell Y_{t-\ell} + \sum_{\ell=1}^{p} b_\ell X_{t-\ell} + \epsilon_t.\]

If the unrestricted model forecasts better, the past of \(X\) carries incremental information about \(Y\).

That is useful. It is not yet an intervention.

Pearl’s causal language is stricter: causal claims are about what would happen under interventions, and they require assumptions about the data-generating process, not just observed associations.2 Granger causality can be a good clue to such structure when the temporal ordering, measurement process, and conditioning set are right. It can also be fooled by the oldest enemy in causal inference: a common cause.

Thermometer Problem

Imagine a hidden driver \(H\).

It moves \(X\) quickly:

\[X_t = 0.42 X_{t-1} + cH_{t-1} + \eta_t.\]

It moves \(Y\) a little later:

\[Y_t = 0.38 Y_{t-1} + cH_{t-2} + \epsilon_t.\]

There is no direct \(X \rightarrow Y\) path in this story. Still, \(X_{t-1}\) will often help predict \(Y_t\) because \(X_{t-1}\) is a noisy report about \(H_{t-2}\).

The clock is real. The lever is not.

That is why conditional Granger tests matter. The pairwise question asks:

does X help predict Y after Y's own past?

The conditional question asks:

does X still help predict Y after Y's past and H's past?

If the signal disappears after conditioning on the earlier driver, the pairwise arrow was a shadow.

A Purple Driver Behind the Arrow

The lab below simulates three stationary time series:

  • \(H\) is an autoregressive common driver.
  • \(X\) reacts to \(H\) after one time step.
  • \(Y\) reacts to \(H\) after two time steps.

By default, the true direct coefficient from \(X\) to \(Y\) is exactly zero. The pairwise Granger test still finds a very strong \(X \rightarrow Y\) signal. The conditional test, which is allowed to see \(H\), mostly removes it.

H common driver X witness series Y target series Pairwise X to Y Reverse Y to X

Deterministic synthetic experiment. The tests are ordinary nested linear regressions: restricted and unrestricted VAR-style models are compared by an F statistic. "Conditioned" means the model includes lagged H as an observed control.

With the defaults, the lab says:

true X -> Y coefficient:      0.00
pairwise X -> Y p-value:      <0.001
conditioned X -> Y p-value:   0.275
pairwise incremental R2:      0.1102
conditioned incremental R2:   0.0014

So the pairwise test is not “wrong” in its own language. \(X\) really does improve forecasts of \(Y\) when the forecaster is only allowed to see \(Y\)’s past. The mistake would be to read that as an intervention claim. Once the forecaster also sees the past of \(H\), the extra information in \(X\) mostly vanishes.

Now raise Direct X to Y. At a direct coefficient around 0.47, the conditional test becomes highly significant in the same synthetic world. That is the point of conditioning: not to be cynical about every arrow, but to ask which arrows still carry information after the plausible earlier causes are in the room.

Pairwise Granger Draws in Pencil

The pairwise test is tempting because it is clean. For every ordered pair of series, fit two regressions and ask whether the lags of one improve forecasts of the other. A heatmap of p-values appears. A directed network appears. The paper or dashboard now has arrows.

But the pairwise test is answering a small question:

does this series contain predictive information not already in the target's own past?

It is not answering:

would intervening on this series change the target?

Those questions line up only under extra assumptions. You need to have measured enough of the relevant past. You need the lag order to cover the mechanism. You need a model class that can represent the dependence. You need the measurement process not to manufacture delays or erase them.

Runge and coauthors describe this larger time-series causal-discovery problem well: autocorrelation, time lags, common drivers, contemporaneous links, nonlinear dependence, and latent variables all interact.3 Methods such as PCMCI are built around conditional independence logic rather than pairwise screening alone, precisely because autocorrelated systems can create many plausible-looking shadows.

The lab is linear and friendly. Real systems are not obligated to be.

The Lag Is Part of the Claim

The slider labeled VAR lag order is easy to underestimate.

If the true mechanism takes two steps and the model only includes one lag, the regression is asking the wrong question. It may miss the real path. It may attribute the path to a nearby proxy. It may leave autocorrelated residuals that make p-values look sharper than they are.

This is one reason applied Granger analysis is full of mundane modeling chores: stationarity checks, lag selection, residual diagnostics, robustness across orders, transformations, and domain-specific timing arguments. Luetkepohl’s VAR treatment is useful precisely because it keeps Granger causality inside a full time-series modeling workflow rather than presenting it as a one-button arrow machine.4

There is also a measurement problem. Filtering, downsampling, aggregation, and observational noise can change the apparent dynamic structure. Barnett and Seth make this concrete for Granger causality in state-space models: pure autoregressive estimation can struggle when the observed process has a moving average component, which is exactly what filtering and measurement noise can induce.5

If your data are sampled every minute, but the mechanism operates in seconds, the lag you estimate is partly a property of the logging system.

What the Evidence Can Carry

I do not read the lab as an argument against Granger causality. I read it as an argument for using the name carefully.

Granger evidence is good when the scientific or engineering question is about forecasting:

does this signal help predict that signal?

That is already a serious question. Forecasting can drive alerting, control, execution, triage, diagnosis, and compression. In many systems, a predictive witness is valuable even if it is not the intervention point.

Granger evidence is also useful as a causal clue:

if this variable is upstream, does its past contain incremental information?

A real causal path should often leave a predictive trace. If it does not, either the effect is weak, the timing is wrong, the measurement is poor, or the model is misspecified. That negative evidence matters.

The danger is the unearned promotion:

predictive witness -> causal lever

That promotion needs a conditioning argument, a timing argument, and usually some domain knowledge.

My Arrow Checklist

When I see a Granger-style arrow, I want to know:

  1. What variables were allowed in the conditioning set?
  2. Is the lag order long enough for the mechanism and short enough for the data?
  3. Are residuals still autocorrelated?
  4. Could filtering, aggregation, or latency have created the apparent order?
  5. Is the claim about forecasting, intervention, or causal discovery?
  6. Does the arrow survive plausible alternative specifications?

The lab’s default failure is simple because the point is simple. \(X\) predicts \(Y\) because \(X\) is carrying old information about \(H\). In real data, the hidden driver will not politely sit in a purple line on the chart.

That is why the arrow has to survive conditioning.


  1. C. W. J. Granger, “Investigating Causal Relations by Econometric Models and Cross-Spectral Methods”, Econometrica, 37(3):424-438, 1969. 

  2. Judea Pearl, “Causal Inference in Statistics: An Overview”, Statistics Surveys, 3:96-146, 2009. 

  3. Jakob Runge et al., “Inferring Causation from Time Series in Earth System Sciences”, Nature Communications, 10, 2553, 2019. 

  4. Helmut Luetkepohl, New Introduction to Multiple Time Series Analysis, Springer, 2005. 

  5. Lionel Barnett and Anil K. Seth, “Granger Causality for State-Space Models”, Physical Review E, 91, 040101, 2015.