Source code for copul.family.archimedean.multivar_arch_independence

import sympy as sp

from copul.family.archimedean.archimedean_copula import ArchimedeanCopula
from copul.family.other.independence_copula import IndependenceCopula


[docs] class MultivariateArchimedeanIndependence(ArchimedeanCopula, IndependenceCopula): """ Multivariate Independence Copula as an Archimedean Copula. This class represents the independence copula as a special case of an Archimedean copula with generator function φ(t) = -log(t). The independence copula represents statistical independence between random variables: C(u₁, u₂, ..., uₙ) = u₁ × u₂ × ... × uₙ Parameters ---------- dimension : int, optional Dimension of the copula (number of variables). Default is 2. """ # Define class-level generator expressions _t_min = 0 _t_max = 1 t = sp.symbols("t", nonnegative=True) y = sp.symbols("y", nonnegative=True) _generator_at_0 = sp.oo def __init__(self, dimension=2, **kwargs): """ Initialize a multivariate independence copula as an Archimedean copula. Parameters ---------- dimension : int, optional Dimension of the copula (default is 2). **kwargs Additional keyword arguments (ignored). """ # Initialize both parent classes IndependenceCopula.__init__(self, dimension=dimension, **kwargs) @property def _raw_generator(self): """ Raw generator function for the independence copula. The independence copula has generator φ(t) = -log(t). Returns ------- sympy.Expr The generator function expression. """ return -sp.log(self.t) @property def _raw_inv_generator(self): """ Raw inverse generator function for the independence copula. The independence copula has inverse generator ψ(s) = exp(-s). Returns ------- sympy.Expr The inverse generator function expression. """ return sp.exp(-self.y) @property def is_absolutely_continuous(self) -> bool: """ Check if the copula is absolutely continuous. The independence copula is absolutely continuous. Returns ------- bool True """ return True @property def is_symmetric(self) -> bool: """ Check if the copula is symmetric. The independence copula is symmetric in all its arguments. Returns ------- bool True """ return True
# Register the independence copula as a special case of Archimedean copulas # This allows Archimedean copula factories to return the independence copula # when the parameter value corresponds to independence
[docs] def register_independence_special_case(archimedean_class, independence_param_value): """ Register the MultivariateArchimedeanIndependence class as a special case of an Archimedean copula family. Parameters ---------- archimedean_class : class The Archimedean copula class to register with. independence_param_value : float or int The parameter value that corresponds to independence. """ if not hasattr(archimedean_class, "special_cases"): archimedean_class.special_cases = {} archimedean_class.special_cases[independence_param_value] = ( MultivariateArchimedeanIndependence )