数据处理方法汇总
第一章 格兰杰因果检验(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/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。
总结
格兰杰因果测试是一种测试数据相关性的方法,在数据挑选过程中起到作用,但在使用时需注意,该方法更多侧重于时序信息对变量的影响。