GRGと金融工学・統計解析

趣味で金融工学や統計解析を勉強しており,このブログでは自分が面白いと思ったことの紹介などをしていきます.色々な方との議論などできたらいいなぁと思います.

S&P500と日経225の時系列分析(VARモデル)

はじめに

今回は,少し前から興味を持ち始めた時系列分析について,リマインダーも兼ねて書いていこうと思う. まだ全然勉強が足りていないが,VARモデルを用いて,S&P500とNIKKEI225の最近の関係性について調べていく. 何か間違いなどがあれば,コメントをいただきたい.

データについて

データは,以下のFREDから入手してきた.FREDは実際の研究論文にも使われているため,信用性もあり,オープンであるのでとても助かる.

Federal Reserve Economic Data | FRED | St. Louis Fed

データの範囲は,2012-03-07から2017-03-07までにした.よく2008~2009に起きたリーマンショックが株価にどのような影響を与えたのか,といったような研究はされているが,たまにはリーマンショックから回復しつつあるところからの分析もしてみるべきだろう.

単位根過程のチェック

VARモデルなどの時系列分析の説明として,沖本本の内容をとても細かく要約しているサイトが以下である.

Rで計量時系列分析:VARモデルの基礎(多変量時系列モデル) - 六本木で働くデータサイエンティストのブログ

このサイトでは,とてもわかりやすく説明がなされているため,ここではVARモデルについての説明は省略する.より詳しく知りたいという方は,沖本本やハミルトンの時系列解析を読んでみることをお勧めする.私も沖本本は読み終えたが,それでもハミルトンの本の内容はより細かく,広い範囲をあつかっているため,とても勉強になる.

少し話が逸れたが,Rを用いてS&P500とNIKKEI225の関係について調べていこう.まずは,Rにデータを入力し,それぞれの過程が単位根であるかどうかを調べて見る.ちなみに,今回のプログラムは動けばそれでいい!という形で書いているため,見る人が見れば卒倒してしまいそうな書き方をしているところがあると思われる.

#データの取得
SP500 <- read.csv("SP500.csv")
NIKKEI <- read.csv("NIKKEI225.csv")
SP500[,1] <- as.Date(SP500[,1])
NIKKEI[,1] <- as.Date(NIKKEI[,1])
SP500 <- na.omit(SP500)      #欠損値は削除
NIKKEI <- na.omit(NIKKEI)      #欠損値は削除

#単位根検定
adf.test(SP500[,2],k=1)
adf.test(NIKKEI[,2],k=1)

単位根検定にはADF検定を用いて行った.その結果が以下である.

Augmented Dickey-Fuller Test

data:  SP500[, 2]
Dickey-Fuller = -2.7331, Lag order = 1, p-value = 0.268
alternative hypothesis: stationary
Augmented Dickey-Fuller Test

data:  NIKKEI[, 2]
Dickey-Fuller = -2.3669, Lag order = 1, p-value = 0.423
alternative hypothesis: stationary

P値をみると,これらの過程は単位根過程であることが検定によって示された.ちなみに,VARモデルのパラメータ推定をするだけであれば,単位根かどうかはあまり問題にはならない.しかし,グレンジャー因果性などを調べる際には単位根であると問題が生じてくることになる.だが,折角VARモデルを使うのだったら,グレンジャー因果性など分析したいなぁ,ということで今回はlog-returnをとることで単位根過程の問題をなくしていきたいと思う.実際では共和分なども問題を考慮する必要があるが,今回はそれは無視して突き進んでみよう.(共和分を考慮した場合と結果にどのような差が生じるのか,ということも今回の結果を用いて比較することもできる.いずれそのことについて触れたい)

では,log-returnが単位根でないことを確認し,S&P500とNIKKEI225のデータを統合しよう.

#Log-Returnへ変換
SP500_return <- diff(log(SP500[,2]))
NIKKEI_return <- diff(log(NIKKEI[,2]))

