May I ask how to generate a low-rank sparse covariance matrix? Thank you!
2 Answers
You could start from a covariance graph, and use the algorithm described in appendix A of Model-based clustering with sparse covariance matrices. This algorithm guarantees the covariance matrix positive definite; the graph gives the rank and degree of sparseness.
-
$\begingroup$ OP wants a low-rank matrix, so it cannot be positive definite. $\endgroup$ Commented Jun 1 at 22:51
Matlab's sprandsym
generates a random sparse positive-definite matrix by starting from a diagonal matrix and applying to it Jacobi rotations, i.e., rotation matrices that act only on two components. In this way you can also prescribe its eigenvalues.
You could follow a similar strategy for your task, even if your matrix is not PD.
If your definition of "covariance matrix" also requires the diagonal entries to be 1, you can apply a diagonal scaling to enforce it.