Title: | Generate a Random p x p Correlation Matrix |
---|---|
Description: | Implements the algorithm by Pourahmadi and Wang (2015) <doi:10.1016/j.spl.2015.06.015> for generating a random p x p correlation matrix. Briefly, the idea is to represent the correlation matrix using Cholesky factorization and p(p-1)/2 hyperspherical coordinates (i.e., angles), sample the angles from a particular distribution and then convert to the standard correlation matrix form. The angles are sampled from a distribution with pdf proportional to sin^k(theta) (0 < theta < pi, k >= 1) using the efficient sampling algorithm described in Enes Makalic and Daniel F. Schmidt (2018) <arXiv:1809.05212>. |
Authors: | Daniel F. Schmidt [aut, cph, cre], Enes Makalic [aut, cph] |
Maintainer: | Daniel F. Schmidt <[email protected]> |
License: | GPL (>= 3) |
Version: | 1.0 |
Built: | 2024-12-23 06:40:23 UTC |
Source: | CRAN |
This package contains a function to generate a random p x p correlation matrix. This function implements the algorithm by Pourahmadi and Wang [1] for generating a random p x p correlation matrix. Briefly, the idea is to represent the correlation matrix using Cholesky factorization and p(p-1)/2 hyperspherical coordinates (i.e., angles), sample the angles from a particular distribution and then convert to the standard correlation matrix form. The angles are sampled from a distribution with a probability density function proportional to sin^k(theta) (0 < theta < pi, k >= 1) using the efficient sampling algorithm described in [2].
For usage, see the examples in randcorr
and randcorr.sample.sink
.
To cite this package please reference:
Makalic, E. & Schmidt, D. F. An efficient algorithm for sampling from sin^k(x) for generating random correlation matrices arXiv:1809.05212, 2018 https://arxiv.org/abs/1809.05212
A MATLAB-compatible implementation of the sampler in this package can be obtained from:
https://au.mathworks.com/matlabcentral/fileexchange/68810-randcorr
Daniel Schmidt [email protected]
Faculty of Information Technology, Monash University, Australia
Enes Makalic [email protected]
Centre for Epidemiology and Biostatistics, The University of Melbourne, Australia
[1] Mohsen Pourahmadi and Xiao Wang, Distribution of random correlation matrices: Hyperspherical parameterization of the Cholesky factor, Statistics & Probability Letters, Volume 106, Pages 5-12, 2015.
[2] Enes Makalic and Daniel F. Schmidt An efficient algorithm for sampling from sin^k(x) for generating random correlation matrices, arXiv:1809.05212, 2018.
randcorr
, randcorr.sample.sink
Generate a random p x p correlation matrix
randcorr(p)
randcorr(p)
p |
A scalar positive integer denoting the size of the correlation matrix |
A random p x p correlation matrix
This function implements the algorithm by Pourahmadi and Wang [1] for generating a random p x p correlation matrix. Briefly, the idea is to represent the correlation matrix using Cholesky factorization and p(p-1)/2 hyperspherical coordinates (i.e., angles), sample the angles form a particular distribution and then convert to the standard correlation matrix form. The angles are sampled from a distribution with probability density function sin^k(theta) (0 < theta < pi, k >= 1) using the efficient sampling algorithm described in [2].
To cite this package please reference:
Makalic, E. & Schmidt, D. F. An efficient algorithm for sampling from sin^k(x) for generating random correlation matrices arXiv:1809.05212, 2018 https://arxiv.org/abs/1809.05212
A MATLAB-compatible implementation of the sampler in this package can be obtained from:
https://au.mathworks.com/matlabcentral/fileexchange/68810-randcorr
[1] Mohsen Pourahmadi and Xiao Wang, Distribution of random correlation matrices: Hyperspherical parameterization of the Cholesky factor, Statistics & Probability Letters, Volume 106, Pages 5-12, 2015.
[2] Enes Makalic and Daniel F. Schmidt An efficient algorithm for sampling from sin^k(x) for generating random correlation matrices, arXiv:1809.05212, 2018.
# ----------------------------------------------------------------- # Example 1: Generate a 5x5 correlation matrix C = randcorr(5) # Example 2: Generate a 1000x1000 correlation matrix C = randcorr(1000)
# ----------------------------------------------------------------- # Example 1: Generate a 5x5 correlation matrix C = randcorr(5) # Example 2: Generate a 1000x1000 correlation matrix C = randcorr(1000)
Sample from the (unnormalized) distribution sin(x)^k, 0 < x < pi, k >= 1
randcorr.sample.sink(k)
randcorr.sample.sink(k)
k |
The |
A vector of samples with length equal to the length of k
This code generates samples from the sin(x)^k distribution using the specified vector k
.
Enes Makalic and Daniel F. Schmidt An efficient algorithm for sampling from sin^k(x) for generating random correlation matrices, arXiv:1809.05212, 2018.
# ----------------------------------------------------------------- # Example 1: Draw a random variate from sin(x), 0<x<pi x = randcorr.sample.sink(1) # Example 2: Draw a million random variate from sin^3(x), 0<x<pi x = randcorr.sample.sink( matrix(3, 1e6,1) ) mean(x) var(x)
# ----------------------------------------------------------------- # Example 1: Draw a random variate from sin(x), 0<x<pi x = randcorr.sample.sink(1) # Example 2: Draw a million random variate from sin^3(x), 0<x<pi x = randcorr.sample.sink( matrix(3, 1e6,1) ) mean(x) var(x)