Generating a string of random standard normal variables that are correlated
8 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Natialol
am 6 Dez. 2011
Kommentiert: Garrison Greenwood
am 24 Feb. 2021
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
0 Kommentare
Akzeptierte Antwort
Daniel Shub
am 6 Dez. 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 Kommentare
Daniel Shub
am 6 Dez. 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
am 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;
Weitere Antworten (2)
Oleg Komarov
am 6 Dez. 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.
Chet Sharma
am 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......
1 Kommentar
Siehe auch
Kategorien
Mehr zu Random Number Generation finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!