Как генерировать гамма-случайные переменные с известными коэффициентами корреляции - PullRequest
1 голос
/ 01 октября 2019

Если я знаю коэффициент корреляции между любыми двумя гамма-случайными переменными Xi и Xj как rho_ij, мне интересно, как я могу сгенерировать набор из N гамма-распределенных случайных чисел X1...XN, используя MATLAB.

Например, моя матрица коэффициентов корреляции равна

rho=[1.0 0.5 0.7; 
     0.5 1.0 0.4; 
     0.7 0.4 1.0]

Тогда мне нужно X1, X2 и X3.

1 Ответ

0 голосов
/ 01 октября 2019

РЕДАКТИРОВАТЬ:

Как указано @PeterO и @pjs в комментариях, корреляция сохраняется только при линейных преобразованиях. Поскольку я применяю нелинейное преобразование, корреляция между переменными не соответствует желаемой корреляции.

Этот ответ не завершен.

Оригинальный ответ:

Используя gaminv, вы сможете преобразовать многовариантные нормальные случайные числа в гамма-единицу.

n   = 100;           % # of random number

mu  = [0,0,0];       % [muX1, muX2, muX3]

rho = [1.0 0.5 0.7; 
       0.5 1.0 0.4; 
       0.7 0.4 1.0]  % covariance matrix

Z = mvnrnd(mu, rho, n); %Generate multivariate corralated random number

U = normcdf(Z,0,1);     %Compute the CDF

%gamma distribution parameter 
a = 2
b = 1

%transform your normal multivariate number into gamma distribution with gaminv
X = [gaminv(U(:,1),a,b) gaminv(U(:,2),a,b) gaminv(U(:,3),a,b)];

% Variable extraction:
X1 = X(:,1);
X2 = ...

Результат, использующий только X1 и X2 и коэффициент ковариации 0,8:

enter image description here

...