Skip to content

Choosing a family

If the data look like this Reach for
Symmetric, no joint extremes GaussianCopula
Symmetric, joint extremes in both tails StudentCopula
Joint crashes but not joint booms ClaytonCopula
Joint booms but not joint crashes GumbelCopula
Flexible middle, negative dependence allowed, no tail dependence FrankCopula
Heavier upper tail than Gumbel JoeCopula
Only weak dependence (τ ∈ [−0.18, 1/3]) AMHCopula
Joint maxima (floods, wind, temperature) GalambosCopula, HuslerReissCopula, TawnCopula, TEVCopula
Full dependence range, no tail dependence, closed-form ρ PlackettCopula
Tail in the other corner rc.survival(cop), rc.RotatedCopula(cop, 90)
Asymmetric — the pair does not look the same from both sides rc.KhoudrajiCopula(c1, c2, shapes)
Both tails at once rc.MixtureCopula([clayton, gumbel], w)
Blocks or a hierarchy rc.NestedArchimedean(...)

Bivariate only: Galambos, Hüsler–Reiss, Tawn, t-EV, Plackett, Marshall–Olkin, and the Fréchet lower bound.

Let the data choose

ranking = rc.select_copula(u)  # every admissible family, ranked
print(ranking)
best = ranking.best  # fitted, ready to use

The table reports λ_L, λ_U and τ next to each score, so the ranking reads as a statement about which asymmetries the data insists on rather than an opaque leaderboard.

Two cautions, both stated in the table rather than hidden

AIC and BIC compare fit against complexity, not against the data. The best of a bad set is still bad — pass gof=True (or gof="mult" for the fast version) to test the winner against the data itself.

Selection is itself an estimate. With a few hundred observations the top few families are usually within noise; a difference in AIC of less than about 2 is not evidence. rc.cross_validate is the more honest comparison, and avoids the known bias of AIC for copulas fitted to pseudo-observations.

A worked warning

"We used Clayton because we care about the tail" is, for loss aggregation, exactly backwards. Aggregate loss risk lives in the upper tail; Clayton binds in the lower one. At τ = 0.5 on two exponential margins, the 99% expected shortfall comes out:

Clayton           8.57      <- lower than the Gaussian
Frank             9.00
Gaussian         10.20
Student(4)       10.56
Gumbel           10.95
survival Clayton 11.02

It is the survival Clayton that belongs there. Kendall's τ is 0.5 in every row and reports none of this.