# interpreting causality() in R for Granger Test

As shown in the documentation, after running a vector autoregression model (VAR), one can continue with the causality command for Granger tests:

causality(x, cause = NULL, vcov.=NULL, boot=FALSE, boot.runs=100)


This is the example in the documentation,

data(Canada) # below is the data structure

>               e     prod       rw     U
>1980 Q1 929.6105 405.3665 386.1361  7.53
>1980 Q2 929.8040 404.6398 388.1358  7.70
>1980 Q3 930.3184 403.8149 390.5401  7.47
>1980 Q4 931.4277 404.2158 393.9638  7.27
>1981 Q1 932.6620 405.0467 396.7647  7.37

var.2c <- VAR(Canada, p = 2, type = "const")
causality(var.2c, cause = "e")


which returns

\$Granger

Granger causality H0: e do not Granger-cause prod rw U

data:  VAR object var.2c

F-Test = 6.2768, df1 = 6, df2 = 292, p-value = 3.206e-06


My question is: what is this Granger test for and how to interpret it?

It says in the results that the null hypothesis is "H0: e do not Granger-cause prod rw U", does that mean it is testing whether e Granger causes prod, rw, U all at the same time with one p-value?

When using grangertest() in R, one always needs to specify both a cause and the dependent variable, so it is not entirely intuitive for me how causality() works.

• The R package generalCorr has a function causeSummary(cbind(y,x1,x2)) which will compute instantaneous causality without assuming linearity and time lags
– Rick
Oct 31, 2020 at 20:13

[W]hat is this Granger test for and how to interpret it?

Basically, Granger causality $$x \xrightarrow{Granger} y$$ exists when using lags of $$x$$ next to the lags of $$y$$ for forecasting $$y$$ delivers better forecast accuracy than using only the lags of $$y$$ (without the lags of $$x$$).

You can find definitions and details in Wikipedia and in free textbooks and lecture notes online. There are also many examples on this site, just check the threads tagged with .

It says in the results that the null hypothesis is "H0: e do not Granger-cause prod rw U", does that mean it is testing whether e Granger causes prod, rw, U all at the same time with one p-value?

You are right. Note that in a 4-variable VAR(2) model, testing whether one variables does not cause the other three amounts to testing $$3 \times 2$$ zero restrictions (three variables times two lags), and that is also what the test summary shows: df1=6.

When using grangertest() in R, one always needs to specify both a cause and the dependent variable, so it is not entirely intuitive for me how causality() works.

This is because in a $$K$$-variate system with $$K>2$$ there are many possible causal links. $$x_i$$ may cause $$x_j$$; $$x_i$$ may cause $$x_j$$ and $$x_k$$; $$x_i$$ and $$x_j$$ may cause $$x_k$$; etc. So the function requires you to specify precisely which causal link you want to examine.

• This is it! I thought I knew enough about Granger causality but actually I have only seen the "x to y" version, not "x to y1, y2, y3." Your answer clarifies a lot! Feb 27, 2017 at 20:41
• @carl_pch, nice to hear that :) Feb 27, 2017 at 20:56