| 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, , ]))