在 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 超限:$ R_t \ < {VaR}_t$。
VaR 超限的发生频率称为 VaR 覆盖率。
# 计算标普500收益在5%概率水平下的覆盖率
mean(actual < garchVaR)
0.05159143
将 distribution.model = "sstd" 改为 distribution.model = "std":
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 = "gjrGARCH")
改为
variance.model = list(model = "sGARCH"):
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 = 100
改为
refit.every = 1000:
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 模型