I have a time series data set on which I am trying to apply the Granger causality test. After applying the test, I got following output. I am unsure how to interpret it correctly. Can someone explain how to interpret the output below?

grangertest(y~x, order=1, data=data1)
 Granger causality test

Model 1: y ~ Lags(y, 1:1) + Lags(x, 1:1)
Model 2: y ~ Lags(y, 1:1)
   Res.Df Df      F Pr(>F)
 1    296                 
 2    297 -1 2.0218 0.1561

grangertest(x~y, order=1, data=data1)
 Granger causality test

Model 1: x ~ Lags(x, 1:1) + Lags(y, 1:1)
Model 2: x ~ Lags(x, 1:1)
   Res.Df Df     F Pr(>F)
 1    296                
 2    297 -1 0.244 0.6217
  • $\begingroup$ Have you checked Cross Validated first? See, e.g., this question.. $\endgroup$
    – Xi'an
    Feb 20, 2016 at 10:05
  • 1
    $\begingroup$ IMO, this could be considered on topic here. This isn't a question asking for code or how to do something in some software. I think how to interpret statistical output is a statistical question. Note that we have other questions about how to interpret output that have been judged on topic (eg, here & here). $\endgroup$ Feb 20, 2016 at 13:37

1 Answer 1


+1 on Xi'an suggestion to read this post.

Now for your particular problem you are testing for Granger causality in 2 time series with lag $1$.

The null hypothesis is $H_0:$ "series $a_t$ does not Granger cause series $b_t$". Granger causality tests fit a linear model of the form

$$ b_t = \gamma + \sum_{j=1}^p \beta_j b_{t-1} + \sum_{j=1}^p \alpha_j a_{t-j} + \varepsilon_t $$

and test for significance of all $\alpha_j$ coefficients using an F-test for linear regression. If they lagged $a_t$ variables don't help to predict $b_t$, then the model reduces to a simple AR(p) $$ b_t = \gamma + \sum_{j=1}^p \beta_j b_{t-1} + \varepsilon_t, $$ and we say that "$a_t$ does not Grange cause $b_t$", i.e., null hypothesis cannot be rejected.

You have two time series $x_t$ and $y_t$, so Granger causality can go both ways; that's why in your output you see two tests: one for $x \rightarrow y$ and one for $y \rightarrow x$. For your data and model choise, both p-values are fairly large, hence you can't reject the null hypothesis for either direction. The tests suggest that you can just model each series separately with an AR(p) (or your favorite time series model).

Having said all that, this analysis comes with lots of caveats:

  • have you tried larger lags?
  • have you measured other time series?
  • non-linear relationships?
  • cointegration / residual check?
  • [ the usual suspicious stats mindset when seeing linear models ]

Last but not least, you might want to try the causality() function in the vars R package. Not only does it handle more than two variables, but it also has IMHO a more user-friendly interface and it prints more information in the console. E.g., it explicitly states the null hypothesis which will help you a lot to keep track of which direction and what exactly you are testing. For an example usage see my post here: Gigantic kurtosis?


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.