Learn R Programming

copBasic (version 2.0.1)

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

Description

Compute the inverse of a numerical partial derivative for $V$ with respect to $U$ of a copula, which is a conditional quantile function for nonexceedance probability $t$, or $$t = c_u(v) = \mathbf{C}^{(-1)}_{2|1}(v|u) = \frac{\delta \mathbf{C}(u,v)}{\delta u}\mbox{,}$$ and solving for $v$. 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.

Usage

derCOPinv(cop=NULL, u, t, delu=.Machine$double.eps^0.50, para=NULL, ...)

Arguments

cop
A copula function;
u
A single nonexceedance probability $u$ in the $X$ direction;
t
A single nonexceedance probability level $t$;
delu
The $\Delta u$ interval for the derivative;
para
Vector of parameters or other data structures, if needed, to pass to cop; and
...
Additional arguments to pass to the copula.

Value

  • Value(s) for the derivative inverse are returned.

References

Durante, F., 2007, Families of copulas, Appendix C, in Salvadori, G., De Michele, C., Kottegoda, N.T., and Rosso, R., 2007, Extremes in Nature---An approach using copulas: Springer, 289 p.

Joe, H., 2014, Dependence modeling with copulas: Boca Raton, CRC Press, 462 p.

Johnson, M.E., 1987, Multivariate statistical simulation: New York, John Wiley, 230 p.

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

See Also

derCOP

Examples

Run this code
u <- runif(1); t <- runif(1)
derCOPinv(u,t, cop=W)   # perfect negative dependence
derCOPinv(u,t, cop=P)   # independence
derCOPinv(u,t, cop=M)   # perfect positive dependence
derCOPinv(u,t, cop=PSP) # a parameterless copula example
# 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) {
   u <- runif(1); t <- runif(1)
   points(u,derCOPinv(cop=P,u,t), cex=0.5, pch=16) # black dots
}
# Now simulate 500 from the Nelsen 4.2.12 copula.
for(i in 1:500) {
   u <- runif(1); t <- runif(1)
   points(u,derCOPinv(cop=N4212cop,para=9.3,u,t), cex=2, pch=16, col=2) # red dots
}

Run the code above in your browser using DataLab