12: Granger Causality#
from statsmodels.tsa.stattools import grangercausalitytests
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
#build the time series, just a simple AR(1)
t1 = [0.1*np.random.normal()]
for _ in range(100):
t1.append(0.5*t1[-1] + 0.1*np.random.normal())
#build the time series that is granger caused by t1
t2 = [item + 0.1*np.random.normal() for item in t1]
#adjust t1 and t2
t1 = t1[3:]
t2 = t2[:-3]
plt.figure(figsize=(10,4))
plt.plot(t1, color='b')
plt.plot(t2, color='r')
plt.legend(['t1', 't2'], fontsize=16)
<matplotlib.legend.Legend at 0x7fc1d5f71d90>
ts_df = pd.DataFrame(columns=['t2', 't1'], data=zip(t2,t1))
ts_df
t2 | t1 | |
---|---|---|
0 | -0.074890 | -0.052559 |
1 | 0.041190 | -0.091463 |
2 | -0.250354 | -0.154409 |
3 | -0.048394 | -0.061625 |
4 | -0.088648 | 0.075002 |
... | ... | ... |
93 | -0.065850 | -0.082384 |
94 | -0.014395 | -0.060732 |
95 | 0.031564 | -0.021469 |
96 | -0.018472 | -0.173017 |
97 | -0.039406 | -0.116893 |
98 rows × 2 columns
gc_res = grangercausalitytests(ts_df, 3)
Granger Causality
number of lags (no zero) 1
ssr based F test: F=0.0378 , p=0.8462 , df_denom=94, df_num=1
ssr based chi2 test: chi2=0.0391 , p=0.8433 , df=1
likelihood ratio test: chi2=0.0390 , p=0.8434 , df=1
parameter F test: F=0.0378 , p=0.8462 , df_denom=94, df_num=1
Granger Causality
number of lags (no zero) 2
ssr based F test: F=4.5927 , p=0.0126 , df_denom=91, df_num=2
ssr based chi2 test: chi2=9.6901 , p=0.0079 , df=2
likelihood ratio test: chi2=9.2317 , p=0.0099 , df=2
parameter F test: F=4.5927 , p=0.0126 , df_denom=91, df_num=2
Granger Causality
number of lags (no zero) 3
ssr based F test: F=19.5546 , p=0.0000 , df_denom=88, df_num=3
ssr based chi2 test: chi2=63.3302 , p=0.0000 , df=3
likelihood ratio test: chi2=48.5265 , p=0.0000 , df=3
parameter F test: F=19.5546 , p=0.0000 , df_denom=88, df_num=3