import statsmodels.api as sm
from statsmodels.tsa.api import VAR
import pandas as pd
df_data = sm.datasets.macrodata.load_pandas().data
df_data.index = pd.date_range('1959', periods=51*4-1, freq='Q')
df_data.head()
# 対象カラム抽出
y = df_data[['realgdp', 'realcons', 'realinv']]
# 2次階差をとり、定常過程にする
y_diff = y.diff().dropna().diff().dropna()
# モデル作成
model_diff = VAR(y_diff)
result_diff = model_diff.fit(maxlags=10, ic='aic')
from copy import deepcopy
# deepcopy()は、オブジェクトをコピーして別のを作る関数
var_names = ['realgdp', 'realcons', 'realinv']
# 各変数とその他の変数群の因果
for i in range(len(var_names)):
vs = deepcopy(var_names)
print(result_diff.test_causality(vs.pop(i), vs, kind='f').summary())
*上では、3つの結果はすべてp値が低いので、帰無仮説は棄却される。すなわち、Granger因果性がある。
var_names = ['realgdp', 'realcons', 'realinv']
# 各変数とその他の変数(単体)の因果
for i in range(len(var_names)):
vs = deepcopy(var_names)
tv = vs.pop(i)
for v in vs:
print(result_diff.test_causality(tv, v, kind='f').summary())