cvgtest | R Documentation |
The conditional (Kupiec, 1995), the unconditional coverage test (Christoffersen, 1998) and the independence test (Christoffersen, 1998) of the Value-at-Risk (VaR) are applied.
cvgtest(obj = list(loss = NULL, VaR = NULL, p = NULL), conflvl = 0.95)
obj |
a list that contains the following elements:
|
conflvl |
a numeric vector with one element; the significance
level at which the null hypotheses are evaluated; is set to |
With this function, the conditional and the unconditional coverage
tests introduced by Kupiec (1995) and Christoffersen (1998) can be applied.
Given a return series r_t
with n
observations, divide the
series into n-K
in-sample and K
out-of-sample observations,
fit a model to the in-sample data and obtain rolling one-step forecasts of
the VaR for the out-of-sample time points.
Define
I_t = 1,
if -r_t > \widehat{VaR}_t (\alpha)
or
I_t = 0,
otherwise,
for t = n + 1, n + 2, ..., n + K
as the hit sequence, where \alpha
is
the confidence level for the VaR (often \alpha = 0.95
or \alpha = 0.99
).
Furthermore, denote p = \alpha
and let w
be the actual covered
proportion of losses in the data.
1. Unconditional coverage test:
H_{0, uc}: p = w
Let K_1
be the number of ones in I_t
and analogously K_0
the number of
zeros (all conditional on the first observation).
Also calculate \hat{w} = K_0 / (K - 1)
. Obtain
L(I_t, p) = p^{K_0}(1 - p)^{K_1}
and
L(I_t, \hat{w}) = \hat{w}^{K_0}(1 - \hat{w})^{K_1}
and subsequently the test statistic
LR_{uc} = -2 * \ln \{L(I_t, p) / L(I_t, \hat{w})\}.
LR_{uc}
now asymptotically follows a chi-square-distribution with one degree
of freedom.
2. Conditional coverage test:
The conditional coverage test combines the unconditional coverage test
with a test on independence. Denote by w_{ij}
the probability of an i
on day
t-1
being followed by a j
on day t
, where i
and j
correspond to the value of
I_t
on the respective day.
H_{0, cc}: w_{00} = w{10} = p
with i = 0, 1
and j = 0, 1
.
Let K_{ij}
be the number of observations, where the values on two following days
follow the pattern ij
. Calculate
L(I_t, \hat{w}_{00}, \hat{w}_{10})
= \hat{w}_{00}^{K_{00}}(1 - \hat{w}_{00})^{K_{01}} * \hat{w}_{10})^{K_{10}}(1 - \hat{w}_{10})^{K_{11}},
where \hat{w}_{00} = K_{00} / K_0
and \hat{w}_{10} = K_{10} / K_1
. The test
statistic is then given by
LR_{cc} = -2 * \ln \{ L(I_t, p) / L(I_t, \hat{w}_{00}, \hat{w}_{10}) \},
which asymptotically follows a chi-square-distribution with two degrees of freedom.
3. Independence test:
H_{0,ind}: w_{00} = w_{10}
The asymptotically chi-square-distributed test statistic (one degree of freedom) is given by
LR_{ind} = -2 * \ln \{L(I_t, \hat{w}_{00}, \hat{w}_{10}) / L(I_t, \hat{w})\}.
—————————————————————————–
The function needs four inputs: the out-of-sample loss series obj$loss
, the
corresponding estimated VaR series obj$VaR
, the coverage level obj$p
,
for which the VaR has been calculated and the significance level conflvl
,
at which the null hypotheses are evaluated. If an object returned by this
function is entered into the R console, a detailed overview of the test results
is printed.
A list of class quarks
with the following four elements:
probability p stated in the null hypotheses of the coverage tests
the p-value of the unconditional coverage test
the p-value of the conditional coverage test
the p-value of the independence test
the significance level at which the null hypotheses are evaluated
selected model for estimation; only available if a list
returned by the rollcast
function is passed to cvgtest
selected method for estimation; only available if a list
returned by the rollcast
) function is passed to cvgtest
Christoffersen, P. F. (1998). Evaluating interval forecasts. International economic review, pp. 841-862.
Kupiec, P. (1995). Techniques for verifying the accuracy of risk measurement models. The J. of Derivatives, 3(2).
prices <- DAX$price_close
returns <- diff(log(prices))
n <- length(returns)
nout <- 250 # number of obs. for out-of-sample forecasting
nwin <- 500 # window size for rolling forecasts
results <- rollcast(x = returns, p = 0.975, method = 'age', nout = nout,
nwin = nwin)
cvgtest(results)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.