prod2COP: The Product of Two Copulas

prod2COPR Documentation

The Product of Two Copulas

Description

Perform copula multiplication (so-called “\ast-product” or Markov Product) (Darsow and others, 1992) is a continuous analog of matrix multiplication and yields another copula:

\bigl(\mathbf{C}_1 \ast \mathbf{C}_2 \bigr)(u,v) = \mathbf{C}_3(u,v) = \int_\mathcal{I} \frac{\delta \mathbf{C}_1(u, t)}{\delta v} \frac{\delta \mathbf{C}_2(t, v)}{\delta u}\,\mathrm{d}t\mbox{,}

for copulas \mathbf{C}_1(u, v) and \mathbf{C}_2(u, v) are copulas whose \ast-product yields copula \mathbf{C}_3(u, v) in terms of partial derivatives (derCOP and derCOP2) of the other two. Nelsen (2006, p. 245) lists several identities of the \ast-product involving the product (\mathbf{\Pi}; P), lower bound (\mathbf{W}; W), and upper bound (\mathbf{M}; M) copulas:

\mathbf{\Pi} \ast \mathbf{C} = \mathbf{C} \ast \mathbf{\Pi} = \mathbf{\Pi}\mbox{,}

\mathbf{M} \ast \mathbf{C} = \mathbf{C} \ast \mathbf{M} = \mathbf{M}\mbox{,}

\bigl(\mathbf{W} \ast \mathbf{C}\bigr)(u,v) = v - \mathbf{C}(1-u, v)\mbox{\ and\ } \bigl(\mathbf{C} \ast \mathbf{W}\bigr)(u,v) = u - \mathbf{C}(u, 1-v)\mbox{, and}

\mathbf{W} \ast \mathbf{W} = \mathbf{M}\mbox{ and } \mathbf{W} \ast \mathbf{C} \ast \mathbf{W} = \hat{\mathbf{C}}\mbox{,}

where \hat{\mathbf{C}} is the survival copula (surCOP). The \ast-product is associative:

\mathbf{A} \ast (\mathbf{B} \ast \mathbf{C}) = (\mathbf{A} \ast \mathbf{B}) \ast \mathbf{C}\mbox{,}

but \ast-product is not commutative (order independent). Nelsen (2006, p. 245) reports that “if we view \ast as a binary operation on the set of copulas, then \mathbf{\Pi} is the null element, and \mathbf{M} is the identity.” Copula mulitiplication is closely linked to Markov Processes (Nelsen, 2006, pp. 244–248).

For other descriptions and computations of copula combination are possible using the copBasic package, see convexCOP, convex2COP, composite1COP, composite2COP, composite3COP, glueCOP, and convexCOP.

Usage

prod2COP(u,v, cop1=NULL, para1=NULL, cop2=NULL, para2=NULL, para=NULL,
              pinterval=NULL, ...)

Arguments

u

Nonexceedance probability u in the X direction;

v

Nonexceedance probability v in the Y direction;

cop1

The \mathbf{C}_1(u,v; \Theta_1) copula function with vectorization as in asCOP;

para1

Vector of parameters or other data structures for \Theta_1, if needed, to pass to copula \mathbf{C}_1(u,v; \Theta_1);

cop2

The \mathbf{C}_2(u,v; \Theta_2) copula function with vectorization as in asCOP;

para2

Vector of parameters or other data structures for \Theta_2, if needed, to pass to copula \mathbf{C}_2(u,v; \Theta_2);

para

An R list that can take the place of the cop1, para1, cop2, and para2 arguments. These four will be populated from same named elements of the list, and if the other four arguments were specified through the function interface, these are silently ignored;

pinterval

An optional interval for the above integral. The default is \mathcal{I} = [0,1] but the option of the user to replace exact end points with “small” numbers is possible (e.g. interval=c(lo, 1-lo) for say lo=.Machine$double.eps). This interval is uniquely picked up for the interval in the above definition of prod2COP. The pinterval can also be set within the para and the function will pick it up from there; and

...

Additional arguments to pass to the copulas.

Value

