| Title: | Stationary Vine Copula Models | 
| Version: | 0.2.7 | 
| Description: | Provides functionality to fit and simulate from stationary vine copula models for time series, see Nagler et al. (2022) <doi:10.1016/j.jeconom.2021.11.015>. | 
| License: | GPL-3 | 
| Encoding: | UTF-8 | 
| LazyData: | true | 
| URL: | https://github.com/tnagler/svines | 
| BugReports: | https://github.com/tnagler/svines/issues | 
| Depends: | R (≥ 4.1.0), rvinecopulib (≥ 0.7.2.1.0) | 
| Imports: | Rcpp, assertthat, univariateML, wdm, fGarch | 
| LinkingTo: | RcppEigen, Rcpp, RcppThread, BH, wdm, rvinecopulib | 
| Suggests: | testthat, ggraph, covr | 
| RoxygenNote: | 7.3.2 | 
| NeedsCompilation: | yes | 
| Packaged: | 2025-06-12 15:17:53 UTC; n5 | 
| Author: | Thomas Nagler [aut, cre] | 
| Maintainer: | Thomas Nagler <mail@tnagler.com> | 
| Repository: | CRAN | 
| Date/Publication: | 2025-06-12 15:40:02 UTC | 
svines: Stationary Vine Copula Models
Description
Provides functionality to fit and simulate from stationary vine copula models for time series, see Nagler et al. (2022) doi:10.1016/j.jeconom.2021.11.015.
Author(s)
Maintainer: Thomas Nagler mail@tnagler.com
See Also
Useful links:
Stock returns of 20 companies
Description
A dataset containing the log-returns of daily returns of 20 companies. The observation period is from 2015-01-01 to 2019-12-31.
Usage
returns
Format
A data frame with 1296 rows and 20 variables:
Source
Yahoo finance.
Stationary vine distribution models
Description
Automated fitting or creation of custom S-vine distribution models
Usage
svine(
  data,
  p,
  margin_families = univariateML::univariateML_models,
  selcrit = "aic",
  ...
)
Arguments
| data | a matrix or data.frame of data. | 
| p | the Markov order. | 
| margin_families | either a vector of univariateML::univariateML_models to select
from (used for every margin) or a list with one entry for every variable.
Can also be  | 
| selcrit | criterion for family selection, either  | 
| ... | arguments passed to  | 
Value
Returns the fitted model as an object with classes
svine and svine_dist. A list with entries
-  $margins: list of marginal models from univariateML::univariateML_models,
-  $copula: an object ofsvinecop_dist.
See Also
svine_dist, svine_loglik, svine_sim, svine_bootstrap_models
Examples
# load data set
data(returns)  
# fit parametric S-vine model with Markov order 1
fit <- svine(returns[1:100, 1:3], p = 1, family_set = "parametric")
fit 
summary(fit)
plot(fit$copula)
contour(fit$copula)
logLik(fit)
pairs(svine_sim(500, rep = 1, fit))
Bootstrap S-vine models
Description
Computes bootstrap replicates of a given model using the one-step block multiplier bootstrap of Nagler et. al (2022).
Usage
svine_bootstrap_models(n_models, model)
Arguments
| n_models | number of bootstrap replicates. | 
| model | the initial fitted model | 
Value
A list of length n_models, with each entry representing one
bootstrapped model as object of class svine.
Examples
data(returns)
dat <- returns[1:100, 1:2]
# fit parametric S-vine model with Markov order 1
model <- svine(dat, p = 1, family_set = "parametric")
# compute 10 bootstrap replicates of the model
boot_models <- svine_bootstrap_models(10, model)
# compute bootstrap replicates of 90%-quantile of X_1 + X_2.
mu_boot <- sapply(
  boot_models,
  function(m) {
    xx <- rowSums(t(svine_sim(1, 10^2, m, past = dat)[1, ,]))
    quantile(xx, 0.9)
  }
) 
Custom S-vine distribution models
Description
Custom S-vine distribution models
Usage
svine_dist(margins, copula)
Arguments
| margins | A list of length  | 
| copula | the copula model; an object of class  | 
Value
Returns the model as an object with class  svine_dist.
A list with entries
-  $margins: list of marginal models from univariateML::univariateML_models,
-  $copula: an object ofsvinecop_dist.
See Also
svine_dist, svine_loglik, svine_sim, svine_bootstrap_models
Examples
## marginal objects
# create dummy univariateML models
univ1 <- univ2 <- univariateML::mlnorm(rnorm(10))
# modify the parameters to N(5, 10) and N(0, 2) distributions
univ1[] <- c(5, 10)
univ2[] <- c(0, 2)
## copula óbject
cs_struct <- cvine_structure(1:2)
pcs <- list(
  list(  # first tree
    bicop_dist("clayton", 0, 3), # cross sectional copula
    bicop_dist("gaussian", 0, -0.1)  # serial copula
  ),
  list(  # second tree
    bicop_dist("gaussian", 0, 0.2), bicop_dist("indep")  
  ),
  list( # third tree
    bicop_dist("indep")
  )
)
cop <- svinecop_dist(
  pcs, cs_struct, p = 1, out_vertices = 1:2, in_vertices = 1:2)
    
