How can I generate two correlated random vectors with values drawn from a normal distribution?

MathWorks Support Team (view profile)

on 25 Jan 2011
Accepted Answer by MathWorks Support Team

MathWorks Support Team (view profile)

I would like to generate two normally distributed random vectors with a specified correlation.

MathWorks Support Team (view profile)

on 25 Jan 2011

The idea is to generate a random matrix M with 2 columns (using RANDN) corresponding to the 2 vectors that are to exhibit the desired correlation. That is, the elements of these vectors are drawn from a standard normal distribution. Multiplying M with sigma and adding mu yields a matrix with values drawn from a normal distribution with mean mu and variance sigma^2.

As can be seen from the code below, the trick is to multiply M with the upper triangular matrix L obtained from the Cholesky decomposition of the desired correlation matrix R (which is trivially symmetric and positive definite) in order to set the correlation as needed. In this particular example, the desired correlation is 0.75.

```mu = 50
```
```sigma = 5
```
```M = mu + sigma*randn(1000,2);
```
```R = [1 0.75; 0.75 1];
```
```L = chol(R)
```
```M = M*L;
```
```x = M(:,1);
```
```y = M(:,2);
```
```corr(x,y)
```

The correlation of the resulting vectors can be verified with CORR.