如果您有两个不同的变量 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 为目标,您可以生成 Gaussian、t、Clayton、Frank 或 Gumbel copula 的随机值 (n=1000),然后您只需估计 copula 的逆 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 变量生成的新随机值。
我是copula统计的新手,如果我犯了错误,请原谅..