model <- svine_dist(margins = list(univ1, univ2), copula = cop)
summary(model)
Expected hessian of a parametric S-vine models
Description
Expected hessian of a parametric S-vine models
Usage
svine_hessian(x, model, cores = 1)
Arguments
| x | the data. | 
| model | S-vine model (inheriting from svine_dist). | 
| cores | number of cores to use. | 
Value
A returns a k-by-k matrix, where k is the
total number of parameters in the
model. Parameters are ordered as follows:
marginal parameters, copula parameters of first tree, copula parameters of
second tree, etc. Duplicated parameters in the copula model are omitted.
Examples
data(returns)
dat <- returns[1:100, 1:2]
# fit parametric S-vine model with Markov order 1
model <- svine(dat, p = 1, family_set = "parametric")
# Implementation of asymptotic variances
I <- cov(svine_scores(dat, model))
H <- svine_hessian(dat, model)
Hi <- solve(H)
Hi %*% I %*% t(Hi) / nrow(dat)
Log-likelihood for S-vine models
Description
Log-likelihood for S-vine models
Usage
svine_loglik(x, model, cores = 1)
Arguments
| x | the data. | 
| model | model inheriting from class svine_dist. | 
| cores | number of cores to use; if larger than one, computations are
done in parallel on  | 
Value
Returns the log-likelihood of the data for the model.
Examples
# load data set
data(returns)  
# fit parametric S-vine model with Markov order 1
fit <- svine(returns[1:100, 1:3], p = 1, family_set = "parametric")
svine_loglik(returns[1:100, 1:3], fit)
Pseudo-residuals of S-vine models
Description
Pseudo-residuals are defined as the Rosenblatt transform of the data,
conditional on the past. Under a correctly specified model, they are
approximately iid uniform on [0, 1]^d.
Usage
svine_pseudo_residuals(x, model, cores = 1)
Arguments
| x | the data. | 
| model | model inheriting from class svine_dist. | 
| cores | number of cores to use; if larger than one, computations are
done in parallel on  | 
Value
Returns a multivariate time series of pseudo-residuals
Examples
# load data set
data(returns)  
# convert to pseudo observations with empirical cdf for marginal distributions
u <- pseudo_obs(returns[1:100, 1:3]) 
# fit parametric S-vine copula model with Markov order 1
fit <- svinecop(u, p = 1, family_set = "parametric")
# compute pseudo-residuals
# (should be independent uniform across variables and time)
v <- svinecop_pseudo_residuals(u, fit)
pairs(cbind(v[-1, ], v[-nrow(v), ]))
Score function of parametric S-vine models
Description
Score function of parametric S-vine models
Usage
svine_scores(x, model, cores = 1)
Arguments
| x | the data. | 
| model | S-vine model (inheriting from svine_dist). | 
| cores | number of cores to use. | 
Value
A returns a n-by-k matrix, where n = NROW(x) and k is the
total number of parameters in the
model. Parameters are ordered as follows:
marginal parameters, copula parameters of first tree, copula parameters of
second tree, etc. Duplicated parameters in the copula model are omitted.
Examples
data(returns)
dat <- returns[1:100, 1:2]
# fit parametric S-vine model with Markov order 1
model <- svine(dat, p = 1, family_set = "parametric")
# Implementation of asymptotic variances
I <- cov(svine_scores(dat, model))
H <- svine_hessian(dat, model)
Hi <- solve(H)
Hi %*% I %*% t(Hi) / nrow(dat)
Simulate from a S-vine model
Description
Simulate from a S-vine model
Usage
svine_sim(n, rep, model, past = NULL, qrng = FALSE, cores = 1)
Arguments
| n | how many steps of the time series to simulate. | 
| rep | number of replications;  | 
| model | a S-vine copula model object (inheriting from svinecop_dist). | 
| past | (optional) matrix of past observations. If provided, time series are simulated conditional on the past. | 
| qrng | if  | 
| cores | number of cores to use; if larger than one, computations are done parallel over replications. | 
Value
An n-by-d-byrep array, where d is the cross-sectional
dimension of the model. This reduces to an n-by-d matrix if rep == 1.
Examples
# load data set
data(returns)  
returns <- returns[1:100, 1:3]
# fit parametric S-vine model with Markov order 1
fit <- svine(returns, p = 1, family_set = "parametric")
pairs(returns)  # original data
pairs(svine_sim(100, rep = 1, model = fit))   # simulated data
# simulate the next day conditionally on the past 500 times
pairs(t(svine_sim(1, rep = 100, model = fit, past = returns)[1, , ]))
Stationary vine copula models
Description
Automated fitting or creation of custom S-vine copula models
Usage
svinecop(
  data,
  p,
  var_types = rep("c", NCOL(data)),
  family_set = "all",
  cs_structure = NA,
  out_vertices = NA,
  in_vertices = NA,
  type = "S",
  par_method = "mle",
  nonpar_method = "constant",
  mult = 1,
  selcrit = "aic",
  weights = numeric(),
  psi0 = 0.9,
  presel = TRUE,
  trunc_lvl = Inf,
  tree_crit = "tau",
  threshold = 0,
  keep_data = FALSE,
  show_trace = FALSE,
  cores = 1
)
Arguments
| data | a matrix or data.frame (copula data should have approximately uniform margins). | 
| p | the Markov order. | 
| var_types | variable types; discrete variables not (yet) allowed. | 
| family_set | a character vector of families; see  | 
| cs_structure | the cross-sectional vine structure (see
 | 
| out_vertices | the out-vertex; if  | 
| in_vertices | the in-vertex; if  | 
| type | type of stationary vine;  | 
| par_method | the estimation method for parametric models, either  | 
| nonpar_method | the estimation method for nonparametric models, either
 | 
| mult | multiplier for the smoothing parameters of nonparametric families. Values larger than 1 make the estimate more smooth, values less than 1 less smooth. | 
| selcrit | criterion for family selection, either  | 
| weights | optional vector of weights for each observation. | 
| psi0 | prior probability of a non-independence copula (only used for
 | 
| presel | whether the family set should be thinned out according to symmetry characteristics of the data. | 
| trunc_lvl | currently unsupported. | 
| tree_crit | the criterion for tree selection, one of  | 
| threshold | for thresholded vine copulas;  | 
| keep_data | whether the data should be stored (necessary for using
 | 
| show_trace | logical; whether a trace of the fitting progress should be printed. | 
| cores | number of cores to use; if more than 1, estimation of pair copulas within a tree is done in parallel. | 
Value
Returns the fitted model as an object with classes
svinecop and svinecop_dist. Also inherits from vinecop, vinecop_dist
such that many functions from rvinecopulib can be called.
Examples
# load data set
data(returns)  
# convert to pseudo observations with empirical cdf for marginal distributions
u <- pseudo_obs(returns[1:100, 1:3]) 
# fit parametric S-vine copula model with Markov order 1
fit <- svinecop(u, p = 1, family_set = "parametric")
fit 
summary(fit)
plot(fit)
contour(fit)
logLik(fit)
pairs(svinecop_sim(500, rep = 1, fit))
Custom S-vine models
Description
Custom S-vine models
Usage
svinecop_dist(
  pair_copulas,
  cs_structure,
  p,
  out_vertices,
  in_vertices,
  var_types = rep("c", dim(cs_structure)[1])
)
Arguments
| pair_copulas | A nested list of 'bicop_dist' objects, where
 | 
| cs_structure | The cross-sectional structure. Either a matrix, or an
 | 
| p | the Markov order. | 
| out_vertices | the out-vertex; if  | 
| in_vertices | the in-vertex; if  | 
| var_types | variable types; discrete variables not (yet) allowed. | 
Value
Returns the model as an object with classes
svinecop_dist. Also inherits from vinecop_dist
such that many functions from rvinecopulib can be called.
See Also
svinecop_loglik, svinecop_sim, svinecop_hessian, svinecop_scores
Examples
cs_struct <- cvine_structure(1:2)
pcs <- list(
  list(  # first tree
    bicop_dist("clayton", 0, 3), # cross sectional copula
    bicop_dist("gaussian", 0, -0.1)  # serial copula
  ),
  list(  # second tree
    bicop_dist("gaussian", 0, 0.2), bicop_dist("indep")  
  ),
  list( # third tree
    bicop_dist("indep")
  )
)
cop <- svinecop_dist(
  pcs, cs_struct, p = 1, out_vertices = 1:2, in_vertices = 1:2)
Expected hessian for S-vine copula models
Description
Expected hessian for S-vine copula models
Usage
svinecop_hessian(u, model, cores = 1)
Arguments
| u | the data; should have approximately uniform margins.. | 
| model | model inheriting from class svinecop_dist. | 
| cores | number of cores to use; if larger than one, computations are
done in parallel on  | 
Value
Returns the observed Hessian matrix. Rows/columns correspond to to model parameters in the order: copula parameters of first tree, copula parameters of second tree, etc. Duplicated parameters in the copula model are omitted.
See Also
Examples
# load data set
data(returns)
# convert to uniform margins
u <- pseudo_obs(returns[1:100, 1:3])
# fit parametric S-vine copula model with Markov order 1
fit <- svinecop(u, p = 1, family_set = "parametric")
svinecop_loglik(u, fit)
svinecop_scores(u, fit)
svinecop_hessian(u, fit)
Log-likelihood for S-vine copula models
Description
Log-likelihood for S-vine copula models
Usage
svinecop_loglik(u, model, cores = 1)
Arguments
| u | the data; should have approximately uniform margins. | 
| model | model inheriting from class svinecop_dist. | 
| cores | number of cores to use; if larger than one, computations are
done in parallel on  | 
Value
Returns the log-likelihood of the data for the model.
Examples
# load data set
data(returns)  
# convert to uniform margins
u <- pseudo_obs(returns[1:100, 1:3])
# fit parametric S-vine copula model with Markov order 1
fit <- svinecop(u, p = 1, family_set = "parametric")
svinecop_loglik(u, fit)
svinecop_scores(u, fit)
svinecop_hessian(u, fit)
Pseudo-residuals of S-vine copula models
Description
Pseudo-residuals are defined as the Rosenblatt transform of the data,
conditional on the past. Under a correctly specified model, they are
approximately iid uniform on [0, 1]^d.
Usage
svinecop_pseudo_residuals(u, model, cores = 1)
Arguments
| u | the data; should have approximately uniform margins. | 
| model | model inheriting from class svinecop_dist. | 
| cores | number of cores to use; if larger than one, computations are
done in parallel on  | 
Value
Returns a multivariate time series of pseudo-residuals
Examples
# load data set
data(returns)  
# convert to pseudo observations with empirical cdf for marginal distributions
u <- pseudo_obs(returns[1:100, 1:3]) 
# fit parametric S-vine copula model with Markov order 1
fit <- svinecop(u, p = 1, family_set = "parametric")
# compute pseudo-residuals
# (should be independent uniform across variables and time)
v <- svinecop_pseudo_residuals(u, fit)
pairs(cbind(v[-1, ], v[-nrow(v), ]))
Log-likelihood scores for S-vine copula models
Description
Log-likelihood scores for S-vine copula models
Usage
svinecop_scores(u, model, cores = 1)
Arguments
| u | the data; should have approximately uniform margins.. | 
| model | model inheriting from class svinecop_dist. | 
| cores | number of cores to use; if larger than one, computations are
done in parallel on  | 
Value
A matrix containing the score vectors in its rows, where each
row corresponds to one observation (row in u). The columns correspond
to model parameters in the order:
copula parameters of first tree, copula parameters of
second tree, etc. Duplicated parameters in the copula model are omitted.
See Also
Examples
# load data set
data(returns)  
# convert to uniform margins
u <- pseudo_obs(returns[1:100, 1:3])
# fit parametric S-vine copula model with Markov order 1
fit <- svinecop(u, p = 1, family_set = "parametric")
svinecop_loglik(u, fit)
svinecop_scores(u, fit)
svinecop_hessian(u, fit)
Simulate from a S-vine copula model
Description
Simulate from a S-vine copula model
Usage
svinecop_sim(n, rep, model, past = NULL, qrng = FALSE, cores = 1)
Arguments
| n | how many steps of the time series to simulate. | 
| rep | number of replications;  | 
| model | a S-vine copula model object (inheriting from svinecop_dist). | 
| past | (optional) matrix of past observations. If provided, time series are simulated conditional on the past. | 
| qrng | if  | 
| cores | number of cores to use; if larger than one, computations are done parallel over replications. | 
Value
An n-by-d-by-rep array, where d is the cross-sectional
dimension of the model. This reduces to an n-by-d matrix if rep == 1.
Examples
# load data set
data(returns)  
# convert to uniform margins
u <- pseudo_obs(returns[1:100, 1:3])
# fit parametric S-vine copula model with Markov order 1
fit <- svinecop(u, p = 1, family_set = "parametric")
pairs(u)   # original data
pairs(svinecop_sim(100, rep = 1, model = fit))   # simulated data
# simulate the next day conditionally on the past 500 times
pairs(t(svinecop_sim(1, rep = 100, model = fit, past = u)[1, , ]))