MATLAB Answers

How to find the correlation between two random numbers

25 ビュー (過去 30 日間)
Trond Oesten
Trond Oesten 2015 年 2 月 24 日
コメント済み: Greig 2015 年 2 月 25 日
I want to give a specific correlation between two random numbers. I am using them to find the inverse lognormal distribution, so they have to remain between 0 and 1. How can I do this?
N = 10;
ro = 0.75; %correlation between random numbers
f = rand(N,2);
mu7 = 0.84208;
su7 = 0.3852;
my7 = 0.688;
sy7 = 0.09975;
j = f(:,1);
g = f(:,2);
epy = logninv(j,my7,sy7);
epu_y = logninv(g,mu7,su7);
epu = epu_y + epy;


Greig 2015 年 2 月 24 日
編集済み: Greig 2015 年 2 月 25 日
If you have two uncorrelated normally distributed random numbers, given by x, you can use the following to determine Y, which will be correlated with x(:,1)....
R0 = 0.75;
corr(x(:,1), x(:,2))
corr(x(:,1), Y)
It also appears to work well if x is from a uniform distribution, but the returned results are no longer uniformly distributed.
R0 = 0.75;
corr(x(:,1), x(:,2))
corr(x(:,1), Y)
It should be noted that the real correlation between x(:,1) and Y can vary significantly from R0 if N is small, also it works less well if x(:,1) and x(:,2) are coincidently correlated.
There are ways of doing this with Cholesky and eignevector decomposition, but I can't remember them off the top of my head.
As John pointed out, the about solution does not maintain the uniformity of the random numbers after adjusted for correlations. I have attached a function that I sometimes use for this purpose, which does return uniform results
This is based on an example script provided here
  3 件のコメント
Greig 2015 年 2 月 25 日
The answer has been updated with a script that returns uniformly distributed results


その他の回答 (0 件)

Community Treasure Hunt

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

Start Hunting!

Translated by