【python 格兰杰因果关系系列之二】一个例子3分钟教会你使用格兰杰因果关系检验

文章目录

例子

#####################################################################################
# 构造格兰杰因果关系对,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

说明

  1. x是y的因,但y不是x的因。
  2. x不是y_not的因,且y_not不是x的因。

从例子中可以发现格兰杰因果关系和时间滞后有很大关系。所以有学者认为,格兰杰因果关系并不是真正的因果关系。

see also

格兰杰因果关系的设计、基本假设和额外要求

猜你喜欢

转载自blog.csdn.net/shiyuzuxiaqianli/article/details/118615785
今日推荐