PythonでVARモデルからインパルス応答推定をしてみる
↓の記事で書かれているインパルス応答をPythonでやってみるってだけの内容です。
・Rで計量時系列分析:VARモデルから個々の時系列データ間の因果関係を推定する
http://tjo.hatenablog.com/entry/2013/07/30/191853
使うデータは沖本先生のページからMSCIのデータを使います。
ホントはこのブログのPV数とかセッション数で試してみたかったんですが、インパルスになるようなデータが無いんですよねー残念。
やり方は以下です。
%matplotlib inline import numpy as np import statsmodels.api as sm from statsmodels.tsa.api import VAR, DynamicVAR import pandas as pd import seaborn as sns # prepare the dates index df = pd.read_csv("C:\\Users\\msci.csv",skiprows=1, names=['Date','ca','fr','ge','it','jp','uk','us']).dropna() from statsmodels.tsa.base.datetools import dates_from_str tmd = pd.to_datetime(df['Date']) df.index = tmd del df["Date"]
MSCIのデータを読み込んでデータフレームにしています。
data = pd.DataFrame(index=df.index) data['jp'] = np.log(df['jp']) - np.log(df['jp'].shift(1)) data['uk'] = np.log(df['uk']) - np.log(df['uk'].shift(1)) data['us'] = np.log(df['us']) - np.log(df['us'].shift(1))
これで日本とイギリスとアメリカの株式収益率を計算しています。
対数差分を取っているわけですね。
# make a VAR model model = VAR(data[:-1].dropna()) model.select_order(15) VAR Order Selection ====================================================== aic bic fpe hqic ------------------------------------------------------ 0 -27.57 -27.56 1.059e-12 -27.57 1 -27.98 -27.94* 7.035e-13 -27.97 2 -28.01 -27.93 6.832e-13 -27.98* 3 -28.01* -27.90 6.825e-13* -27.97 4 -28.01 -27.86 6.866e-13 -27.95 5 -28.00 -27.82 6.891e-13 -27.94 6 -28.00 -27.79 6.884e-13 -27.92 7 -28.00 -27.74 6.944e-13 -27.90 8 -27.99 -27.71 6.979e-13 -27.88 9 -27.99 -27.67 7.019e-13 -27.87 10 -27.98 -27.63 7.031e-13 -27.85 11 -27.98 -27.59 7.045e-13 -27.84 12 -27.98 -27.56 7.065e-13 -27.82 13 -27.97 -27.51 7.143e-13 -27.80 14 -27.96 -27.47 7.190e-13 -27.78 15 -27.95 -27.43 7.257e-13 -27.76 ====================================================== * Minimum Out[10]: {'aic': 3, 'bic': 1, 'fpe': 3, 'hqic': 2}
モデルはVAR(3)にします。
results = model.fit(maxlags=15, ic='aic') #インパルス応答 irf = results.irf(10) irf.plot(orth=False)
沖本先生の本と結果がちょっと異なっていましたが、だいたい合っている気がします!多分!
このグラフから以下のことがわかります。
■日本市場における1標準偏差のショック
日本市場における1標準偏差のショックは1%程度のショックであるが、同日の影響はほぼなし。日本市場において、株価が1%程度上昇もしくは下落したとしても、それが他国の株式市場に与える影響は限定的。
■イギリス市場における1標準偏差のショック
日本市場に対しては1日後に正で大きな持ち、アメリカ市場に対しては同日に正で大きな影響を持つ。具体的にはイギリス市場において、予想外に株価が0.1%程度上昇するようなことがあったとすると、次の日の日本市場の株価は期待されていた水準よりも0.21%程度上昇する。同日のアメリカ市場へはほぼ影響がない。
■アメリカ市場における1標準偏差のショック
1日後のイギリス市場に対して正で大きな影響をもつが、2日目以降は大きな影響はもたない。また、日本市場に対しては1日後に正で大きな影響を持ち、2日後もわずかながら正の影響をもつ。アメリカ市場に負のショックがあったとすると、アメリカ市場における1%程度の株価の下落は、1日後に日本の株価を0.5%程度下落させ、2日後にさらに0.12%程度下落させる。また、同様の下落は1日後のイギリスの株価を0.5%程度下落させる。
なるほどーという感じです。
何かに使えそうな予感がしますね。
[参考]
PythonでVarモデルで推定する場合のサンプルです。
・Vector Autoregressions tsa.vector_ar
http://statsmodels.sourceforge.net/devel/vector_ar.html
標準偏差とはなんぞや?については以下に詳しく書かれています。
・【統計学】初めての「標準偏差」(統計学に挫折しないために)
http://qiita.com/kenmatsu4/items/e6c6acb289c02609e619
VARモデルについての説明は以下が分かりやすかったです。
・VARモデル
http://logics-of-blue.com/var%E3%83%A2%E3%83%87%E3%83%AB/
関連する投稿:
- 2020-04-11:新型コロナウイルス(COVID-19)陽性患者数のグラフ 2
- 2020-04-19:新型コロナウイルス(COVID-19)陽性患者数の予測と結果
- 2020-12-30:複利の話とiDeCoのすすめ
- 2013-10-22:アメブロからWordPressへ移行
- 2017-01-21:Yahoo!Japan ファイナンス から株価の取得