#単位根検定
adf.test(SP500_return,k=1)
adf.test(NIKKEI_return,k=1)

#データの統合
SP500 <- cbind(SP500[-1,1],SP500_return)
NIKKEI <- cbind(NIKKEI[-1,1],NIKKEI_return)
colnames(SP500)[1] <- "DATE"
colnames(NIKKEI)[1] <- "DATE"
Dat <- merge(SP500,NIKKEI,by="DATE")  #データの期間が異なるためマージ
Dat <- Dat[,-1]

自分でもゲンナリするレベルのプログラムであるが我慢してほしい.長くなってしまうので単位根過程の結果は載せていないが,ちゃんとlog-returnは単位根ではないという結果となった.プログラム上のDatの中身がS&P500とNIKKEI225のlog-returnのデータとなっている.途中データを統合しているが,その結果が2012-03-07から2017-03-07という期間となっている.

VARモデルのパラメーター推定

では,varsパッケージを用いてVARモデルのパラメータの推定を行っていこう.まずは,モデルの次数をAICを用いて決定し,その後パラメータの推定を行う.まずは次数の決定である.

#VARの次数の推定
select_VAR <- VARselect(Dat, lag.max = 5)
select_VAR

$selection
AIC(n)  HQ(n)  SC(n) FPE(n) 
     4      1      1      4 

$criteria
                   1             2             3             4
AIC(n) -1.837217e+01 -1.837375e+01 -1.836887e+01 -1.837649e+01
HQ(n)  -1.836244e+01 -1.835753e+01 -1.834616e+01 -1.834730e+01
SC(n)  -1.834635e+01 -1.833073e+01 -1.830864e+01 -1.829905e+01
FPE(n)  1.049708e-08  1.048050e-08  1.053176e-08  1.045179e-08
                   5
AIC(n) -1.837171e+01
HQ(n)  -1.833603e+01
SC(n)  -1.827706e+01
FPE(n)  1.050188e-08

AICの部分を見てみると,次数が4の時が一番良いモデルであるという結果が出ていることがわかる.案外次数が大きいことに驚いたが(2,3くらいだろうと思っていた),次にこの結果を用いてパラメータ推定を行う.

#VARのパラメータ推定
VAR_parameter <- VAR(Dat,p=select_VAR$selection[1])
summary(VAR_parameter)

VAR Estimation Results:
========================= 
Endogenous variables: SP500_return, NIKKEI_return 
Deterministic variables: const 
Sample size: 1180 
Log Likelihood: 7509.705 
Roots of the characteristic polynomial:
0.6041 0.6041 0.5279 0.5279 0.4337 0.4337 0.314 0.314
Call:
VAR(y = Dat, p = select_VAR$selection[1])


Estimation results for equation SP500_return: 
============================================= 
SP500_return = SP500_return.l1 + NIKKEI_return.l1 + SP500_return.l2 + NIKKEI_return.l2 + SP500_return.l3 + NIKKEI_return.l3 + SP500_return.l4 + NIKKEI_return.l4 + const 

                   Estimate Std. Error t value Pr(>|t|)   
SP500_return.l1  -0.0190755  0.0295211  -0.646  0.51830   
NIKKEI_return.l1  0.0156188  0.0187248   0.834  0.40438   
SP500_return.l2  -0.0361826  0.0332772  -1.087  0.27712   
NIKKEI_return.l2 -0.0118909  0.0189726  -0.627  0.53095   
SP500_return.l3  -0.0138368  0.0333297  -0.415  0.67811   
NIKKEI_return.l3  0.0048320  0.0189178   0.255  0.79844   
SP500_return.l4  -0.1090107  0.0331157  -3.292  0.00103 **
NIKKEI_return.l4 -0.0239604  0.0167354  -1.432  0.15249   
const             0.0005886  0.0002370   2.484  0.01315 * 
---
Signif. codes:  0***0.001**0.01*0.05 ‘.’ 0.1 ‘ ’ 1


