モデルリスク=誤ったモデルを使うリスク

Rで学ぶGARCHモデル

Kris Boudt

Professor of finance and econometrics

モデルリスクの要因と対策

出所:

  • モデリングの選択
  • 最適化の初期値
  • 収益率系列の外れ値

対策: 頑健なアプローチで備える

  • モデル平均化: 複数モデルの予測を平均
  • 複数の初期値を試し、最尤値が最大のものを採用
  • データをクレンジング
Rで学ぶGARCHモデル

モデル平均化

variance.models <- c("sGARCH", "gjrGARCH")
distribution.models <- c("norm", "std", "sstd")
c <- 1
for (var.model in variance.models) {
    for (dist.model in distribution.models) {
        garchspec <- ugarchspec(mean.model = list(armaOrder = c(0, 0)),
         variance.model = list(model = var.model), distribution.model = dist.model)
        garchfit <- ugarchfit(data = msftret, spec = garchspec)
        if (c==1) { msigma <- sigma(garchfit)
        } else { msigma <- merge(msigma, sigma(garchfit))} 
        c <- c + 1 }
}
Rで学ぶGARCHモデル

Rで学ぶGARCHモデル

平均ボラ予測

avesigma <- xts(rowMeans(msigma), order.by = time(msigma))

ベータの定義

Rで学ぶGARCHモデル

初期値に対する頑健性

coef(garchfit)
          mu        omega       alpha1        beta1         skew        shape 
5.669200e-04 6.281258e-07 7.462984e-02 9.223701e-01 9.436331e-01 6.318621e+00 
  • 推定値は複雑な最尤法の最適化の産物です
  • 数値反復最適化は初期値に敏感になり得ます
  • rugarch は妥当な初期値を自動設定します
  • ugarchspec() で指定した GARCH に setstart() を適用して初期値を指定できます
Rで学ぶGARCHモデル

デフォルト初期値での推定

garchspec <- ugarchspec(mean.model = list(armaOrder = c(0,0)),
                        variance.model = list(model = "sGARCH"),
                        distribution.model = "sstd")

garchfit <- ugarchfit(data = sp500ret, spec = garchspec)
coef(garchfit)
          mu        omega       alpha1        beta1         skew        shape 
5.669200e-04 6.281258e-07 7.462984e-02 9.223701e-01 9.436331e-01 6.318621e+00 
likelihood(garchfit)
24280.33
Rで学ぶGARCHモデル

初期値を変えた推定

garchspec <- ugarchspec(mean.model = list(armaOrder = c(0, 0)),
  variance.model = list(model = "sGARCH"), distribution.model = "sstd")
setstart(garchspec) <- list(alpha1 = 0.05, beta1 = 0.9, shape = 8)
garchfit <- ugarchfit(data = sp500ret, spec = garchspec)
coef(garchfit)
          mu        omega       alpha1        beta1         skew        shape 
5.638002e-04 6.303949e-07 7.466503e-02 9.224117e-01 9.438978e-01 6.309185e+00
likelihood(garchfit) # returns 24280.33
Rで学ぶGARCHモデル

データのクレンジング

  • 外れ値がボラティリティ予測を歪めないようにする
  • 方法: ウィンザー化。PerformanceAnalytics の Return.clean() で method = "boudt" を指定し、リターンの極端な値を抑える:
# 収益率系列をクレンジング
library(PerformanceAnalytics)
clmsftret <- Return.clean(msftret, method = "boudt")
# 重ねてプロット
plotret <- plot(msftret, col = "red")
plotret <- addSeries(clmsftret, col = "blue", on = 1)
Rで学ぶGARCHモデル

ベータの定義

Rで学ぶGARCHモデル

クレンジングがボラ予測に与える影響

Microsoft の生データとクレンジング後でボラティリティを予測

garchspec <- ugarchspec(mean.model = list(armaOrder = c(1, 0)),
     variance.model = list(model = "gjrGARCH"), distribution.model = "sstd")
garchfit <- ugarchfit(data = msftret, spec = garchspec)
clgarchfit <- ugarchfit(data = clmsftret, spec = garchspec)

時系列プロットで比較

plotvol <- plot(abs(msftret), col = "gray")
plotvol <- addSeries(sigma(garchfit), col = "red", on = 1)
plotvol <- addSeries(sigma(clgarchfit), col = "blue", on = 1)
plotvol
Rで学ぶGARCHモデル

ベータの定義

Rで学ぶGARCHモデル

頑健主義で行こう: 正確に誤るより大雑把に正しく

Rで学ぶGARCHモデル

Preparing Video For Download...