Generate a positive definite matrix/covariance matrix.
genPositiveDefMat(
dim,
covMethod = c("eigen", "onion", "c-vine", "unifcorrmat"),
eigenvalue = NULL,
alphad = 1,
eta = 1,
rangeVar = c(1, 10),
lambdaLow = 1,
ratioLambda = 10)
eigenvalues of Sigma
positive definite matrix/covariance matrix
Dimension of the matrix to be generated.
Method to generate positive definite matrices/covariance matrices. Choices are “eigen”, “onion”, “c-vine”, or “unifcorrmat”; see details below.
numeric. user-specified eigenvalues when covMethod = "eigen"
. If eigenvalue = NULL
and covMethod = "eigen"
, then eigenvalues will be automatically generated.
parameter for unifcorrmat method to generate random correlation matrix
alphad=1
for uniform. alphad
should be positive.
parameter for “c-vine” and “onion” methods to generate random correlation matrix
eta=1
for uniform. eta
should be positive.
Range for variances of a covariance matrix (see details). The default range is \([1, 10]\) which can generate reasonable variability of variances.
Lower bound on the eigenvalues of cluster covariance matrices.
If the argument covMethod="eigen"
, eigenvalues are generated for cluster covariance matrices.
The eigenvalues are randomly generated from the
interval [lambdaLow
, lambdaLow
\(*\)ratioLambda
].
In our experience, lambdaLow
\(=1\) and ratioLambda
\(=10\)
can give reasonable variability of the diameters of clusters.
lambdaLow
should be positive.
The ratio of the upper bound of the eigenvalues to the lower bound of the
eigenvalues of cluster covariance matrices. See lambdaLow
.
Weiliang Qiu weiliang.qiu@gmail.com
Harry Joe harry@stat.ubc.ca
The current version of the function genPositiveDefMat
implements four
methods to generate random covariance matrices. The first method, denoted by
“eigen”, first randomly generates eigenvalues
(\(\lambda_1,\ldots,\lambda_p\)) for the covariance matrix
(\(\boldsymbol{\Sigma}\)), then
uses columns of a randomly generated orthogonal matrix
(\(\boldsymbol{Q}=(\boldsymbol{\alpha}_1,\ldots,\boldsymbol{\alpha}_p)\))
as eigenvectors. The covariance matrix \(\boldsymbol{\Sigma}\) is then
contructed as
\(\boldsymbol{Q}*diag(\lambda_1,\ldots,\lambda_p)*\boldsymbol{Q}^T\).
The remaining methods, denoted as “onion”, “c-vine”, and “unifcorrmat”
respectively, first generates a random
correlation matrix (\(\boldsymbol{R}\)) via the method mentioned and proposed in Joe (2006),
then randomly generates variances (\(\sigma_1^2,\ldots,\sigma_p^2\)) from
an interval specified by the argument rangeVar
. The covariance matrix
\(\boldsymbol{\Sigma}\) is then constructed as
\(diag(\sigma_1,\ldots,\sigma_p)*\boldsymbol{R}*diag(\sigma_1,\ldots,\sigma_p)\).
Joe, H. (2006) Generating Random Correlation Matrices Based on Partial Correlations. Journal of Multivariate Analysis, 97, 2177--2189.
Ghosh, S., Henderson, S. G. (2003). Behavior of the NORTA method for correlated random vector generation as the dimension increases. ACM Transactions on Modeling and Computer Simulation (TOMACS), 13(3), 276--294.
Kurowicka and Cooke, 2006. Uncertainty Analysis with High Dimensional Dependence Modelling, Wiley, 2006.
genPositiveDefMat(
dim = 4,
covMethod = "unifcorrmat")
aa <- genPositiveDefMat(
dim = 3,
covMethod = "eigen",
eigenvalue = c(3, 2, 1))
print(aa)
print(eigen(aa$Sigma))
Run the code above in your browser using DataLab