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

Illustration
P. Shankar - 2022-03-31T11:22:56+00:00
Question: How can I generate two correlated random vectors with values drawn from a normal distribution?

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

Expert Answer

Profile picture of Kshitij Singh Kshitij Singh answered . 2025-11-20

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.


Not satisfied with the answer ?? ASK NOW

Get a Free Consultation or a Sample Assignment Review!