Value(s) for the copula are returned.

Note

The Farlie–Gumbel–Morgenstern copula (\mathbf{FGM}(u,v; \Theta); FGMcop) is

\mathbf{FGM}(u,v; \Theta) = uv[1+\Theta(1-u)(1-v)]\mbox{,}

where -1 \le \Theta \le 1. Nelsen (2006, exer. 6.12, p. 249) asserts that for \mathbf{FGM}_{(\Theta = \alpha)} and \mathbf{FGM}_{(\Theta = \beta)} with \ast-product as \mathbf{FGM}_\alpha \ast \mathbf{FGM}_\beta that a closed-form solution exists and is

\mathbf{FGM}_\alpha \ast \mathbf{FGM}_\beta = \mathbf{FGM}_{(\alpha\beta) / 3}\mbox{.}

This assertion is numerically true as readily verified using the prod2COP function:

  u <- c(0.41, 0.87); v <- c(0.13,0.35); A <- -0.532; B <- 0.235
  FGMcop(  u,v, para= A*B / 3)
  # 0.0521598638574___   0.3034277347150___
  prod2COP(u,v, cop1=FGMcop, para1=A, cop2=FGMcop, para2=B)
  # 0.0521598638312605   0.3034277344807909

Author(s)

W.H. Asquith

References

Darsow, W.F., Nguyen, B., and Olsen, E.T., 1992, Copulas and Markov processes: Illinois Journal of Mathematics, v. 26, pp. 600–624, \Sexpr[results=rd]{tools:::Rd_expr_doi("10.1215/IJM/1255987328")}.

Nelsen, R.B., 2006, An introduction to copulas: New York, Springer, 269 p.

See Also

COP, composite1COP, composite2COP, composite3COP, convexCOP, convex2COP, glueCOP

Examples

## Not run: 
# Product P * N4212 ---> P (by identity)
u <- c(0.41, 0.87); v <- c(0.13, 0.35)
prod2COP(u,v, cop1=P, cop2=N4212cop, para1=NA, para2=2.12) # 0.0533 and 0.3045
COP(u,v, cop=P)                                            # 0.0533 and 0.3045
## End(Not run)

## Not run: 
para <- list(cop1=PLcop, para1=0.19, cop2=PLcop, para2=34.5)
UV <- simCOP(n=1000, cop=prod2COP, para=para, resamv01=FALSE, showresamv01=FALSE)
# This is large simulation run (with a lot of numerical operations) is expected
# at least for the Placketts and chosen parameters to trigger one or more NAs
# from derCOPinv(). The simCOP() function simply continues on with ignoring the
# solution or lack thereof for certain combinations, and simCOP() will report how
# many of the simulated values for sample of size n were computed. For example,
# for one n=1000, some 965 simulated values were returned. The defaults require
# that NAs, empty simulations, remain intact. We can try resampling:
UV <- simCOP(n=1000, cop=prod2COP, para=para, resamv01=TRUE, showresamv01=TRUE)
rhoCOP(cop=prod2COP, para=para) # -0.4271195 (theoretical)
rhoCOP(para=UV, as.sample=TRUE) # -0.4274703 #
## End(Not run)

## Not run: 
para <- list(cop1=PLcop, para1=0.19, cop2=PLcop, para2=34.5)
# The prod2COP() might be one of the more sensitive to NAs in simulation because
# of the two partial numerical derivatives involved.
para$pinterval <- c(0.4, 0.6) # totally inappropriate interval for the integral
# for the prod2COP() definition. Because the ... are used so extensively, we have
# the "pinterval" for this function so that interval itself can be passed also.
UV <- simCOP(n=1000, cop=prod2COP, para=para, resamv01=TRUE, showresamv01=TRUE,
                     pinterval=c(0,   1  ))
UV <- simCOP(n=1000, cop=prod2COP, para=para, resamv01=TRUE, showresamv01=TRUE,
                     pinterval=c(0.4, 0.6)) #
## End(Not run)

wasquith/copBasic documentation built on Dec. 13, 2024, 6:39 p.m.