The hardware and bandwidth for this mirror is donated by dogado GmbH, the Webhosting and Full Service-Cloud Provider. Check out our Wordpress Tutorial.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]dogado.de.
An R package that provides functionality to fit and simulate from stationary vine copula models for time series.
The package is built on top of rvinecopulib and univariateML.
Install the released version from CRAN.
install.packages("svines")Install the development version from GitHub with
remotes.
# install.packages("remotes")
remotes::install_github("tnagler/svines")For detailed documentation and examples, see the package website.
Use svine() for observed data: it estimates the marginal
distributions and the S-vine copula. Use svinecop() when
the margins have already been transformed to approximately uniform
pseudo-observations.
library(svines)
data(returns) # data set of stock returns
returns <- returns[1:500, 1:2]fit <- svine(returns, p = 1) # Markov order 1
summary(fit)
#> $margins
#> # A data.frame: 2 x 5
#> margin name model parameters loglik
#> 1 Allianz Skew Student-t 0.00039, 0.01589, 5.45534, 0.91785 1382
#> 2 AXA Skew Student-t 0.00052, 0.02089, 4.35198, 0.90611 1260
#>
#> $copula
#> # A data.frame: 5 x 10
#> tree edge conditioned conditioning var_types family rotation parameters df
#> 1 1 3, 2 c,c t 0 0.037, 4.893 2
#> 1 2 2, 1 c,c t 0 0.86, 3.48 2
#> 2 1 4, 2 3 c,c joe 90 1.1 1
#> 2 2 3, 1 2 c,c indep 0 0
#> 3 1 4, 1 2, 3 c,c t 0 0.079, 8.994 2
#> tau
#> 0.023
#> 0.662
#> -0.033
#> 0.000
#> 0.051contour(fit$copula)
svine_sim() can be used in two different ways:
sim <- svine_sim(n = 500, rep = 1, model = fit)
pairs(sim)
pairs(returns)
sim <- svine_sim(n = 1, rep = 100, model = fit, past = returns)
pairs(t(sim[1, , ]))
To generate bootstrap replicates with the one-step block multiplier bootstrap, use
set.seed(2026)
models <- svine_bootstrap_models(2, fit)
summary(models[[1]])
#> $margins
#> # A data.frame: 2 x 5
#> margin name model parameters loglik
#> 1 Allianz Skew Student-t 0.00057, 0.01437, 7.22824, 0.97850 NA
#> 2 AXA Skew Student-t 0.00065, 0.01842, 5.29395, 0.98127 NA
#>
#> $copula
#> # A data.frame: 5 x 10
#> tree edge conditioned conditioning var_types family rotation parameters df
#> 1 1 3, 2 c,c t 0 -0.022, 5.380 2
#> 1 2 2, 1 c,c t 0 0.84, 2.99 2
#> 2 1 4, 2 3 c,c joe 90 1 1
#> 2 2 3, 1 2 c,c indep 0 0
#> 3 1 4, 1 2, 3 c,c t 0 0.11, 6.83 2
#> tau
#> -0.014
#> 0.634
#> -0.008
#> 0.000
#> 0.068Declare discrete variables through var_types and
restrict their marginal families to suitable discrete distributions. The
following model uses Poisson margins and a Gaussian pair-copula
family.
counts <- cbind(
claims = rpois(250, lambda = 2),
events = rpois(250, lambda = 4)
)
fit_discrete <- svine(
counts,
p = 1,
var_types = c("d", "d"),
margin_families = "pois",
family_set = "gaussian"
)
fit_discrete
#> 2-dimensional S-vine distribution model of order p = 1 ('svine_dist')
svine_sim(5, rep = 1, model = fit_discrete)
#> claims events
#> [1,] 3 4
#> [2,] 0 5
#> [3,] 0 1
#> [4,] 3 5
#> [5,] 1 1svine() constructs the required CDF and left-limit CDF
values automatically. Users calling svinecop() directly
must supply all regular F(x) columns, followed by one
F(x-) column for each discrete variable.
Nagler, T., Krüger, D., and Min, A. (2022). Stationary vine copula models for multivariate time series. Journal of Econometrics, 227(2), pp. 305-324 [pdf] [doi]
These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.
Health stats visible at Monitor.