import statsmodels.api as sm
import pandas as pd
df_data = sm.datasets.macrodata.load_pandas().data
df_data.head()
# indexを年月日に変換
df_data.index = pd.date_range('1959', periods=51*4-1, freq='Q')
y = df_data[['realgdp', 'realcons', 'realinv']]
y
from statsmodels.tsa import stattools
# ADF検定
ctt_realgdp = stattools.adfuller(y.realgdp, regression='ctt')
ctt_realcons = stattools.adfuller(y.realcons, regression='ctt')
ctt_realinv = stattools.adfuller(y.realinv, regression='ctt')
print('ctt realgdp:')
print(ctt_realgdp)
print('ctt realcons:')
print(ctt_realcons)
print('ctt realinv:')
print(ctt_realinv)
# 2次の階差
y_diff = y.diff().diff().dropna()
# ADF検定
ctt_realgdp_diff = stattools.adfuller(y_diff.realgdp, regression='ctt')
ctt_realcons_diff = stattools.adfuller(y_diff.realcons, regression='ctt')
ctt_realinv_diff = stattools.adfuller(y_diff.realinv, regression='ctt')
print('ctt realgdp_diff:')
print(ctt_realgdp_diff)
print('ctt realcons_diff:')
print(ctt_realcons_diff)
print('ctt realinv_diff:')
print(ctt_realinv_diff)
from statsmodels.tsa.api import VAR
# モデル作成
model_diff = VAR(y_diff)
# ラグ探索
model_diff.select_order(10).summary()
# AIC基準で最適なハイパーパラメータを選択したモデルのあてはめ
result_diff = model_diff.fit(maxlags=10, ic='aic')
# あてはめ結果
result_diff.summary()
fevd_diff = result_diff.fevd(4) # 3次点先までの誤差の起因
fevd_diff.summary()
# FEVDの可視化
result_diff.fevd(4).plot()