I want to generate uniform random variables which have a correlation structure defined by a graph i.e. a variable is only correlated with its neighbors in the graph and is uncorrelated with the rest conditional on its neighbors.

It seems that I should specify this as a precision matrix (and not a correlation matrix) with 0s entries for non-neighbors of a node; for simplicity lets also assume that the non-zero entries are distributed $\mathcal{U}(0,1)$. This is so since the precision matrix implies partial correlations and that's what I should target as having 0 correlations in a graph. I hope that makes sense?

So, I have been thinking of this problem as a copula with margins given by uniform and the joint also a uniform with the correlation matrix as the inverse of the precision matrix above.


1). The results that I get don't seem to show the desired correlation structure.

2). It is computationally inefficient to invert a 50k*50k matrix in R.

Any thoughts on how I could efficiently do this while also assuring that the correlation matrix stays positive definite?

  • 2
    $\begingroup$ I would suggest a Gibbs sampling strategy as it breaks the dimension problem into a sequence of much smaller problems thanks to the conditional independence provided by the correlation matrix. $\endgroup$
    – Xi'an
    Jan 29, 2015 at 13:20
  • 1
    $\begingroup$ @Xi'an: Thanks! Can you please be a bit more specific? $\endgroup$ Jan 29, 2015 at 13:22


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.