View source: R/rugarch-tests.R
| VaRDurTest | R Documentation | 
Implements the VaR Duration Test of Christoffersen and Pelletier.
VaRDurTest(alpha, actual, VaR, conf.level = 0.95)
alpha | 
 The quantile (coverage) used for the VaR.  | 
actual | 
 A numeric vector of the actual (realized) values.  | 
VaR | 
 The numeric vector of VaR.  | 
conf.level | 
 The confidence level at which the Null Hypothesis is evaluated.  | 
The duration of time between VaR violations (no-hits) should ideally be independent and not cluster. Under the null hypothesis of a correctly specified risk model, the no-hit duration should have no memory. Since the only continuous distribution which is memory free is the exponential, the test can conducted on any distribution which embeds the exponential as a restricted case, and a likelihood ratio test then conducted to see whether the restriction holds. Following Christoffersen and Pelletier (2004), the Weibull distribution is used with parameter ‘b=1’ representing the case of the exponential. A future release will include the choice of using a bootstrap method to evaluate the p-value, and until then care should be taken when evaluating series of length less than 1000 as a rule of thumb.
A list with the following items:
b | 
 The estimated Weibull parameter which when restricted to the value of 1 results in the Exponential distribution.  | 
uLL | 
 The unrestricted Log-Likelihood value.  | 
rLL | 
 The restricted Log-Likelihood value.  | 
LRp | 
 The Likelihood Ratio Test Statistic.  | 
H0 | 
 The Null Hypothesis.  | 
Decision | 
 The on H0 given the confidence level  | 
Alexios Ghalanos
Christoffersen, P. and Pelletier, D. 2004, Backtesting value-at-risk: A duration-based approach, Journal of Financial Econometrics, 2(1), 84–108.
## Not run: 
data(dji30ret)
spec = ugarchspec(mean.model = list(armaOrder = c(1,1), include.mean = TRUE),
variance.model = list(model = "gjrGARCH"), distribution.model = "sstd")
fit = ugarchfit(spec, data = dji30ret[1:1000, 1, drop = FALSE])
spec2 = spec
setfixed(spec2)<-as.list(coef(fit))
filt = ugarchfilter(spec2, dji30ret[1001:2500, 1, drop = FALSE], n.old = 1000)
actual = dji30ret[1001:2500,1]
# location+scale invariance allows to use [mu + sigma*q(p,0,1,skew,shape)]
VaR = fitted(filt) + sigma(filt)*qdist("sstd", p=0.05, mu = 0, sigma = 1, 
skew  = coef(fit)["skew"], shape=coef(fit)["shape"])
print(VaRDurTest(0.05, actual, VaR))
# Try with the Normal Distribution (it fails)
spec = ugarchspec(mean.model = list(armaOrder = c(1,1), include.mean = TRUE),
variance.model = list(model = "gjrGARCH"), distribution.model = "norm")
fit = ugarchfit(spec, data = dji30ret[1:1000, 1, drop = FALSE])
spec2 = spec
setfixed(spec2)<-as.list(coef(fit))
filt = ugarchfilter(spec2, dji30ret[1001:2500, 1, drop = FALSE], n.old = 1000)
actual = dji30ret[1001:2500,1]
# location+scale invariance allows to use [mu + sigma*q(p,0,1,skew,shape)]
VaR = fitted(filt) + sigma(filt)*qdist("norm", p=0.05, mu = 0, sigma = 1)
print(VaRDurTest(0.05, actual, VaR))
## End(Not run)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.