# cornode: Builds a Rank Correlation using the Iman and Connover Method. In mc2d: Tools for Two-Dimensional Monte-Carlo Simulations

## Description

This function builds a rank correlation structure between columns of a matrix or between mcnode objects using the Iman and Connover method (1982).

## Usage

 `1` ```cornode(..., target, outrank=FALSE, result=FALSE, seed=NULL) ```

## Arguments

 `...` A matrix (each of its n columns but the first one will be reordered) or n mcnode objects (each elements but the first one will be reordered). `target` A scalar (only if n=2) or a (n x n) matrix of correlation. `outrank` Should the order be returned? `result` Should the correlation eventually obtained be printed? `seed` The random seed used for building the correlation. If NULL the seed is unchanged.

## Details

The arguments should be named.

The function accepts for data a matrix or:

• some "V" mcnode objects separated by a comma;

• some "U" mcnode objects separated by a comma;

• some "VU" mcnode objects separated by a comma. In that case, the structure is built columns by colums (the first column of each "VU" mcnode will have a correlation structure, the second ones will have a correlation structure, ....).

• one "V" mcnode as a first element and some "VU" mcnode objects, separated by a comma. In that case, the structure is built between the "V" mcnode and each column of the "VU" mcnode objects. The correlation result (result = TRUE) is not provided in that case.

The number of variates of the elements should be equal.

target should be a scalar (two columns only) or a real symmetric positive-definite square matrix. Only the upper triangular part of target is used (see `chol`).

The final correlation structure should be checked because it is not always possible to build the target correlation structure.

In a Monte-Carlo simulation, note that the order of the values within each mcnode will be changed by this function (excepted for the first one of the list). As a consequence, previous links between variables will be broken. The outrank option may help to rebuild these links (see the Examples).

## Value

If rank = FALSE: the matrix or a list of rearranged mcnodes.

If rank = TRUE: the order to be used to rearranged the matrix or the mcnodes to build the desired correlation structure.

## References

Connover W., Iman R. (1982). A distribution-free approach to inducing rank correlation among input variables. Technometric, 3, 311-334.

## Examples

 ``` 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34``` ```x1 <- rnorm(1000) x2 <- rnorm(1000) x3 <- rnorm(1000) mat <- cbind(x1, x2, x3) ## Target (corr <- matrix(c(1, 0.5, 0.2, 0.5, 1, 0.2, 0.2, 0.2, 1), ncol=3)) ## Before cor(mat, method="spearman") matc <- cornode(mat, target=corr, result=TRUE) ## The first row is unchanged all(matc[, 1] == mat[, 1]) ##Using mcnode and outrank cook <- mcstoc(rempiricalD, values=c(0, 1/5, 1/50), prob=c(0.027, 0.373, 0.600), nsv=1000) serving <- mcstoc(rgamma, shape=3.93, rate=0.0806, nsv=1000) roundserv <- mcdata(round(serving), nsv=1000) ## Strong relation between roundserv and serving (of course) cor(cbind(cook, roundserv, serving), method="spearman") ##The classical way to build the correlation structure matcorr <- matrix(c(1, 0.5, 0.5, 1), ncol=2) matc <- cornode(cook=cook, roundserv=roundserv, target=matcorr) ## The structure between cook and roundserv is OK but ... ## the structure between roundserv and serving is lost cor(cbind(cook=matc\$cook, serv=matc\$roundserv, serving), method="spearman") ##An alternative way to build the correlation structure matc <- cornode(cook=cook, roundserv=roundserv, target=matcorr, outrank=TRUE) ## Rebuilding the structure roundserv[] <- roundserv[matc\$roundserv, , ] serving[] <- serving[matc\$roundserv, , ] ## The structure between cook and roundserv is OK and ... ## the structure between roundserv and serving is preserved cor(cbind(cook, roundserv, serving), method="spearman") ```

mc2d documentation built on May 31, 2017, 5:01 a.m.