Вопрос по r, matlab – Как генерировать многомерные случайные числа с различными маргинальными распределениями?

4

Я потерял идею, как генерировать некоторые двумерные случайные числа, скажем, в связке. Маргиналы имеют разное распределение, т.е. t, гамма, и структура соединения может быть гауссовой или t. Я должен исправить их кендалл тау. И я хочу исследовать, как Пирсон Ро этих случайных чисел отличается от заданного тау.

Любое предложение? Опытный образец в R / Matlab высоко ценится!

Для связок в R, вы можете взглянуть наcran.r-project.org/web/packages/copula/index.html Paul Hiemstra

Ваш Ответ

3   ответа
2

x2, вы можете использовать теорию связок для генерации случайных чисел. Таким образом, вы должны вычислить CDF переменных:

[Fi1, xi1] = ecdf(x1);

[Fi2, xi2] = ecdf(x2);

или же

Fi1 = ksdensity(x1,x1, 'function','cdf');

Fi2 = ksdensity(x2,x2, 'function','cdf');

Затем вы можете вычислить корреляцию тау Кендалла следующим образом:

tau = corr(x1,x2, 'type', 'kendall');

rho = copulaparam('t',tau, nu, 'type','kendall');

С помощью функции copularnd вы можете генерировать случайные значения (n = 1000) копулы Гаусса, t, Клейтона, Фрэнка или Гумбеля, а затем вам нужно только оценить обратный cdf копулы с целью желаемого распределения.

n = 1000;

U = copularnd('Gaussian',[1  rho;rho 1],n);

% Inverse cdf of Gamma distribution 

X1 = gaminv(U(:,1),2,1);

% Inverse cdf of Student's t distribution

X2 = tinv(U(:,2),5); 

или же

X1 = ksdensity(x1, U(:,1), 'function','icdf','width',.15);
X2 = ksdensity(x2, U(:,2), 'function','icdf','width',.15);

Итак, теперь X1 и X2 представляют новые случайные значения, которые были сгенерированы из начальных переменных x1 и x2.

Я новичок в статистике связок, так что извините, если я ошибся ..

4

вы можете генерировать случайные числа из связок, используя функциюcopularnd, Есть несколько примеров в документации. Чтобы переключиться между использованием тау Кендалла и Пирсона, посмотрите наcopulaparam а такжеcopulastat.

Error: User Rate Limit Exceeded onethird
1

связки не гарантируют точное попадание в желаемую целевую корреляцию. Эта производительность зависит от свойств предельных распределений.

Example 1: Использование обратного преобразования для маргиналов (экспоненциальная и Вейбулла)

rng(1776)   % Setting seed for reproducibility
lambda1 = 2; alpha1 = 2; beta = 3;
rho = 0.8; N = 10^5;

Z = mvnrnd([0 0],[1 rho; rho 1], N);
U = normcdf(Z);
X1 = (-1/lambda1)*log(U(:,1));  % Inverse Transform for Exponential
Y1 = beta*(-log(U(:,2))).^(1/alpha1);  % Inverse Transform for Weibull
corr(X1,Y1)
scatterhist(X1,Y1,'Direction','out','Marker','.','Color','b')

Gaussian Copula w/ Inverse Transform

Example 2: Использование числовой инверсии CDF для маргиналов (Gamma & Lognormal)

rng(1776)
alpha2 = 6.7; lambda2 = 3; 
mu = 0.1; sigma = 0.5;
rho = -0.8; N = 10^5;
% Make distributions
pd_X2 = makedist('Gamma',alpha2,lambda2);
pd_Y2 = makedist('Lognormal',mu,sigma);
Z = mvnrnd([0 0],[1 rho; rho 1], N);
U = normcdf(Z);
X2 = icdf(pd_X2,U(:,1));
Y2 = icdf(pd_Y2,U(:,2));
corr(X2,Y2)
scatterhist(X2,Y2,'Direction','out','Marker','.','Color','k')

Gaussian Copula w/ Numerical CDF Inversion

References:
Обратное преобразование
Копулы

Гауссова связка:
Росс, Шелдон. (2013).Simulation, Academic Press, Сан-Диего, Калифорния, 5-е издание. 103--105.

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded

Похожие вопросы