Copulas for portfolio loss simulation¶
The Gaussian copula is Vasicek-equivalent: pairs of Gaussian latent
factors drive correlated defaults. The Student-t copula has heavier
joint tails — extreme defaults cluster more — which is what regulators
care about most under stress.
Tail dependence¶
The Gaussian copula has zero asymptotic tail dependence: very extreme
joint events become arbitrarily unlikely. The t copula has positive
upper tail dependence:
\[
\lambda_U = 2 \cdot t_{\nu+1}\!\left(-\sqrt{\frac{(\nu+1)(1-\rho)}{1+\rho}}\right) > 0.
\]
API¶
from merton.portfolio import GaussianCopula, TCopula
gauss = GaussianCopula(correlation=0.4, n_firms=100)
tcop = TCopula(correlation=0.4, n_firms=100, df=4)
u_g = gauss.sample(10_000, rng=...)
u_t = tcop.sample(10_000, rng=...)
Pass either to :class:merton.portfolio.Portfolio:
from merton.portfolio import Portfolio
pf = Portfolio(firms, copula="t", df=4, correlation=0.4)
loss = pf.simulate(n_sims=100_000)