Skip to main content

Joe

Joe(
    kendall_tau: float,
    rotation: str | systematica.models.arbitrage_index.utils.BaseCopulaRotation = BaseCopulaRotation.R0,
    start: float = 0.001,
    stop: float = 0.999,
    num: int = 100,
)
Bivariate Joe Copula Estimation. The Joe copula is an Archimedean copula characterized by strong upper tail dependence and little to no lower tail dependence. In its unrotated form, it is used for modeling extreme co-movements in the upper tail (i.e. simultaneous extreme gains). Rotations allow the copula to be adapted for different types of tail dependence:
  • A 180 rotation captures extreme co-movements in the lower tail (i.e. simultaneous extreme losses).
  • A 90 rotation captures scenarios where one variable exhibits extreme losses while the other shows extreme gains.
  • A 270 rotation captures the opposite scenario, where one variable experiences extreme gains while the other suffers extreme losses.
Joe copula generally exhibits stronger upper tail dependence than the Gumbel copula. It is defined by: Cθ(u,v)=1[(1u)θ+(1v)θ(1u)θ(1v)θ]1θC_{\theta}(u, v) = 1-\Bigl[(1 - u)^{\theta} + (1 - v)^{\theta} - (1 - u)^{\theta} (1 - v)^{\theta}\Bigr]^{\frac{1}{\theta}} where θ1\theta \ge 1 is the dependence parameter. When θ=1\theta = 1, the Joe copula reduces to the independence copula. Larger values of θ\theta result in stronger upper-tail dependence.
The Joe copula is a popular tool in statistics and quantitative finance for modeling dependencies between random variables, particularly when capturing upper-tail dependence . In many real-world scenarios—such as financial market stress or simultaneous extreme losses in risk management—the likelihood of very high outcomes occurring together is of central concern. The Joe copula’s conditional probability formulas help quantify this joint behavior between two dependent random variables UU and VV (with uniform marginals).
  1. Upper-Tail Dependence : The Joe copula is specifically designed to capture strong upper-tail dependence. This means it excels at modeling situations where extreme high values in one variable are likely to be accompanied by extreme high values in another. This property is crucial for understanding joint extreme events.
  2. Risk Management : In the context of risk management, the Joe copula is used to assess the probability of simultaneous extreme events, such as large losses in multiple assets or catastrophic insurance claims. By accurately modeling the dependence in the upper tail, risk managers can better estimate the likelihood of coinciding adverse outcomes and design more robust mitigation strategies.
  3. Joint and Conditional Probabilities : The Joe copula provides a framework for computing joint and conditional probabilities of extreme events. The conditional probability formulas derived from the Joe copula allow analysts to determine, for example, the probability that one variable will take on a high value given that another variable is already in the extreme region. This information is vital for stress testing and scenario analysis in both finance and insurance.
Rotation are needed for Archimedean copulas (e.g., Joe, Gumbel, Clayton) because their parameters only model positive dependence, and they exhibit asymmetric tail behavior. To model negative dependence, one uses rotations to “flip” the copula’s tail dependence. Method generated by attrs for class Joe.

Ancestors

  • systematica.models.arbitrage_index.base.BaseCopula
  • abc.ABC

Instance variables

  • lower_tail_dependence: float: Theoretical lower tail dependence coefficient. The Joe copula has no lower tail dependence in its unrotated form.
  • upper_tail_dependence: float: Theoretical upper tail dependence coefficient. The Joe copula has upper tail dependence in its unrotated form.

Methods

density

density(
    self,
    u: numpy.ndarray,
    v: numpy.ndarray,
) ‑> numpy.ndarray
Calculate log probability density of the bivariate copula: P(U=u,V=v)P(U=u, V=v) Parameters:
NameTypeDefaultDescription
utp.Array1d--First uniform marginal.
vtp.Array1d--Second uniform marginal.
Returns:
TypeDescription
floatLog probability density.
Raises:
TypeDescription
AssertionErrorJoe Kendall’s tau must be in (0, 1).

cumulative_density

cumulative_density(
    self,
    u: numpy.ndarray,
    v: numpy.ndarray,
) ‑> numpy.ndarray
Calculate cumulative density of the bivariate copula: P(U<=u,V<=v)P(U<=u, V<=v) Parameters:
NameTypeDefaultDescription
utp.Array1d--First uniform marginal.
vtp.Array1d--Second uniform marginal.
Returns:
TypeDescription
tp.Array1dCumulative density.
Raises:
TypeDescription
AssertionErrorJoe Kendall’s tau must be in (0, 1).

arbitrage

arbitrage(
    self,
    ui: float,
    vi: float,
) ‑> Tuple[floatfloat]
Compute the h-function (partial derivative) for the bivariate Joe copula, a.k.a. the mispricing index, for every time step in the trading period using the estimated copula. Parameters:
NameTypeDefaultDescription
uifloat--The first component of the bivariate input.
vifloat--The second component of the bivariate input.
Returns:
TypeDescription
tp.Tuple[float, float]:The mispricing indices for the copula, a.k.a. arbitrage.
Raises:
TypeDescription
AssertionErrorJoe Kendall’s tau must be in (0, 1).

partial_derivative

partial_derivative(
    self,
    u: numpy.ndarray,
    v: numpy.ndarray,
) ‑> numpy.ndarray
Compute the h-function (partial derivative) for the bivariate Joe copula, a.k.a. the mispricing index, for every time step in the trading period using the estimated copula. Parameters:
NameTypeDefaultDescription
utp.Array1d--The first component of the bivariate input.
vtp.Array1d--The second component of the bivariate input.
Returns:
TypeDescription
tp.Array2dThe mispricing indices for the copula, a.k.a. arbitrage.
Raises:
TypeDescription
AssertionErroru and v must have the same shape.
AssertionErrorJoe Kendall’s tau must be in (0, 1).

score

score(
    self,
    u: numpy.ndarray,
    v: numpy.ndarray,
    best_fit: bool = False,
) ‑> numpy.ndarray
Compute the log-likelihood score of each sample (log-pdf) under the model.
u and v are bivariate inputs (u, v) where each row represents a bivariate observation. Both u and v must be in the interval [0, 1], having been transformed to uniform marginals.
Parameters:
NameTypeDefaultDescription
utp.Array1d--The first component of the bivariate input.
vtp.Array1d--The second component of the bivariate input.
best_fitboolFalseApply best fitted rotation. Defaults to False.
Returns:
TypeDescription
tp.Array1dThe log-likelihood score of each sample under the fitted copula.
Raises:
TypeDescription
AssertionErroru and v must have the same shape.
AssertionErrorJoe Kendall’s tau must be in (0, 1).