例子
#####################################################################################
# 构造格兰杰因果关系对,x是因,y是果,y_not不是x的果
import numpy as np
np.random.seed(1)
x = np.random.standard_normal(100)
np.random.seed(12)
y = np.r_[0, x[0:-1]] + np.random.standard_normal(x.shape) # x -> y,y滞后于x,所以y是x的果
y_not = x + np.random.standard_normal(x.shape) # y和x同步,所以y不是x的果
#####################################################################################
# 绘制散点图展示x、y以及x、y_not
import matplotlib.pyplot as plt
plt.plot(x, y, marker='o', ls='')
plt.plot(x, y_not, marker='o', ls='')
#####################################################################################
# 检测平稳性
from statsmodels.tsa.stattools import adfuller as ADF
pv_x = ADF(x)
pv_y = ADF(y)
pv_y_not = ADF(y_not)
#####################################################################################
# 检测格兰杰因果关系
from statsmodels.tsa.stattools import grangercausalitytests
x_y = grangercausalitytests(np.c_[y, x], maxlag=1) # 判断是不是 x -> y
y_x = grangercausalitytests(np.c_[x, y], maxlag=1) # 判断是不是 y -> x
x_y_not_x = grangercausalitytests(np.c_[y_not, x], maxlag=1) # 判断是不是 x -> y_not
y_not_x_x = grangercausalitytests(np.c_[x, y_not], maxlag=1) # 判断是不是 y_not -> x
结果
Granger Causality
number of lags (no zero) 1
ssr based F test: F=46.9068 , p=0.0000 , df_denom=96, df_num=1
ssr based chi2 test: chi2=48.3726 , p=0.0000 , df=1
likelihood ratio test: chi2=39.3866 , p=0.0000 , df=1
parameter F test: F=46.9068 , p=0.0000 , df_denom=96, df_num=1
Granger Causality
number of lags (no zero) 1
ssr based F test: F=0.0372 , p=0.8474 , df_denom=96, df_num=1
ssr based chi2 test: chi2=0.0384 , p=0.8446 , df=1
likelihood ratio test: chi2=0.0384 , p=0.8447 , df=1
parameter F test: F=0.0372 , p=0.8474 , df_denom=96, df_num=1
Granger Causality
number of lags (no zero) 1
ssr based F test: F=0.1823 , p=0.6704 , df_denom=96, df_num=1
ssr based chi2 test: chi2=0.1880 , p=0.6646 , df=1
likelihood ratio test: chi2=0.1878 , p=0.6647 , df=1
parameter F test: F=0.1823 , p=0.6704 , df_denom=96, df_num=1
Granger Causality
number of lags (no zero) 1
ssr based F test: F=0.0468 , p=0.8291 , df_denom=96, df_num=1
ssr based chi2 test: chi2=0.0483 , p=0.8260 , df=1
likelihood ratio test: chi2=0.0483 , p=0.8261 , df=1
parameter F test: F=0.0468 , p=0.8291 , df_denom=96, df_num=1
说明
- x是y的因,但y不是x的因。
- x不是y_not的因,且y_not不是x的因。
从例子中可以发现格兰杰因果关系和时间滞后有很大关系。所以有学者认为,格兰杰因果关系并不是真正的因果关系。