VaRDurTest {rugarch} | R Documentation |
VaR Duration Test
Description
Implements the VaR Duration Test of Christoffersen and Pelletier.
Usage
VaRDurTest(alpha, actual, VaR, conf.level = 0.95)
Arguments
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. |
Details
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.
Value
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 |
Author(s)
Alexios Ghalanos
References
Christoffersen, P. and Pelletier, D. 2004, Backtesting value-at-risk: A duration-based approach, Journal of Financial Econometrics, 2(1), 84–108.
Examples
## 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)