Generating a string of random standard normal variables that are correlated

8 vues (au cours des 30 derniers jours)
Hi Everyone,
I'm a sort of newbie, I would like to know how and what the implications are of 'Generating a string of random standard normal variables that are correlated with each other'.
To get by this problem, I have been generating and correlating my desired sequence to a different random variable and then calculating the correlation between my sequence.
Thanks for the anticipated answer.
ps: Generate random standard normal's A, B, C, D so that have a correlation and standard deviation of corr and std.
Thanks again

Réponse acceptée

Daniel Shub
Daniel Shub le 6 Déc 2011
I am not sure if this is homework or not ...
Start off with two independent random variables with zero mean and standard deviation sigma.
sigma = 10;
X = sigma*randn(1e7, 1);
Y = sigma*randn(1e7, 1);
Then make two new random variables from these with correlation rho.
rho = 0.2;
A = X;
B = sqrt(rho^2)*X+sqrt(1-rho^2)*Y;
[std(A), std(B)]
corrcoef(A, B)
When you add a third random variable C you need to specify what you want rho_AB, rho_AC, and rho_AB to be. The basic idea is the same: start with N independent random variables and add them together with appropriate weighting to get N new random variables.
  3 commentaires
Daniel Shub
Daniel Shub le 6 Déc 2011
I am very lost. It is odd to talk about the correlation between scalars like A_i and B_j. I think what you are asking is to create 5 random processes which have a particular covariance and then you want 1 value from each process. My answer provides 2 random processes which each have 1e7 values. If you extend it to 5 terms (A,B,C,D,E) then you can do a = A(i), b = B(j), c = C(k) ... and I think what you want is [a,b,c,d,e]. Of course if you only want 1 value, you do not need to generate 1e7 values.
Alexander Knetsch
Alexander Knetsch le 10 Nov 2020
The equation is quite good already, it doesn't allow for a negative corellation. If you change the expression for B, you can allow for this:
B = (rho/abs(rho))*sqrt(rho^2)*X+sqrt(1-rho^2)*Y;

Connectez-vous pour commenter.

Plus de réponses (2)

Oleg Komarov
Oleg Komarov le 6 Déc 2011
Given a correlation matrix C = A*A', then A = P*sqrt(D), where:
[P,D] = eig(C); % spectral decomposition
To get the correlated normal random series Z, use W = (W1, ...,W2)' (the normal random series):
Z = A*W;
Note that if you have 4 variables, then C is 4 by 4, and W should be 4 by nobs.
  1 commentaire
Natialol
Natialol le 6 Déc 2011
I'm trying to read up on the answer and will accept as soon as I understand that it does the above. Please can you also comment on the above question to Daniel?

Connectez-vous pour commenter.


Chet Sharma
Chet Sharma le 30 Jan 2018
I think you should refer Hull's option book. In the 8th edition, chapter 20, page 450, I believe you will find out answer. He describes something called a "Cholesky decomposition" that is needed to generate the "correct" correlation matrix......

Catégories

En savoir plus sur Random Number Generation dans Help Center et File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by