C-, D-, and R-vines
Explicit and fitted vine copula models with flexible pair-copula families and truncation support.
Build, fit, select, evaluate, and simulate C-vines, D-vines, and R-vines on top of Copulas.jl.

VineCopulas.jl is a native Julia package for building, fitting, selecting, evaluating, and simulating C-vine, D-vine, and regular-vine copula models on top of Copulas.jl.
The package follows the Distributions.jl/Copulas.jl ecosystem: explicit vine models are copulas, pair copulas come from Copulas.jl, and fitting is exposed through fit.
Vine models are useful when dependence is high-dimensional but can be described through interpretable bivariate building blocks. VineCopulas.jl focuses on the vine layer: structures, pair composition, traversal, simulation, sequential fitting, and structure selection. The mathematics of individual pair-copula families remains the responsibility of Copulas.jl.
C-vine, D-vine, and general R-vine models.
First-class CVineStructure, DVineStructure, and RVineStructure objects.
pdf, logpdf, rand, numerical cdf, Rosenblatt, and inverse Rosenblatt transforms.
Pair-copula fitting with family and rotation selection.
Sequential fitting for fixed vine structures.
Automatic C-vine and D-vine ordering.
Dissmann-style R-vine structure selection with maximum spanning trees.
AIC, BIC, log-likelihood, Kendall-
Truncated vine evaluation and user-controlled fitting truncation.
External correctness checks against rvinecopulib and reproducible performance benchmarks.
Current modeling scope
The package currently implements simplified vines. Truncation is user controlled for every vine type, and density evaluation, Rosenblatt/inverse Rosenblatt transforms, and simulation all respect it. Automatic data-driven truncation selection is not implemented.
using VineCopulas
using Distributions: fit, logpdf
using Random
rng = MersenneTwister(42)
truth = DVineCopula(
[1, 2, 3],
[[GaussianCopula(2, 0.55), ClaytonCopula(2, 1.4)],
[FrankCopula(2, 2.0)]],
)
U = rand(rng, truth, 300)
fitted = fit(
DVineCopula,
U;
family_set=:default,
selection_criterion=:bic,
allow_rotations=true,
)
(order = order(fitted),
truncation = truncation(fitted),
loglikelihood = loglikelihood(fitted, U))(order = (3, 2, 1), truncation = 2, loglikelihood = 133.25928234192196)Explicit vines are ordinary copulas:
u = [0.2, 0.5, 0.7]
(logdensity = logpdf(truth, u),
roundtrip_error = maximum(abs.(inverse_rosenblatt(truth, rosenblatt(truth, U)) .- U)))(logdensity = -0.12694368299308356, roundtrip_error = 7.66053886991358e-15)Matrices are interpreted as p × n: rows are variables and columns are observations.
The site has five conceptual sections plus the home page:
Home — this overview, quick example, and citation.
Manual — theory, conventions, pair-copula semantics, fitting, transforms, and benchmarks.
Bestiary — supported vine structures and pair-copula families.
Examples — practical workflows with small, reproducible code.
Developer Guide — architecture, contracts, testing, release process, upstream follow-ups, and roadmap.
API — public reference, internal non-stable reference, and literature/software references.
The version selector in the documentation provides the development site, the latest stable release, and retained tagged versions.
If you use VineCopulas.jl, please cite the package metadata in CITATION.cff:
@software{jimenez_vinecopulas,
author = {Santiago Jimenez and contributors},
title = {VineCopulas.jl},
url = {https://github.com/Santymax98/VineCopulas.jl},
version = {0.1.2},
year = {2026}
}