copBasic (version 2.1.5)

derCOPinv2: Numerical Derivative Inverse of a Copula for U with respect to V

Description

Compute the inverse of a numerical partial derivative for \(U\) with respect to \(V\) of a copula, which is a conditional quantile function for nonexceedance probability \(t\), or $$t = c_v(u) = \mathbf{C}^{(-1)}_{1|2}(u|v) = \frac{\delta \mathbf{C}(u,v)}{\delta v}\mbox{,}$$ and solving for \(u\). Nelsen (2006, pp. 13, 40--41) shows that this inverse is quite important for random variable generation using the conditional distribution method. This function is not vectorized and will not be so.

Usage

derCOPinv2(cop=NULL, v, t, trace=FALSE,
           delv=.Machine$double.eps^0.50, para=NULL, ...)

Arguments

cop

A copula function;

v

A single nonexceedance probability \(v\) in the \(Y\) direction;

t

A single nonexceedance probability level \(t\);

trace

A logical controlling a message on whether the signs on the uniroot are the same---this is helpful in exploring the numerical derivative limits of a given implementation of a copula.

delv

The \(\Delta v\) interval for the derivative;

para

Vector of parameters or other data structure, if needed, to pass to cop; and

...

Additional arguments to pass to the copula.

Value

Value(s) for the derivative inverse are returned.

References

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

See Also

derCOP2

Examples

Run this code
# NOT RUN {
u <- runif(1); t <- runif(1)
derCOPinv2(u,t, cop=W)   # perfect negative dependence
derCOPinv2(u,t, cop=P)   # independence
derCOPinv2(u,t, cop=M)   # perfect positive dependence
derCOPinv2(u,t, cop=PSP) # a parameterless copula example
# }
# NOT RUN {
# Simulate 500 values from product (independent) copula
plot(NA,NA, type="n", xlim=c(0,1), ylim=c(0,1), xlab="U", ylab="V")
for(i in 1:500) {
   v <- runif(1); t <- runif(1)
   points(derCOPinv2(cop=P,v,t),v, cex=0.5, pch=16) # black dots
}
# Simulate 500 of a Frechet Family copula and note crossing singularities.
for(i in 1:500) {
   v <- runif(1); t <- runif(1)
   u <- derCOPinv2(v,t, cop=FRECHETcop, para=list(alpha=0.7, beta=0.169))
   points(u,v, cex=2, pch=16, col=2) # red dots
} #
# }

Run the code above in your browser using DataLab