Generate correlated random numbers precisely

1.6k Views Asked by At

Let's assume I want to generate k samples of n random numbers, that are correlated according to a given correlation matrix C (e.g. $n = 3$):

1    0.3  0.3
0.3    1  0.3
0.3  0.3    1

Using Cholesky Decomposition (Python implementation from NumPy), I can calculate L so $C = LL^T$:

L = [[ 1.          0.          0.        ]
     [ 0.3         0.9539392   0.        ]
     [ 0.3         0.22013982  0.92819096]]

Generating n (uncorrelated) random numbers (using numpy.random.normal($\mu$, $\sigma$)) and multiplying each the vector with L should result in one sample with n correlated random variables. – So far my understanding of the algorithm.

When I check the random numbers with SPSS, the "observed" correlations differ from the ones given in C. Example: I choose $n = 3$, $k = 10 000$ and $r = 0.99$. The observed correlations are:

     V1        V2        V3
V1     1          .774      .578
V2      .774     1          .443
V3      .578      .443     1

For my use-case I will need random numbers, that represent the given correlation matrix precisely. Did I make a mistake in this process or did I misunderstand the algorithm? Some insight is much appreciated.