Rで価値モデルを使って時系列分析をする方法
実習
バリューモデルはアーチタイプを説明するのに役立つ手段であり、分析手順自体はARMAモデルに似ている。
上のグラフはEuStockMarkets
からDAX
だけを抽出して描いたもので、1991年から1999年までのドイツDAX指数を示している。
リターンの二乗を見ると、ほとんど確実にARCH効果があるように見える。リターンの二乗がARMAモデルに従うかどうかを確認するために、EACFを使ってみよう。
リターンの二乗がARMAモデル$ARMA(1,3)$に従うと推測されるため、リターンが$GARCH(1,3)$に従うという仮定を立てることができる。tseries
パッケージのgarch()
関数を使用すれば、バリューモデルとして分析を行うことができる。
分析結果の読み方は回帰分析と同じだけれども、違いはハルケ・ベラテストJarque Bera Testとラング・ボックステストBox-Ljung Testも自動的に行うことである。ラング・ボックステストのp値が大きく出たので、モデルのフィッティング自体はうまくいったと見えるけれど、ハルケ・ベラテストのp値が低いのは良い兆候ではない。残差の正規性に問題があるということだが、ヒストグラムを描いてチェックしよう。
よく見ると、膨大な異常値のせいで正規性が欠けているのが分かる。歪度は異常値に大きく影響されるが、そのせいでテストが歪んでしまったようだ。異常値を除去して再テストしよう。
異常値を除いた場合、ハルケ・ベラテストは残差が正規性を持つと支持する。しかし、シャピロ・ウィルクテストはまだ正規性が欠けていると判断したが、同じ正規性のテストでもこう異なる場合も十分にある。時系列分析ではとても大きな異常値があるのが非常に一般的で、ハルケ・ベラテストはシャピロ・ウィルクテストと異なり、異常値を除去した場合に正規分布であることがより多く明らかになる。
少なくともこのケースでは、シャピロ・ウィルクテストを通過できなかったけれども、ハルケ・ベラテストを通過したので、残差が正規性を持つと見ても差し支えない。結論として、リターンが$GARCH(1,3)$に従うと言っても良い。
コード
以下は例のコードだ。
library(TSA)
library(tseries)
returnize <- function(data) {return(diff(log(data)))}
DAX <- ts(EuStockMarkets[,1],start=1)
r.DAX <- returnize(DAX)
eacf(r.DAX^2)
out <- garch(r.DAX,order=c(1,3)); summary(out)
resi<-na.omit(residuals(out))
win.graph(6,3); hist(resi)
resi2<-resi[abs(resi)<2.58]
jarque.bera.test(resi2)
shapiro.test(resi2)