Rで学ぶGARCHモデル
Kris Boudt
Professor of finance and econometrics


ugarchroll オブジェクトに quantile() を適用。ugarchspec(): 使用するGARCHモデルを指定
garchspec <- ugarchspec(mean.model = list(armaOrder = c(1, 0)),
variance.model = list(model = "gjrGARCH"),
distribution.model = "sstd")
ugarchroll(): ローリング標本でGARCHを推定
garchroll <- ugarchroll(garchspec, data = sp500ret, n.start = 2500,
refit.window = "moving", refit.every = 100)
quantile(): 予測分位を計算
garchVaR <- quantile(garchroll, probs = 0.05)
損失確率は変更可:1%や2.5%も一般的
actual <- xts(as.data.frame(garchroll)$Realized, time(garchVaR))
VaRplot(alpha = 0.05, actual = actual, VaR = garchVaR)

実際のリターンが予測VaRを下回ると、VaR超過(exceedance)が発生します: $ R_t \ < {VaR}_t$。
VaR超過の発生頻度をVaRカバレッジと呼びます。
# S&P 500のリターンと5%水準でのカバレッジの計算
mean(actual < garchVaR)
0.05159143
distribution.model = "std" を distribution.model = "sstd" の代わりに使用:
garchspec <- ugarchspec(mean.model = list(armaOrder = c(1, 0)),
variance.model = list(model = "gjrGARCH"),
distribution.model = "std")
ローリング推定と5% VaR予測:
garchroll <- ugarchroll(garchspec, data = sp500ret, n.start = 2500,
refit.window = "moving", refit.every = 100)
garchVaR <- quantile(garchroll, probs = 0.05)
mean(actual < garchVaR) # returns 0.05783233
variance.model = list(model = "sGARCH")
ではなく
variance.model = list(model = "gjrGARCH"):
garchspec <- ugarchspec(mean.model = list(armaOrder = c(1, 0)),
variance.model = list(model = "sGARCH"),
distribution.model = "std")
ローリング推定と5% VaR予測:
garchroll <- ugarchroll(garchspec, data = sp500ret, n.start = 2500,
refit.window = "moving", refit.every = 100)
garchVaR <- quantile(garchroll, probs = 0.05)
mean(actual < garchVaR) # returns 0.06074475
refit.every = 1000
ではなく
refit.every = 100:
garchspec <- ugarchspec(mean.model = list(armaOrder = c(1, 0)),
variance.model = list(model = "sGARCH"),
distribution.model = "std")
garchroll <- ugarchroll(garchspec, data = sp500ret, n.start = 2500,
refit.window = "moving", refit.every = 1000)
garchVaR <- quantile(garchroll, probs = 0.05)
mean(actual < garchVaR) # returns 0.06199293
Rで学ぶGARCHモデル