# ordcont: Computing the "intermediate" correlation matrix for the... In GenOrd: Simulation of Discrete Random Variables with Given Correlation Matrix and Marginal Distributions

## Description

The function computes the correlation matrix of the k-dimensional standard normal r.v. yielding the desired correlation matrix `Sigma` for the k-dimensional r.v. with desired marginal distributions `marginal`

## Usage

 ```1 2``` ```ordcont(marginal, Sigma, support = list(), Spearman = FALSE, epsilon = 1e-06, maxit = 100) ```

## Arguments

 `marginal` a list of k elements, where k is the number of variables. The i-th element of `marginal` is the vector of the cumulative probabilities defining the marginal distribution of the i-th component of the multivariate variable. If the i-th component can take k_i values, the i-th element of `marginal` will contain k_i-1 probabilities (the k_i-th is obviously 1 and shall not be included). `Sigma` the target correlation matrix of the discrete variables `support` a list of k elements, where k is the number of variables. The i-th element of `support` is the vector containing the ordered values of the support of the i-th variable. By default, the support of the i-th variable is 1,2,...,k_i `Spearman` if `TRUE`, the function finds Spearman's correlations (and it is not necessary to provide `support`), if `FALSE` (default) Pearson's correlations `epsilon` the maximum tolerated error between target and actual correlations `maxit` the maximum number of iterations allowed for the algorithm

## Value

a list of five elements

 `SigmaC` the correlation matrix of the multivariate standard normal variable `SigmaO` the actual correlation matrix of the discretized variables (it should approximately coincide with the target correlation matrix `Sigma`) `Sigma` the target correlation matrix of the discrete variables `niter` a matrix containing the number of iterations performed by the algorithm, one for each pair of variables `maxerr` the actual maximum error (the maximum absolute deviation between actual and target correlations of the discrete variables)

## Note

For some choices of `marginal` and `Sigma`, there may not exist a feasible k-variate probability mass function or the algorithm may not provide a feasible correlation matrix `SigmaC`. In this case, the procedure stops and exits with an error. The value of the maximum tolerated absolute error `epsilon` on the elements of the correlation matrix for the target r.v. can be set by the user: a value between 1e-6 and 1e-2 seems to be an acceptable compromise assuring both the precision of the results and the convergence of the algorithm; moreover, a maximum number of iterations can be chosen (`maxit`), in order to avoid possible endless loops

## Author(s)

Alessandro Barbiero, Pier Alda Ferrari

`contord`, `ordsample`, `corrcheck`
 ``` 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``` ```# consider a 4-dimensional ordinal variable k <- 4 # with different number of categories kj <- c(2,3,4,5) # and uniform marginal distributions marginal <- list(0.5, (1:2)/3, (1:3)/4, (1:4)/5) corrcheck(marginal) # and the following correlation matrix Sigma <- matrix(c(1,0.5,0.4,0.3,0.5,1,0.5,0.4,0.4,0.5,1,0.5,0.3,0.4,0.5,1), 4, 4, byrow=TRUE) Sigma # the correlation matrix of the standard 4-dimensional standard normal # ensuring Sigma is res <- ordcont(marginal, Sigma) res[] # change some marginal distributions marginal <- list(0.3, c(1/3, 2/3), c(1/5, 2/5, 3/5), c(0.1, 0.2, 0.4, 0.6)) corrcheck(marginal) # and notice how the correlation matrix of the multivariate normal changes... res <- ordcont(marginal, Sigma) res[] # change Sigma, adding a negative correlation Sigma[1,2] <- -0.2 Sigma[2,1] <- Sigma[1,2] Sigma # checking whether Sigma is still positive definite eigen(Sigma)\$values # all >0, OK res <- ordcont(marginal, Sigma) res[] ```