Generate random covariance matrices, and draw MVN samples using them.
genArray functions produce random covariance matrices
The eigenvalues (principal component variances) V for the covariance
matrix may be specified, or may be randomly generated from within a
specified range. A random orthogonal matrix Q is generated and its
columns used as eigenvectors. The covariance matrix is then generated
as S = Q V Q~
Given a covariance ndarray S, you can generate samples from the
associated multivariate normal distribution using the
function (which creates a function that draws samples from N(mean, S))
Samples x ~ N(0, S) are drawn by first drawing z ~ N(0, I) then transforming x = L z, where S = L L~.
var gencov = require('gencov'); // generate a 3-d correlation matrix with variances between 1 and 10, // and return it as an ndarray: var S = gencov.genS(3); // generate a 5-d correlation matrix with principal components, // return as a regular array var S = gencov.genArray([3, 2, 1, 0.5, 0.1]); // draw 10 3d samples from a N([a,b,c], S) distribution with random S, // return as an array of 3-vectors. var X = Array.apply(null, 10).map(mvnrnd([a,b,c], genS(3)))