【Data Procession】格兰杰因果检验

数据处理方法汇总

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

文章目录

  • 数据处理方法汇总
    • 第一章 格兰杰因果检验(Granger causality test)
  • 一、格兰杰因果测试是什么?
  • 二、Python代码实现
    • 1.grangercausalitytests函数用法
    • 2.判别因果性
    • 3.绘制混淆矩阵
    • 4.涉及的函数介绍
      • 4.1 np.zeros(a,b)
      • 4.2 round(A,4)
      • 4.3 pd.DataFrame(nparry,columns=#, index=#)
      • 4.4 pd.read_csv('###.csv')
  • 总结


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

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

二、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)}, [, ,
array([[0., 1., 0.]])])
可以解释为下表。

F/chi2 p df_denom df
ssr based F test: F=2.3606134965347234e-13 p=0.9999996100873887 df_denom=120.0 df_num=1
ssr based chi2 test chi2=2.3999570548103024e-13 p=0.9999996091214877 df=1
likelihood ratio test chi2=2.2737367544323206e-13 p=0.9999996195389934 df=1
parameter F test F=79484.14726491661 p=3.601637315038649e-171, df_denom=120.0 df_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。


总结

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

你可能感兴趣的:(Data,Procession,python,开发语言)