generating correlated random variables

7 vues (au cours des 30 derniers jours)
Pooneh Shah Malekpoor
Pooneh Shah Malekpoor le 10 Mai 2021
Commenté : Jeff Miller le 6 Juin 2021
Hello
Though the subject might seem similar to other subjects available in this forum, it is indeed different. I am doing a Monte Carlo simulation. In each iteration, i have to consider the spatial variability of a parameter(e.g. C) along a curve. in fact, in each iteration the curve is divided to some segments and the random variables (C1,C2, C3, ...,C8) are assigned to each of these segments. Each of these C1, C2, ..,C7 have a lognormal distribution with the same parameters and there is only correlation between C7 and C8 with a correlation matrix like
rho = [ 1,0,0,0,0,0,0,0;
0,1,0,0,0,0,0,0;
0,0,1,0,0,0,0,0;
0,0,0,1,0,0,0,0;
0,0,0,0,1,0,0,0;
0,0,0,0,0,1,0,0;
0,0,0,0,0,0,1,0.2;
0,0,0,0,0,0,0.2,1]
How can i model such a process?
it is worthy to point that, there may be different numbers of random variables in other iterations of Monte carlo simulation (i.e. due to a different curve length) but they all have a lognormal distribution with the same parameters.
Any help/idea/recommendation is highly appreciated.
Best Regards

Réponse acceptée

Jeff Miller
Jeff Miller le 11 Mai 2021
Generate C1-C6 separately (independently) from whatever lognormal you want.
Then generate C7-C8 as a pair with the desired correlation. One easy way to do that is to first generate c7,c8 with mvnrnd and then form C7=exp(c7) and C8 = exp(c8). You just have to adjust the mu & sigma parameters of mvnrnd to get the desired distribution and correlation for C7 & C8,
  5 commentaires
Pooneh Shah Malekpoor
Pooneh Shah Malekpoor le 6 Juin 2021
Thanks! there is only one question about not getting the same correlation in the samples ( between lognormal C7 and C8). So, i googled a bit and saw there is a relationship for converting the autocorrelation coeffcieint (rhoN to rholn) as
rho(lnC7,lnC8)=(ln(1+rhoN*covC7*covC8))/sqrt(ln(1+covC7^2)(ln(1+covC8^2)))
when i input rholn in the following (instead of rhoN)
c7toc8 = mvnrnd([0 0],[1 rholn; rholn 1],n)*sigma + mu;
the correlation is the same as what i have already defined between C7 and C8.
Is it fine?
Jeff Miller
Jeff Miller le 6 Juin 2021
I am not familiar with that relationship/equation but it is fine if it gives you the correlation you want between C7 and C8.

Connectez-vous pour commenter.

Plus de réponses (0)

Community Treasure Hunt

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

Start Hunting!

Translated by