Enum Copula
pub enum Copula {
Gaussian,
StudentT {
factor_dof: f64,
idiosyncratic_dof: f64,
},
}Expand description
The one-factor copula a portfolio credit product prices under: how the
names’ latent variables Xᵢ = √ρ·M + √(1−ρ)·Zᵢ are distributed.
Either way each name defaults with its own probability p — the default
threshold is the latent variable’s p-quantile — so the copula shapes
only the joint defaults: the pool’s expected loss, the whole capital
structure’s, is copula-free.
Variants§
Gaussian
M and Zᵢ standard normal: X is normal and the threshold is
Φ⁻¹(p).
StudentT
Double-t: M and
Zᵢ Student-t scaled to unit variance, √((ν−2)/ν)·t_ν, each with
its own degrees of freedom. X is then a convolution with no closed
form: its CDF H(x) = E[F_Z((x − √ρ·M)/√(1−ρ))] is integrated over
the factor and inverted for the threshold H⁻¹(p). Fewer degrees of
freedom fatten the factor’s tails: joint defaults are likelier, so
loss moves from the equity tranche to the senior ones.
Implementations§
§impl Copula
impl Copula
pub fn student_t(
factor_dof: f64,
idiosyncratic_dof: f64,
) -> Result<Self, CreditError>
pub fn student_t( factor_dof: f64, idiosyncratic_dof: f64, ) -> Result<Self, CreditError>
The double-t copula, checked: each degree of freedom above 2 (the
unit-variance scaling needs a variance) and finite (the Gaussian is
Copula::Gaussian).
§Errors
CreditError::DegreesOfFreedom naming the first offending value.
pub fn from_degrees_of_freedom(
factor_dof: Option<f64>,
idiosyncratic_dof: Option<f64>,
) -> Result<Self, CreditError>
pub fn from_degrees_of_freedom( factor_dof: Option<f64>, idiosyncratic_dof: Option<f64>, ) -> Result<Self, CreditError>
The copula a pair of optional degrees of freedom names: neither is the Gaussian, both the checked double-t.
§Errors
CreditError::DegreesOfFreedomPair for one without the other, and
as student_t.