prod2COP {copBasic} | R Documentation |
The Product of Two Copulas
Description
Perform copula multiplication (so-called “-product” or Markov Product) (Darsow and others, 1992) is a continuous analog of matrix multiplication and yields another copula:
for copulas and
are copulas whose
-product yields copula
in terms of partial derivatives (
derCOP
and derCOP2
) of the other two. Nelsen (2006, p. 245) lists several identities of the -product involving the product (
;
P
), lower bound (;
W
), and upper bound (;
M
) copulas:
where is the survival copula (
surCOP
). The -product is associative:
but -product is not commutative (order independent). Nelsen (2006, p. 245) reports that “if we view
as a binary operation on the set of copulas, then
is the null element, and
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 |
v |
Nonexceedance probability |
cop1 |
The |
para1 |
Vector of parameters or other data structures for |
cop2 |
The |
para2 |
Vector of parameters or other data structures for |
para |
An R |
pinterval |
An optional interval for the above integral. The default is |
... |
Additional arguments to pass to the copulas. |
Value
Value(s) for the copula are returned.
Note
The Farlie–Gumbel–Morgenstern copula (;
FGMcop
) is
where . Nelsen (2006, exer. 6.12, p. 249) asserts that for
and
with
-product as
that a closed-form solution exists and is
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, 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)