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

1 |

`...` |
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. |

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).

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.

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

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")
``` |

Questions? Problems? Suggestions? Tweet to @rdrrHQ or email at ian@mutexlabs.com.

All documentation is copyright its authors; we didn't write any of that.