如何生成具有不同边际分布多元的随机数?(How to generate multivariate r

2019-06-24 09:44发布

我已经失去了主意如何产生一些二元随机mumbers,说在系词。 的边缘人是不同的分布,即吨,γ,并且接合结构可以是高斯或吨。 我将有固定的肯德尔头。 我要检查那些随机数的皮尔森RHO如何从预置的tau不同。

任何建议? 一块原型在R / Matlab在高度赞赏!

Answer 1:

如果你有统计工具箱可以生成从使用功能Copula函数随机数copularnd 。 有文档中的几个例子。 要使用Kendall的tau和Pearson的Rho之间的转换,看看copulaparamcopulastat



Answer 2:

如果你有两个不同的变量X1,X2可以使用Copula函数理论,以产生一些随机数。 所以,你必须计算变量的CDF:

[Fi1, xi1] = ecdf(x1);

[Fi2, xi2] = ecdf(x2);

要么

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

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

随后,你可以计算Kendall的tau关系如下:

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变量产生新的随机值。

我在系词统计新,所以原谅我,如果我犯了一个错误..



Answer 3:

您可以按如下构建高斯系词。 当然,连接函数不能保证准确击中所需目标的相关性。 这样的性能取决于边际分布的性质。

实施例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')

实施例2:使用数值CDF反演边缘人(伽马对数正态分布)

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')

参考文献:
逆变换
Copula函数

高斯系词:
罗斯,谢尔顿。 (2013年)。 模拟 。 学术出版社,圣迭戈,CA,第5版。 103--105。



文章来源: How to generate multivariate random numbers with different marginal distributions?