【Data Procession】格兰杰因果检验

本文介绍了格兰杰因果检验的原理及其在Python中的应用,包括grangercausalitytests函数用法、判别因果性、绘制混淆矩阵以及相关函数的使用。重点强调了在数据处理中如何通过时序变量判断因果关系。
摘要由CSDN通过智能技术生成

数据处理方法汇总

第一章 格兰杰因果检验(Granger causality test)


一、格兰杰因果测试是什么?

个人总结为:用于测试不同变量之间因果关系的测试方法(注意:重点指一个时序变量变化对另一个变量变化的影响)。
百度百科解释为:
格兰杰因果关系检验的基本思想是在包含过去信息的条件下,一个变量的预测能够提高另一个变量的预测效果,这表明第一个变量可能是第二个变量的格兰杰原因,即第一个变量的变化能解释第二个变量的未来变化。

二、Python代码实现

1.grangercausalitytests函数用法

grangercausalitytests(df[[A, B]], maxlag=2, verbose=False)

其中df为DataFrame,A和B为索引名称,maxlag指lag的最大值

# 引入库
from statsmodels.tsa.stattools import grangercausalitytests

# 对数据进行分析
df = pd.read_csv('###.csv', parse_dates=['date'])  #读取数据并指定那一列为时间数据
df['month'] = df.date.dt.month
grangercausalitytests(df[['value', 'month']], maxlag=2)

2.判别因果性

输出结果(例):
1:{‘ssr_ftest’: (2.3606134965347234e-13, 0.9999996100873887, 120.0, 1), ‘ssr_chi2test’: (2.3999570548103024e-13, 0.9999996091214877, 1), ‘lrtest’: (2.2737367544323206e-13, 0.9999996195389934, 1), ‘params_ftest’: (79484.14726491661, 3.601637315038649e-171, 120.0, 1.0)}, [<statsmodels.regression.linear_model.RegressionResultsWrapper object at 0x7f7d2f8df850>, <statsmodels.regression.linear_model.RegressionResultsWrapper object at 0x7f7d2f8cc250>,
array([[0., 1., 0.]])])
可以解释为下表。

F/chi2pdf_denomdf
ssr based F test:F=2.3606134965347234e-13p=0.9999996100873887df_denom=120.0df_num=1
ssr based chi2 testchi2=2.3999570548103024e-13p=0.9999996091214877df=1
likelihood ratio testchi2=2.2737367544323206e-13p=0.9999996195389934df=1
parameter F testF=79484.14726491661p=3.601637315038649e-171,df_denom=120.0df_num=1.0

该表中最重要的而在于观察p值的大小,如果p值远远小于0.05,表示拒绝原假设,并推断出B确实对A的预测有用,即时间序列平稳。

3.绘制混淆矩阵

代码如下(示例):

# 绘制混淆矩阵
def grangers_causation_matrix(data, variables, test='ssr_chi2test', verbose=False):    
    df = pd.DataFrame(np.zeros((len(variables), len(variables))), columns=variables, index=variables)
    print(df)
    for c in df.columns:
        for r in df.index:
            test_result = grangercausalitytests(data[[r, c]], maxlag=maxlag, verbose=False)
            p_values = [round(test_result[i+1][0][test][1],4) for i in range(maxlag)]
            if verbose: print(f'Y = {r}, X = {c}, P Values = {p_values}')
            min_p_value = np.min(p_values)
            df.loc[r, c] = min_p_value
    df.columns = [var + '_x' for var in variables]
    df.index = [var + '_y' for var in variables]
    return df

grangers_causation_matrix(df, variables = df.columns) 

4.涉及的函数介绍

4.1 np.zeros(a,b)

生成一个全为0的数组,a和b表示数组的行数和列数

4.2 round(A,4)

四舍五入函数,对小数点后的数字进行保留,其中4表示保留4位小数。

4.3 pd.DataFrame(nparry,columns=#, index=#)

生成DataFrame,可以用columns和index对数组的索引进行命名。

pd.DataFrame(np.zeros((len(variables), len(variables))), columns=variables, index=variables)

4.4 pd.read_csv(‘###.csv’)

用于读取数据生成DataFrame。


总结

格兰杰因果测试是一种测试数据相关性的方法,在数据挑选过程中起到作用,但在使用时需注意,该方法更多侧重于时序信息对变量的影响。

  • 31
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值