Learn R Programming

copBasic (version 2.0.1)

simCOP: Simulate a Copula by Numerical Derivative Method

Description

Perform a simulation and visualization of a copula by numerical derivatives of the copula (Nelsen, 2006, p. 32). The method is more broadly known as conditional simulation method. This function is the parametric parallel to the empirical copula simulator EMPIRsim. Because a focus of copBasic is on copula theory for pedagogic purposes, the coupling between simulation and subsequent visualization is emphasized by this function by it providing for both simulation and plotting by default.

The simCOP function is based on a uniformly simulating nonexceedance probability $u$ and then conditioning the $v$ from the inverse of the sectional derivative for $V$ with respect to $U$ (see derCOPinv). The function for speed will only report a warning if at least one of the requested simulations in n could not be made because of uniroot'ing problems in derCOPinv. The returned data.frame will be shortened automatically but can be controlled by na.rm. Failure of a simulation is purely dependent on the derivative inversion, which should be quite robust for continuous or near continuous copulas and even copulas with singularities should be more or less okay. Lastly, the logical combination na.rm=FALSE and keept=TRUE could be used to isolate those combinations giving derCOPinv problems. The implemented simulation method in the copBasic package is known as the conditional distribution method (Nelsen, 2006; pp. 40--41), conditional method, or Rosenblatt transform (Joe, 2014, p. 270).

Usage

simCOP(n=100, cop=NULL, para=NULL, na.rm=TRUE, keept=FALSE,
              graphics=TRUE, ploton=TRUE, points=TRUE, snv=FALSE,
              infsnv.rm=TRUE, trapinfsnv=.Machine$double.eps, ...)

Arguments

n
A sample size, default is $n = 100$;
cop
A copula function;
para
Vector of parameters, if needed, to pass to the copula;
na.rm
A logical to toggle the removal of NA entries on the returned data.frame;
keept
Keep the $t$ uniform random variable for the simulation as the last column in the returned data.frame;
graphics
A logical that will disable graphics by setting ploton and points to FALSE and overriding whatever their settings were;
ploton
A logical to toggle on the plot (see Examples in vuongCOP);
points
A logical to actually draw the simulations by the points() function in R;
snv
A logical to convert the ${u,v}$ to standard normal scores (variates) both for the optional graphics and the returned Rdata.frame. Curiously, Joe (2014) advocates extensively for use of normal scores, which is in contrast to Nelsen (2006) who
infsnv.rm
A logical that will quietly strip out any occurrences of $u = {0,1}$ or $v = {0,1}$ from the simulations because these are infinity in magnitude when converted to standard normal variates is to occur. Thus, this logical only impacts logic flow when
trapinfsnv
If TRUE and presumably small, the numerical value of this argument ($\eta$) is used to replace $u = {0,1}$ and $v = {0,1}$ with $u(0) = v(0) = \eta$ or $u(1) = v(1) = 1 - \eta$ as appropriate when conversion to standard normal variates is to
...
Additional arguments to pass to the points() function in R.

Value

  • An Rdata.frame of the simulated values is returned.

concept

  • conditional approach
  • Rosenblatt transform

References

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

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

See Also

derCOPinv, simCOPmicro

Examples

Run this code
simCOP(n=5, cop=PARETOcop, para=2.4)

# The simCOP function is oft used in other Examples sections through this package.
simCOP(n=10, cop=W)            # Frechet lower bound copula
simCOP(n=10, cop=P)            # Independence copula
simCOP(n=10, cop=M, col=2)     # Frechet upper bound copula
simCOP(n=10, cop=PSP)          # The PSP copula

# Now simulate the PSP copula, add the level curves of the copula, and demonstrate
# the uniform distribution of marginals on the correct axes (U [top] and V [left]).
D <- simCOP(n=400, cop=PSP) # store simulated values in D
level.curvesCOP(cop=PSP, ploton=FALSE)
rug(D$U, side=3, col=2); rug(D$V, side=4, col=2)

# Now let us get more complicated and mix two Plackett copulas together using the
# composite2COP as a "compositor." The parameter argument becomes more complex, but
# is passed as shown into composite2COP.
para <- list(cop1=PLACKETTcop,cop2=PLACKETTcop, alpha=0.3,beta=0.5, para1=0.1,para2=50)
D <- simCOP(n=950, cop=composite2COP, para=para, col=rgb(0,0,0,0.2), pch=16, snv=TRUE)#

Run the code above in your browser using DataLab