11.4 VaR forecasts using out of sample
- Let’s use Student-t distribution as Financial Returns don’t always follow normal distribution
# spec2 with student-t distribution
= ugarchspec(variance.model = list(model = "sGARCH", garchOrder = c(1,
spec2 1)), mean.model = list(armaOrder = c(0, 0)), distribution.model = "std")
- The rugarch package has a very useful function for estimating moving window models and forecasting VaR. The function provides method for creating rolling forecasts from GARCH models and has various arguments to specify the forecast length (), window size (), model refitting frequency (), a rolling or recursive estimation window () etc.
= ugarchroll(spec2, data = bhp_ret, n.ahead = 1, forecast.length = ndays(bhp_ret) -
var.t 500, refit.every = 5, window.size = 500, refit.window = "rolling",
calculate.VaR = TRUE, VaR.alpha = c(0.01, 0.05))
- We can plot the 1% and 5% VaR forecasts against the actual returns using the following routine.
# note the plot method provides four plots with option-4 for the VaR
# forecasts 1% Student-t GARCH VaR
par(mfrow = c(1, 2))
plot(var.t, which = 4, VaR.alpha = 0.01)
# 5% Student-t GARCH VaR
plot(var.t, which = 4, VaR.alpha = 0.05)

Figure 11.3: Actual Return Vs 1% VaR forecasts
- Finally backtesting can be obtained using the
report
method
# backtest for VaR forecasts
report(var.t, VaR.alpha = 0.05) #default value of alpha is 0.01
VaR Backtest Report
===========================================
Model: sGARCH-std
Backtest Length: 154
Data:
==========================================
alpha: 5%
Expected Exceed: 7.7
Actual VaR Exceed: 6
Actual %: 3.9%
Unconditional Coverage (Kupiec)
Null-Hypothesis: Correct Exceedances
LR.uc Statistic: 0.426
LR.uc Critical: 3.841
LR.uc p-value: 0.514
Reject Null: NO
Conditional Coverage (Christoffersen)
Null-Hypothesis: Correct Exceedances and
Independence of Failures
LR.cc Statistic: 0.916
LR.cc Critical: 5.991
LR.cc p-value: 0.633
Reject Null: NO