I am implementing a Monte Carlo simulation in R to generate multivariate correlated returns. In doing this I have used the Cholesky decomposition, applied to the covariance matrix. However, I saw that the Cholesky decomposition could be applied also to the correlation matrix. Which is the appropriate approach?


1 Answer 1


You should apply it to the covariance matrix and from that compute the correlation matrix. Here's an example correlating 3 random normal variables.


$$ \bf Y \sim \mathcal N(0, \Sigma) $$

where $\textbf{Y} = (Y_1,\dots,Y_n)$ is the vector of normal random variables, and $\Sigma$ the given covariance matrix.

The process is:

  1. Simulate a vector of uncorrelated Gaussian random variables, $\bf Z $
  2. Then find a square root of $\Sigma$, i.e. a matrix $\bf C$ such that $\bf C \bf C^\intercal = \Sigma$.

Then the target vector is given by $$ \bf Y = \bf C \bf Z. $$

Here is a dummy matlab code:

N = 500000
u_1 = normrnd(zeros(N,1),1);
u_2 = normrnd(zeros(N,1),1);
u_3 = normrnd(zeros(N,1),1);
u_4 = normrnd(zeros(N,1),1);

rv = [u_1 '; u_2'; u_3'; u_4'];

VarCov = [Some positive semi-definite matrix here 4x4];

ch = chol(VarCov);
result = ch * rv;

Then just divide each entry of the result matrix by the product of the standard deviations to get a correlation matrix.

  • $\begingroup$ Thanks a lot for your answer.This is exactly how i´ve done it. So just to be sure, the generate time series could be considered as forecasted values (simulated) in which the historical correlation of time series is taken into account. Please correct me if i am wrong. Thank you. $\endgroup$
    – alexandra
    Commented Jun 5, 2018 at 10:56

Your Answer

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

Not the answer you're looking for? Browse other questions tagged or ask your own question.