Fast exact finite-sample back-testing for Value-at-Risk (VaR) models in R.
ExactVaRTest provides fast dynamic-programming algorithms in C++/Rcpp (with pure R fallbacks) for the exact finite-sample distributions and p-values of Christoffersen (1998) independence (IND) and conditional-coverage (CC) VaR backtests. For completeness, it also provides the exact unconditional-coverage (UC) test following Kupiec (1995) via a closed-form binomial enumeration.
In particular, it corrects the severe size distortions from which the usual asymptotic $\chi^2$ approximation suffers in small samples and under extreme coverage rates.
backtest_lr()
returns the LR statistic, its exact p‑value, and a
reject / fail‑to‑reject decision for one chosen test type (UC, IND, or
CC).
backtest_all()
runs the UC, IND, and CC tests jointly and returns
summaries for all three statistics.
You can install the development version of ExactVaRTest from GitHub with:
# install.packages("pak")
pak::pak("YujianCHEN219/ExactVaRTest")
library(ExactVaRTest)
set.seed(42)
x <- rbinom(300, 1, 0.03) # synthetic 0/1 exception series
bt <- backtest_lr(x, alpha = 0.05, type = "cc") # exact LR_cc back-test
print(bt)
#> Exact finite-sample back-test
#> --------------------------------
#> Test : Conditional coverage (LR_cc)
#> Sample size : 300
#> Model alpha : 0.0500
#> Signif. level : 0.0500
#> LR statistic : 5.8882
#> Exact p-value : 0.0442
#> Decision : REJECT null at 5.00% level
Exact finite‑sample distributions and p‑values for LR_ind and LR_cc at any sample size n; for n ≤ 2000 the computation finishes in milliseconds to a few seconds.
C++ implementation via Rcpp
, with automatic fallback to a pure‑R
reference engine.
Minimal dependencies (Rcpp
, stats
); works on macOS, Linux, and
Windows.
Freely extends to CoVaR backtesting: pass the institution’s hit
sequence on system‑VaR‑breach days into backtest_lr()
for exact UC/IND
p‑values; for short windows or extreme tails, one option is to treat the
systemic‑breach count as random and apply the mixture‑tail test to
maintain correct size. (see vignettes and [Francq & Zakoïan 2025]).
Christoffersen, P. F. (1998). Evaluating interval forecasts. International economic review, 841-862.
Mehta, C. R., Patel, N. R., & Gray, R. (1985). Computing an exact confidence interval for the common odds ratio in several 2× 2 contingency tables. Journal of the American Statistical Association, 80(392), 969-973.
Francq, C., & Zakoïan, J. M. (2025). Inference on dynamic systemic risk measures. Journal of Econometrics, 247, 105936.
I greatly appreciate Christian Francq, Christophe Hurlin, and Jean-Michel Zakoïan’s guidance and support.
In particular, Christian Francq generously shared the initial idea; without his help, this package would not exist.
This package is free and open source, licensed under GPL.
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.