Residual standard error: 0.008072 on 1171 degrees of freedom
Multiple R-Squared: 0.0167,  Adjusted R-squared: 0.009986 
F-statistic: 2.487 on 8 and 1171 DF,  p-value: 0.01122 


Estimation results for equation NIKKEI_return: 
============================================== 
NIKKEI_return = SP500_return.l1 + NIKKEI_return.l1 + SP500_return.l2 + NIKKEI_return.l2 + SP500_return.l3 + NIKKEI_return.l3 + SP500_return.l4 + NIKKEI_return.l4 + const 

                   Estimate Std. Error t value Pr(>|t|)    
SP500_return.l1   8.169e-01  4.683e-02  17.444  < 2e-16 ***
NIKKEI_return.l1 -1.581e-01  2.970e-02  -5.322 1.23e-07 ***
SP500_return.l2   1.202e-01  5.279e-02   2.278   0.0229 *  
NIKKEI_return.l2  9.521e-03  3.010e-02   0.316   0.7518    
SP500_return.l3  -1.038e-02  5.287e-02  -0.196   0.8444    
NIKKEI_return.l3 -6.980e-03  3.001e-02  -0.233   0.8161    
SP500_return.l4   3.142e-02  5.253e-02   0.598   0.5499    
NIKKEI_return.l4 -1.039e-02  2.655e-02  -0.391   0.6957    
const             2.628e-05  3.759e-04   0.070   0.9443    
---
Signif. codes:  0***0.001**0.01*0.05 ‘.’ 0.1 ‘ ’ 1


Residual standard error: 0.0128 on 1171 degrees of freedom
Multiple R-Squared: 0.2114,  Adjusted R-squared: 0.206 
F-statistic: 39.25 on 8 and 1171 DF,  p-value: < 2.2e-16 



Covariance matrix of residuals:
              SP500_return NIKKEI_return
SP500_return     6.515e-05     1.893e-05
NIKKEI_return    1.893e-05     1.640e-04

Correlation matrix of residuals:
              SP500_return NIKKEI_return
SP500_return        1.0000        0.1831
NIKKEI_return       0.1831        1.0000

少々長くなってしまったが,パラメータ推定はエラーもなく行われたみたいである.まずはS&P500の結果について着目してみよう.有意となっているのは,4日前のS&P500のlog-returnだけである.推定値が約-0.11で,S&P500のlog-returnの標準偏差が0.008なので,4日前に1標準偏差分動いたとしたら現時点で動く期待値としては,約-0.088%となるはずである.個人的には案外影響力があるなぁ...という印象である.なぜ,4日前の変動が影響しているのかということに関しての考察をしてみるのも面白いと思うが,それは共和分などの結果を見てからにしよう.

では次に,NIKKEI225の結果を見てみよう.S&P500とは違って過去の影響を大きく受けていそうな結果である.一番強い影響を与えているのは前日のS&P500の変動であることがわかる.この結果は昔から言われていることだが,近年のデータでもその傾向があることが明らかとなった.投資家が昔から言われているこの結果に従って動いているため,今でもその傾向が表れているのだろう.また,前日だけでなく2日前の変動にも有意という結果が出ていることから,私が思っている以上にアメリカ市場の動向が日本に与える影響というものが今現在でも残っていることがうかがえる.一方,前日のNIKKEI225も現在の変動に影響を与えていることがわかる.しかも,その係数は負であることからNIKKEI225の変動は平均回帰的であることがうかがえる.前日に大きく上昇したときには,現在では大きく下降する傾向にあるという結果であるからだ.

最後に

以上の結果から,現在でも昔言われていた傾向が続いていることがわかった.特に面白い!というような結果は得られなかったが,もっと深く掘ってみると何かが出てくるかもしれない.今回はVARモデルを用いての推定であったが,このようなモデルは平均に着目しているものである.より広い範囲を見ることができる分位点回帰のような手法,例えばCAVaiRなどを用いて分析してみるのも面白いかもしれない.

次回はグレンジャー因果性や共和分などについて触れていく予定である.