Learn R Programming

copBasic (version 2.0.1)

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.

Usage

derCOPinv2(cop=NULL, v, t, 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$;
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
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
# 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