Archimedean family
Archimedean copulas are an important parametric class of copulas. To define Archimedean copulas, we must consider their generators, which are unrelated to spherical generators and must be
Generators and d-monotony
Archimedean generators can be defined as follows: ::: definition Archimedean generator
A
such that
:::
where the notion of
]) as follows:
A function
for all
A function that is
In this package, there is an abstract class Generator that contains those generators.
Available Archimedean generators
The package covers every archimedean generators that exists through a generic implementation of the Williamson d-transform, see the next section.
On the other hand, many parametric Archimedean generators are specifically implemented, see this list of implemented archimedean generator to get an overview of which ones are availiable.
Empirical generator estimator
From data, you can estimate a EmpiricalGenerator, see the empirical manual page for the method and usage.
The supported generator families are listed below. Defining a subtype of Generator with ϕ, max_monotony, is also a supported public extension mechanism. The developer guide separately describes optional implementation and optimization hooks, which are not public API.
For example, Here is a graph of a few Clayton Generators:
using Copulas: ϕ,ClaytonGenerator,IndependentGenerator
using Plots
plot( x -> ϕ(ClaytonGenerator(-0.5),x), xlims=(0,5), label="ClaytonGenerator(-0.5)")
plot!(x -> exp(-x), label="IndependentGenerator()")
plot!(x -> ϕ(ClaytonGenerator(0.5),x), label="ClaytonGenerator(0.5)")
plot!(x -> ϕ(ClaytonGenerator(1),x), label="ClaytonGenerator(1)")
plot!(x -> ϕ(ClaytonGenerator(5),x), label="ClaytonGenerator(5)")
See the canonical Public API entry for Generator.
Note that the rate at which these functions approach zero can vary significantly between generators. Their inverses are used internally when evaluating the corresponding copulas.
Williamson d-transform
An easy way to construct new
For a univariate non-negative random variable
In this package, we implemented it through the WilliamsonGenerator class. It can be used as follows:
WilliamsonGenerator(X::UnivariateRandomVariable, d).
This function computes the Williamson d-transform of the provided random variable
, DocumenterCitations.CitationSiteNode("williamson1956-cite-1")
] for the literature.
max_monotony of Williamson generators
The
More generally, if you want your Archimedean copula to have a density, you must use a generator that is more-monotone than the dimension of your model.
Orders below two remain useful for Williamson reductions and Liouville marginals or conditionals, even though they cannot by themselves generate a multivariate Archimedean copula.
See the canonical Public API entry for WilliamsonGenerator.
Bijection and identities (matching d)
The Williamson -transform and its inverse form a bijection between positive radials and -monotone Archimedean generators. In particular, when the same is used on both sides:
$$\mathcal W^{-1}_d\big(\mathcal W(X, d)\big) = X$$
The second identity returns the canonical Williamson generator associated to the radial law recovered from
There is also an exact identity between different orders. If
𝒲₋₁(𝒲(X, d), k) uses this representation directly, including for non-integer orders. For an arbitrary generator and a positive real order k, Copulas.jl first computes the inverse at n = ceil(Int, k) and then applies the same beta reduction. This path is available whenever n <= max_monotony(G); integer-valued orders still dispatch to the specialized integer inverses.
Successive reductions are collapsed using the corresponding beta-product identity. The reverse composition is also recognized: applying 𝒲(..., k) to the radial returned by 𝒲₋₁(𝒲(X, d), k) recovers the original order d directly.
As a quick sanity check:
using Distributions
using Copulas: 𝒲, 𝒲₋₁, ϕ
X = LogNormal()
d = 3
G = 𝒲(X, d) # generator from a radial law
X2 = 𝒲₋₁(G, d) # back to the radial law
G2 = 𝒲(X2, d) # back to a generator
# Compare generators numerically at two points
ϕ(G, 0.3), ϕ(G2, 0.3), ϕ(G, 1.1), ϕ(G2, 1.1)(0.45279467953958813, 0.45279467953958813, 0.12780749037092373, 0.12780749037092373)Inverse Williamson d-transform
The Williamson d-transform is a bijective transformation[1] from the set of positive random variables to the set of generators. It therefore has an inverse transformation (called, surprisingly, the inverse Williamson
This transformation is implemented through 𝒲₋₁(G::Generator, d). For integer d, it computes the classical inverse Williamson transform from the derivatives of the d-monotone generator G, unless a more specific radial representation is available. See [ DocumenterCitations.CitationSiteNode("mcneil2009-cite-4")
, DocumenterCitations.CitationSiteNode("williamson1956-cite-2")
].
For a positive non-integer order s, let n = ceil(Int, s). If G is n-monotone, Copulas.jl uses
with independent factors. Then 𝒲_s(R_s) = G. Consequently, 𝒲₋₁(G, s) works for every finite s > 0 satisfying ceil(s) <= max_monotony(G). When s is integer-valued, the beta product is skipped and the usual integer method is used directly.
To put it in a nutshell, for
It returns this cumulative distribution function in the form of the corresponding random variable <:Distributions.ContinuousUnivariateDistribution from Distributions.jl. You may then compute :
The cdf via
Distributions.cdfThe pdf via
Distributions.pdfand the logpdf viaDistributions.logpdfSamples from the distribution via
rand(X,n).
As an example of a generator produced by the Williamson transformation and its inverse, we propose to construct a generator from a LogNormal distribution:
using Distributions
using Copulas: 𝒲, ϕ
using Plots
G = 𝒲(LogNormal(), 2)
plot(x -> ϕ(G,x), xlims=(0,5), label="G")
plot!(x -> exp(-x), label="Independence")
The 𝒲 alias stands for WiliamsonGenerator. To stress the generality of the approach, remark that any positive distribution is allowed, including discrete ones:
using Distributions
using Copulas: 𝒲, ϕ
using Plots
G1 = 𝒲(Binomial(10,0.3), 2)
G2 = 𝒲(Binomial(10,0.3), 3)
plot(x -> ϕ(G1,x), xlims=(0,10), label="G1")
plot!(x -> ϕ(G2,x), label="G2")
As obvious from the definition of the Williamson transform, using a discrete distribution produces piecewise-linear generators, where the number of pieces is dependent on the order of the transformation.
Archimedean Copulas
Let's first define formally archimedean copulas:
If
is a copula.
There are a few archimedean generators that are worth noting since they correspond to known archimedean copulas families:
ClaytonGenerator:generates the copula. GumbelGenerator:generates the copula. FrankGenerator:generates the copula.
There are a lot of others implemented in the package, see our large list of implemented archimedean generator.
Archimedean copulas have a nice decomposition, called the Radial-simplex decomposition, developed in [ DocumenterCitations.CitationSiteNode("mcneil2009-cite-5")
, DocumenterCitations.CitationSiteNode("mcneil2008-cite-1")
]:
A
where
This is why 𝒲₋₁(G::Generator,d) is such an important function in the API: it allows to generator the radial part and sample the Archimedean copula. You may call this function directly to see what distribution will be used:
using Copulas: 𝒲₋₁, FrankGenerator
𝒲₋₁(FrankGenerator(7), 3)Copulas.WilliamsonFromFrailty{Copulas.Logarithmic{Float64}, Distributions.Gamma{Float64}, Int64}(
frailty_dist: Copulas.Logarithmic{Float64}(α=0.9990881180344455, h=-7.0)
numerator: Distributions.Gamma{Float64}(α=3.0, θ=1.0)
order: 3
)For the Frank Copula, as for many classic copulas, the distribution used is known. We pull some of them from Distributions.jl but implement a few more, as this Logarithmic one. Another useful example are negatively-dependent Clayton copulas:
using Copulas: 𝒲₋₁, ClaytonGenerator
𝒲₋₁(ClaytonGenerator(-0.2), 3)Copulas.ClaytonWilliamsonDistribution{Float64}(θ=-0.2, d=3)for which the corresponding distribution is known but has no particular name, thus we implemented it under the ClaytonWilliamsonDistribution name.
When
where
Frailty decomposition for completely monotone generators
It is well-known that completely monotone generators are Laplace transforms of non-negative random variables. This gives rise to another decomposition in [ DocumenterCitations.CitationSiteNode("hofert2013-cite-1")
]:
The link between the distribution of WilliamsonFromFrailty() constructor to build the distribution of WilliamsonGenerator from the frailty distribution itself. The corresponding φ is simply the Laplace transform of
We use this fraily approach for several generators, since sometimes it is faster, including e.g. the Clayton one with positive dependence:
using Copulas: 𝒲₋₁, ClaytonGenerator
𝒲₋₁(ClaytonGenerator(10), 3)Distributions.LocationScale{Float64, Distributions.Continuous, Distributions.BetaPrime{Float64}}(
μ: 0.0
σ: 0.1
ρ: Distributions.BetaPrime{Float64}(α=3.0, β=0.1)
)See the canonical Public API entry for ArchimedeanCopula.
Conditionals and distortions
Let
Conditioning on a subset
with and defining , the conditional copula of the remaining coordinates given is again Archimedean with generator provided the -th derivative exists and . The corresponding univariate conditional distortion for coordinate
is
In particular, in the bivariate case (
These expressions are used in the implementation to provide fast paths for condition(::ArchimedeanCopula, ...) and for conditional distortions on the copula scale.
Quick visual comparison (bivariate)
using Copulas, Plots, Distributions
using Plots.PlotMeasures
Cs = (
ClaytonCopula(2, 2.0),
GumbelCopula(2, 1.6),
FrankCopula(2, 8.0),
IndependentCopula(2),
)
plot(plot.(Cs)..., layout=(2,2))
Conditional distortions (uniform scale)
using StatsBase
C = ClaytonCopula(2, 2.0)
u2 = 0.3
D = condition(C, 2, u2)
ts = range(0.0, 1.0; length=401)
plot(ts, cdf.(Ref(D), ts); label="H_{1|2}(u|$u2)", xlabel="u", ylabel="CDF",
title="Conditional distortion for Clayton(θ=2)")
αs = rand(2000); us = Distributions.quantile.(Ref(D), αs)
EC = ecdf(us)
plot!(ts, EC.(ts); seriestype=:steppost, alpha=0.5, color=:black, label="empirical")
Liouville Copulas
Archimedean copulas have been widely used in the literature due to their nice decomposition properties and easy parametrization. The interested reader can refer to the extensive literature [ DocumenterCitations.CitationSiteNode("hofert2010-cite-1")
– DocumenterCitations.CitationSiteNode("spreeuw2014-cite-1")
] on Archimedean copulas, their nesting extensions and most importantly their estimation.
One major drawback of the Archimedean family is that these copulas have exchangeable marginals (i.e.,
Liouville copulas share many properties with Archimedean copulas, but are not exchangeable when their Dirichlet parameters differ. This is an easy way to produce non-exchangeable dependence structures. See [ DocumenterCitations.CitationSiteNode("cote2019-cite-2")
, DocumenterCitations.CitationSiteNode("mcneil2010-cite-1")
].
For positive parameters
where R and D are independent. LiouvilleCopula is the survival copula of X. Its ith radial margin is 𝒲₋₁(G, α[i]). For a general generator, the constructor accepts arbitrary positive real Dirichlet parameters provided that
When G = 𝒲(R, source_order) retains its source radial, the sharper condition α₀ <= source_order applies: no ceiling is necessary. Integer components automatically use the specialized integer inverse paths, even when other components are non-integer. When α == ones(d), the model remains a LiouvilleCopula{d} but is mathematically Archimedean; its numerical methods exploit the corresponding specialized identity.
Any implemented Generator can be used when it has sufficient monotonicity. Conversely, any supported non-negative univariate radial distribution can define the generator through 𝒲(R, order). This covers the full radial-simplex construction for positive real Dirichlet parameters; a singular radial may naturally produce a copula without a density.
See the canonical Public API entry for LiouvilleCopula.
See the Liouville copulas example for construction from both a radial distribution and a conventional generator, order reductions, sampling, evaluation, and subsetting.
Available models
Every row below defines the generator in
| Family | Generator | Public constructors |
|---|---|---|
| Williamson | WilliamsonGenerator(R, s); ArchimedeanCopula(d, G) | |
| Empirical | Williamson generator obtained by the empirical Kendall/radial inversion described above | EmpiricalGenerator(U); ArchimedeanCopula(d, G) |
| Frailty | FrailtyGenerator(V); ArchimedeanCopula(d, G) | |
| Clayton | ClaytonGenerator(θ); ClaytonCopula{d}(θ); ClaytonCopula(d, θ) | |
| Frank | FrankGenerator(θ); FrankCopula{d}(θ); FrankCopula(d, θ) | |
| Gumbel | GumbelGenerator(θ); GumbelCopula{d}(θ); GumbelCopula(d, θ) | |
| Ali–Mikhail–Haq (AMH) | AMHGenerator(θ); AMHCopula{d}(θ); AMHCopula(d, θ) | |
| Joe | JoeGenerator(θ); JoeCopula{d}(θ); JoeCopula(d, θ) | |
| Gumbel–Barnett | GumbelBarnettGenerator(θ); GumbelBarnettCopula{d}(θ); GumbelBarnettCopula(d, θ) | |
| Inverse Gaussian | InvGaussianGenerator(θ); InvGaussianCopula{d}(θ); InvGaussianCopula(d, θ) | |
| BB1 | BB1Generator(θ, δ); BB1Copula{d}(θ, δ); BB1Copula(d, θ, δ) | |
| BB2 | BB2Generator(θ, δ); BB2Copula{d}(θ, δ); BB2Copula(d, θ, δ) | |
| BB3 | BB3Generator(θ, δ); BB3Copula{d}(θ, δ); BB3Copula(d, θ, δ) | |
| BB6 | BB6Generator(θ, δ); BB6Copula{d}(θ, δ); BB6Copula(d, θ, δ) | |
| BB7 | BB7Generator(θ, δ); BB7Copula{d}(θ, δ); BB7Copula(d, θ, δ) | |
| BB8 | BB8Generator(ϑ, δ); BB8Copula{d}(ϑ, δ); BB8Copula(d, ϑ, δ) | |
| BB9 | BB9Generator(θ, δ); BB9Copula{d}(θ, δ); BB9Copula(d, θ, δ) | |
| BB10 | BB10Generator(θ, δ); BB10Copula{d}(θ, δ); BB10Copula(d, θ, δ) |
Williamson, empirical, and frailty generators
WilliamsonGenerator is the most general constructive route in this page: it turns a non-negative radial law into an Archimedean generator of a specified order. The radial scale is not identifiable—multiplying the radial variable by a positive constant only rescales the generator argument and leaves the copula unchanged—so fitted or hand-built radial laws need a normalization convention. The requested copula dimension must not exceed the available Williamson order.
EmpiricalGenerator estimates that radial representation from a pseudo_values option.
FrailtyGenerator uses the Laplace transform of a non-negative frailty. Such a generator is completely monotone, hence valid in every dimension, and gives a particularly direct sampling representation. This convenience is also a restriction: Archimedean generators that are only
One-parameter families
Clayton. Positive ClaytonGenerator(θ) being constructible does not imply validity in every dimension: one needs
Frank. The sign of
Gumbel. Here
Ali–Mikhail–Haq. AMH offers a comparatively narrow range of dependence, including modest negative association. Zero is independence. Although the generator accepts every
Joe. The Joe family starts at independence for
Gumbel–Barnett. The nominal parameter interval is GumbelBarnettGenerator(θ). This family covers negative association and is consequently unlike the similarly named Gumbel family.
Inverse Gaussian. This completely monotone family is generated by an inverse-Gaussian frailty and is valid in arbitrary dimension. Zero is the independence limit, while the infinite-parameter limit remains a nontrivial Archimedean model rather than becoming automatically comonotonic. The parameter scale is therefore not interchangeable with Clayton or Gumbel strength parameters; compare dependence measures rather than raw parameter values.
Two-parameter BB families
The BB families combine or deform classical generators. Their two parameters usually control different parts of the dependence shape, so identifiability can be weak near a one-parameter boundary. Starting an optimizer exactly on such a boundary can collapse one direction of the likelihood.
BB1. BB1 combines Clayton- and Gumbel-type behavior and can exhibit both lower- and upper-tail dependence. Setting
BB2. The logarithmic deformation in BB2 gives a shape distinct from BB1 even though both use two positive parameters. Neither parameter alone is a universal dependence-strength index, and comparisons should use Kendall's tau, tail coefficients, or fitted probabilities. Small positive
BB3. BB3 applies a Gumbel-type power to
BB6. BB6 links Joe and Gumbel:
BB7. BB7 combines Joe-type upper-tail behavior with a Clayton-type radial deformation. At
BB8. In BB8,
BB9. The corner
BB10. Setting
The canonical Public API gives validation behavior, limiting cases, and the complete callable signatures for these constructors.
References
A. J. McNeil and J. Nešlehová. Multivariate Archimedean Copulas,
-Monotone Functions and -Norm Symmetric Distributions. The Annals of Statistics 37, 3059–3097 (2009). M.-P. Côté and C. Genest. Dependence in a Background Risk Model. Journal of Multivariate Analysis 172, 28–46 (2019).
R. E. Williamson. Multiply Monotone Functions and Their Laplace Transforms. Duke Mathematical Journal 23, 189–207 (1956).
A. J. McNeil. Sampling Nested Archimedean Copulas. Journal of Statistical Computation and Simulation 78, 567–581 (2008).
M. Hofert, M. Mächler and A. J. McNeil. Archimedean Copulas in High Dimensions: Estimators and Numerical Challenges Motivated by Financial Applications. Journal de la Société Française de Statistique 154, 25–63 (2013).
M. Hofert. Sampling Nested Archimedean Copulas with Applications to CDO Pricing. Ph.D. Thesis, Universität Ulm (2010).
M. Hofert and D. Pham. Densities of Nested Archimedean Copulas. Journal of Multivariate Analysis 118, 37–52 (2013).
A. J. McNeil and J. Nešlehová. From Archimedean to Liouville Copulas. Journal of Multivariate Analysis 101, 1772–1790 (2010).
H. Cossette, S.-P. Gadoury, E. Marceau and I. Mtalai. Hierarchical Archimedean Copulas through Multivariate Compound Distributions. Insurance: Mathematics and Economics 76, 1–13 (2017).
H. Cossette, E. Marceau, I. Mtalai and D. Veilleux. Dependent Risk Models with Archimedean Copulas: A Computational Strategy Based on Common Mixtures and Applications. Insurance: Mathematics and Economics 78, 53–71 (2018).
C. Genest, J. Nešlehová and J. Ziegel. Inference in Multivariate Archimedean Copula Models. TEST 20, 223–256 (2011).
E. Di Bernardino and D. Rulliere. On Certain Transformations of Archimedean Copulas: Application to the Non-Parametric Estimation of Their Generators. Dependence Modeling 1, 1–36 (2013).
E. Di Bernardino and D. Rullière. On an Asymmetric Extension of Multivariate Archimedean Copulas Based on Quadratic Form. Dependence Modeling 4 (2016).
K. Cooray. Strictly Archimedean Copulas with Complete Association for Multivariate Dependence Based on the Clayton Family. Dependence Modeling 6, 1–18 (2018).
J. Spreeuw. Archimedean Copulas Derived from Utility Functions. Insurance: Mathematics and Economics 59, 235–242 (2014).
This bijection is to be taken carefuly: the bijection is between random variables with unit scales and generators with common value at 1, sicne on both rescaling does not change the underlying copula. ↩︎