I am trying Granger Causality for my stationary time series. I have difficulty in understanding its confidence level.
For e.g.1:
grangercausalitytests(filter_df[['transform_y_x', 'transform_y_y']], maxlag=15)
gives result:
Granger Causality
number of lags (no zero) 1
ssr based F test: F=3.7764 , p=0.0530 , df_denom=286, df_num=1
ssr based chi2 test: chi2=3.8161 , p=0.0508 , df=1
likelihood ratio test: chi2=3.7911 , p=0.0515 , df=1
parameter F test: F=3.7764 , p=0.0530 , df_denom=286, df_num=1
Granger Causality
number of lags (no zero) 2
ssr based F test: F=2.1949 , p=0.1133 , df_denom=283, df_num=2
ssr based chi2 test: chi2=4.4673 , p=0.1071 , df=2
likelihood ratio test: chi2=4.4330 , p=0.1090 , df=2
parameter F test: F=2.1949 , p=0.1133 , df_denom=283, df_num=2
Granger Causality
number of lags (no zero) 3
ssr based F test: F=7.5713 , p=0.0001 , df_denom=280, df_num=3
ssr based chi2 test: chi2=23.2818 , p=0.0000 , df=3
likelihood ratio test: chi2=22.3856 , p=0.0001 , df=3
parameter F test: F=7.5713 , p=0.0001 , df_denom=280, df_num=3
Granger Causality
number of lags (no zero) 4
ssr based F test: F=2.3756 , p=0.0523 , df_denom=277, df_num=4
ssr based chi2 test: chi2=9.8113 , p=0.0437 , df=4
likelihood ratio test: chi2=9.6467 , p=0.0468 , df=4
parameter F test: F=2.3756 , p=0.0523 , df_denom=277, df_num=4
Granger Causality
number of lags (no zero) 5
ssr based F test: F=1.4871 , p=0.1941 , df_denom=274, df_num=5
ssr based chi2 test: chi2=7.7338 , p=0.1715 , df=5
likelihood ratio test: chi2=7.6307 , p=0.1778 , df=5
parameter F test: F=1.4871 , p=0.1941 , df_denom=274, df_num=5
Granger Causality
number of lags (no zero) 6
ssr based F test: F=1.2781 , p=0.2675 , df_denom=271, df_num=6
ssr based chi2 test: chi2=8.0363 , p=0.2355 , df=6
likelihood ratio test: chi2=7.9247 , p=0.2437 , df=6
parameter F test: F=1.2781 , p=0.2675 , df_denom=271, df_num=6
Granger Causality
number of lags (no zero) 7
ssr based F test: F=1.7097 , p=0.1067 , df_denom=268, df_num=7
ssr based chi2 test: chi2=12.6378 , p=0.0814 , df=7
likelihood ratio test: chi2=12.3637 , p=0.0892 , df=7
parameter F test: F=1.7097 , p=0.1067 , df_denom=268, df_num=7
Granger Causality
number of lags (no zero) 8
ssr based F test: F=1.4672 , p=0.1692 , df_denom=265, df_num=8
ssr based chi2 test: chi2=12.4909 , p=0.1306 , df=8
likelihood ratio test: chi2=12.2222 , p=0.1416 , df=8
parameter F test: F=1.4672 , p=0.1692 , df_denom=265, df_num=8
Granger Causality
number of lags (no zero) 9
ssr based F test: F=2.0761 , p=0.0320 , df_denom=262, df_num=9
ssr based chi2 test: chi2=20.0400 , p=0.0177 , df=9
likelihood ratio test: chi2=19.3576 , p=0.0223 , df=9
parameter F test: F=2.0761 , p=0.0320 , df_denom=262, df_num=9
Granger Causality
number of lags (no zero) 10
ssr based F test: F=1.8313 , p=0.0556 , df_denom=259, df_num=10
ssr based chi2 test: chi2=19.7977 , p=0.0312 , df=10
likelihood ratio test: chi2=19.1291 , p=0.0387 , df=10
parameter F test: F=1.8313 , p=0.0556 , df_denom=259, df_num=10
Granger Causality
number of lags (no zero) 11
ssr based F test: F=1.8893 , p=0.0410 , df_denom=256, df_num=11
ssr based chi2 test: chi2=22.6493 , p=0.0198 , df=11
likelihood ratio test: chi2=21.7769 , p=0.0262 , df=11
parameter F test: F=1.8893 , p=0.0410 , df_denom=256, df_num=11
Granger Causality
number of lags (no zero) 12
ssr based F test: F=2.0157 , p=0.0234 , df_denom=253, df_num=12
ssr based chi2 test: chi2=26.5779 , p=0.0089 , df=12
likelihood ratio test: chi2=25.3830 , p=0.0131 , df=12
parameter F test: F=2.0157 , p=0.0234 , df_denom=253, df_num=12
Granger Causality
number of lags (no zero) 13
ssr based F test: F=1.8636 , p=0.0347 , df_denom=250, df_num=13
ssr based chi2 test: chi2=26.8434 , p=0.0131 , df=13
likelihood ratio test: chi2=25.6211 , p=0.0191 , df=13
parameter F test: F=1.8636 , p=0.0347 , df_denom=250, df_num=13
Granger Causality
number of lags (no zero) 14
ssr based F test: F=1.5283 , p=0.1013 , df_denom=247, df_num=14
ssr based chi2 test: chi2=23.9090 , p=0.0470 , df=14
likelihood ratio test: chi2=22.9296 , p=0.0614 , df=14
parameter F test: F=1.5283 , p=0.1013 , df_denom=247, df_num=14
Granger Causality
number of lags (no zero) 15
ssr based F test: F=0.9749 , p=0.4823 , df_denom=244, df_num=15
ssr based chi2 test: chi2=16.4815 , p=0.3508 , df=15
likelihood ratio test: chi2=16.0065 , p=0.3816 , df=15
parameter F test: F=0.9749 , p=0.4823 , df_denom=244, df_num=15
and e.g2:
grangercausalitytests(filter_df[['transform_y_y', 'transform_y_x']], maxlag=15)
it says:
Granger Causality
number of lags (no zero) 1
ssr based F test: F=70.4932 , p=0.0000 , df_denom=286, df_num=1
ssr based chi2 test: chi2=71.2326 , p=0.0000 , df=1
likelihood ratio test: chi2=63.6734 , p=0.0000 , df=1
parameter F test: F=70.4932 , p=0.0000 , df_denom=286, df_num=1
Granger Causality
number of lags (no zero) 2
ssr based F test: F=47.3519 , p=0.0000 , df_denom=283, df_num=2
ssr based chi2 test: chi2=96.3771 , p=0.0000 , df=2
likelihood ratio test: chi2=83.1351 , p=0.0000 , df=2
parameter F test: F=47.3519 , p=0.0000 , df_denom=283, df_num=2
Granger Causality
number of lags (no zero) 3
ssr based F test: F=33.6081 , p=0.0000 , df_denom=280, df_num=3
ssr based chi2 test: chi2=103.3450, p=0.0000 , df=3
likelihood ratio test: chi2=88.2665 , p=0.0000 , df=3
parameter F test: F=33.6081 , p=0.0000 , df_denom=280, df_num=3
Granger Causality
number of lags (no zero) 4
ssr based F test: F=24.1709 , p=0.0000 , df_denom=277, df_num=4
ssr based chi2 test: chi2=99.8248 , p=0.0000 , df=4
likelihood ratio test: chi2=85.6260 , p=0.0000 , df=4
parameter F test: F=24.1709 , p=0.0000 , df_denom=277, df_num=4
Granger Causality
number of lags (no zero) 5
ssr based F test: F=15.6663 , p=0.0000 , df_denom=274, df_num=5
ssr based chi2 test: chi2=81.4760 , p=0.0000 , df=5
likelihood ratio test: chi2=71.6615 , p=0.0000 , df=5
parameter F test: F=15.6663 , p=0.0000 , df_denom=274, df_num=5
Granger Causality
number of lags (no zero) 6
ssr based F test: F=11.5874 , p=0.0000 , df_denom=271, df_num=6
ssr based chi2 test: chi2=72.8595 , p=0.0000 , df=6
likelihood ratio test: chi2=64.8565 , p=0.0000 , df=6
parameter F test: F=11.5874 , p=0.0000 , df_denom=271, df_num=6
Granger Causality
number of lags (no zero) 7
ssr based F test: F=9.7282 , p=0.0000 , df_denom=268, df_num=7
ssr based chi2 test: chi2=71.9090 , p=0.0000 , df=7
likelihood ratio test: chi2=64.0753 , p=0.0000 , df=7
parameter F test: F=9.7282 , p=0.0000 , df_denom=268, df_num=7
Granger Causality
number of lags (no zero) 8
ssr based F test: F=8.3121 , p=0.0000 , df_denom=265, df_num=8
ssr based chi2 test: chi2=70.7626 , p=0.0000 , df=8
likelihood ratio test: chi2=63.1365 , p=0.0000 , df=8
parameter F test: F=8.3121 , p=0.0000 , df_denom=265, df_num=8
Granger Causality
number of lags (no zero) 9
ssr based F test: F=7.7863 , p=0.0000 , df_denom=262, df_num=9
ssr based chi2 test: chi2=75.1583 , p=0.0000 , df=9
likelihood ratio test: chi2=66.6028 , p=0.0000 , df=9
parameter F test: F=7.7863 , p=0.0000 , df_denom=262, df_num=9
Granger Causality
number of lags (no zero) 10
ssr based F test: F=6.9230 , p=0.0000 , df_denom=259, df_num=10
ssr based chi2 test: chi2=74.8427 , p=0.0000 , df=10
likelihood ratio test: chi2=66.3278 , p=0.0000 , df=10
parameter F test: F=6.9230 , p=0.0000 , df_denom=259, df_num=10
Granger Causality
number of lags (no zero) 11
ssr based F test: F=6.7168 , p=0.0000 , df_denom=256, df_num=11
ssr based chi2 test: chi2=80.5233 , p=0.0000 , df=11
likelihood ratio test: chi2=70.7452 , p=0.0000 , df=11
parameter F test: F=6.7168 , p=0.0000 , df_denom=256, df_num=11
Granger Causality
number of lags (no zero) 12
ssr based F test: F=6.8729 , p=0.0000 , df_denom=253, df_num=12
ssr based chi2 test: chi2=90.6239 , p=0.0000 , df=12
likelihood ratio test: chi2=78.4393 , p=0.0000 , df=12
parameter F test: F=6.8729 , p=0.0000 , df_denom=253, df_num=12
Granger Causality
number of lags (no zero) 13
ssr based F test: F=6.0868 , p=0.0000 , df_denom=250, df_num=13
ssr based chi2 test: chi2=87.6748 , p=0.0000 , df=13
likelihood ratio test: chi2=76.1718 , p=0.0000 , df=13
parameter F test: F=6.0868 , p=0.0000 , df_denom=250, df_num=13
Granger Causality
number of lags (no zero) 14
ssr based F test: F=5.6246 , p=0.0000 , df_denom=247, df_num=14
ssr based chi2 test: chi2=87.9896 , p=0.0000 , df=14
likelihood ratio test: chi2=76.3759 , p=0.0000 , df=14
parameter F test: F=5.6246 , p=0.0000 , df_denom=247, df_num=14
Granger Causality
number of lags (no zero) 15
ssr based F test: F=5.3775 , p=0.0000 , df_denom=244, df_num=15
ssr based chi2 test: chi2=90.9098 , p=0.0000 , df=15
likelihood ratio test: chi2=78.5443 , p=0.0000 , df=15
parameter F test: F=5.3775 , p=0.0000 , df_denom=244, df_num=15
from the eg.1 few lags, p-values are below 0.05,
so can I say y_x Granger causes y_y?
from the eg.2, all are the p-values are 0.0000,
so y_y Granger causes x_y?
so it means causation is bidirectional?
How to give a confidence score for the Granger Causation?
Does F-test value play any role here?
In eg.1 all the f-test values are very low and eg.2 all are very high.
In this case, can I consider F-test values for arriving a conclusion?
if so, then what will be the significant value for F-test to consider?
TIA
from the eg.1 few lags, p-values are below 0.05, so can I say y_x Granger causes y_y?
From your question, I assume that you want to set the p-value threshold at 0.05. In example 1, for number of lags (no zero) 1
when p-value shows up as p=0.0530
, it means that past 1 value (lag 1) of y_y (second column) have no statistically significant effect on current value to y_x (first column). For number of lags (no zero) 3
when p-value shows up as p=0.0001
, this means that past 3 values (jointly) of y_y (second column) have a statistically significant effect on the current value of y_x (first column).
from the eg.2, all are the p-values are 0.0000, so y_y Granger causes y_x?
similar to above answer, in all cases for example 2, p-value is < 0.05 this means that past values of y_x (second column) have statistically significant effect on current value of y_y (first column).
so it means causation is bidirectional?
It depends on the problem you are trying to solve, typical assumption is that causality is unidirectional. From your results, it seems that you are most likely able to forecast values of y_y from y_x than the other way around. If both the input signals are cyclic with similar periodicity, then it is possible to see a weak correlation between past values of y_y and current value of y_x.
How to give a confidence score for the Granger Causation? Does F-test value play any role here? In eg.1 all the f-test values are very low and eg.2 all are very high. In this case, can I consider F-test values for arriving a conclusion? if so, then what will be the significant value for F-test to consider?
based on the degrees of freedom, F-values and p-values are tied to each other, since you are using a threshold for p-value that means you are setting a threshold for F-value.
References: