Learn R Programming

copBasic (version 2.0.1)

isfuncCOP: Is a General Bivariate Function a Copula by Gridded Search?

Description

Is a general bivariate function a copula? Three properties are identified by Nelsen (2006, p. 10) for a bivariate copula $\mathbf{C}(u,v)$: $$\mathbf{C}(u,0) = 0 = \mathbf{C}(0,v)\mbox{\quad Nelsen 2.2.2a,}$$ $$\mathbf{C}(u,1) = u \mbox{\ and\ } \mathbf{C}(1,v) = v\mbox{\quad Nelsen 2.2.2b, and}$$ for every $u_1, u_2, v_1, v_2$ in $\mathcal{I}^2$ such that $u_1 \le u_2$ and $v_1 \le v_2$, $$\mathbf{C}(u_2, v_2) - \mathbf{C}(u_2, v_1) - \mathbf{C}(u_1, v_2) + \mathbf{C}(u_1, v_1) \ge 0 \mbox{\quad Nelsen 2.2.2c.}$$ The last condition is known also as 2-increasing. The isfuncCOP works along a gridded search in the domain $\mathcal{I}^2 = [0,1]\times[0,1]$ for the 2-increasing check with a resolution $\Delta u = \Delta v$ $=$ delta. Because there are plenty of true copula functions available in the literature it seems unlikely that this function provides much production utility in investigations. This function is provided because part of the objectives of the copBasic package is for instructional purposes. The computational overhead is far too great for relative benefit to somehow dispatch to this function using the other copula utilities in this package.

Usage

isfuncCOP(cop=NULL, para=NULL, delta=0.002, ...)

Arguments

cop
A potential bivariate copula function that accepts two arguments for the $u$ and $v$ and parameters along argument para with option of additional arguments through ...;
para
Vector of parameters or other data structure, if needed, to pass to the copula;
delta
The $\Delta u = \Delta v$ of the grid edges; and
...
Additional arguments to pass to the copula function.

Value

  • A logical value of TRUE or FALSE is returned.

encoding

utf8

References

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

See Also

densityCOP

Examples

Run this code
"NelsenEx2.11" <- function(u,v, ...) { # Nelsen (2006, exer. 2.11, p. 16)
  if(length(u) > 1 & length(v) > 1 & length(u) != length(v)) return(NA)
  if(length(u) == 1) u <- rep(u, length(v))
  if(length(v) == 1) v <- rep(v, length(u))
  return(sapply(1:length(u), function(i) { upv <- u[i] + v[i]
                 if(2/3 <= upv & upv <= 4/3) return(min(c(u,v,1/3,upv-(2/3))))
                 max(u[i]+v[i]-1, 0) }))
}
isfuncCOP(cop=NelsenEx2.11) # FALSE

Run the code above in your browser using DataLab