概要
・前回の記事に続き、VARを応用した分析を行う
・今回の分析の1つがグレンジャー因果検定で、時系列における”グレンジャー因果”を検定するものである。これを使えば、どの変数同士にどういった方向の関係があるかを推察できる
・インパルス応答関数は選択したある変数にショック(インパルス)を与えた時、他の変数にどのような影響を与えるのかを調べることができる。現実で利用できる具体例として、広告を1単位打ったとき、売上にどのくらいの寄与があるかなどを調べることに使える
・今回は電力需要とその他の変数にどのような関係があるのか調べる
グレンジャー因果検定
まず、グレンジャー因果検定の概要から
誤ったグレンジャー因果に対するイメージ
グレンジャー因果検定の間違ったイメージとして、原因は過去にあり、結果は原因より後に起こる。故に、時系列データでは因果関係を推定しやすく、それがグレンジャー因果検定だというものがある。
しかし、グレンジャー因果検定では2つのモデルのMSE(平方二条誤差)を比較しているだけであり、上記のイメージはかなり違う。
説明のためにまず、グレンジャー因果性について説明する
グレンジャー因果とは
グレンジャー因果性とは目的変数X_tを説明する際に、X_(t-1)だけではなく、ある説明変数Y_(t-1)を加えると予測精度が改善するとき、YからXへのグレンジャー因果があるという。
つまり、説明変数YはX_tを予測するのに役立つ情報を持っているということ。
それを数式を使って説明する
数式で確認
$X_{t} = c + X_{t-1} + \varepsilon$ ・・・①
$X_{t} = c + X_{t-1} + Y_{t-1} + \varepsilon$ ・・・②
2つの式をMSE(平均二乗誤差)を比べた時、②の式の方が改善していた場合、YからXへのグレンジャー因果性があるという。
では具体的にどのくらい改善していれば良いかというと、ここで検定統計量を利用する。2つの式の残差平方和の差を若干いじったものから検定統計量Fが計算できる。この時、2Fはかい2乗分布に近似するので、お馴染みの検定ができる。
※説明変数は入れるほど、残差平方和は小さくなる性質がある。それを考慮した上での検定をグレンジャー因果検定は行なっている。
実践
前回記事で必要なデータ、ライブラリーはインストールしたものとする。
# モデルのインスタンス生成
var_model = VAR(df_train.diff().dropna())
# モデルを構築
results = var_model.fit(maxlags=10, ic='aic')
# グレンジャー因果性を確認
for i in col: # colはモデルに入れた変数
for j in col:
print(i, '→', j, results.test_causality(caused=i,causing=j).pvalue)
p値を確認できる。
p値が小さい場合は帰無仮説(グレンジャー因果性がない)を棄却し、対立仮説を採用する。今回の分析ではV_4という変数からPOWER(電力需要)という因果の流れを有意水準5%で確認できる。
グレンジャー因果検定の弱点
因果の方向はわかったとしても、その大きさがわからないという弱点がある。その弱点を補うのがインパルス応答関数である。
インパルス応答関数
ある変数を1単位動かしたとき、他の変数がどのくらい動くのか示したものがインパルス応答関数。経済学でいう限界効用みたいなもの。
# (直行化)インパルス応答関数
period = 10
irf = results.irf(period)
irf.plot(orth=True)
plt.savefig('pic/tmp3.png')
plt.show()
V_4の変動がPOWERに影響を与えていることがわかる。
参考文献