4

コピュラなどで、2変量のランダムなマンバーを生成する方法がわかりません。周辺分布は異なる分布、つまりt、ガンマであり、ジョイント構造はガウスまたはtにすることができます。私は彼らのケンドールのタウを修正する必要があります。そして、それらの乱数のピアソンローが事前設定されたタウとどのように異なるかを調べたいと思います。

なにか提案を?R /Matlabのプロトタイプの一部は高く評価されています!

4

3 に答える 3

4

Statistics Toolboxを使用している場合は、関数を使用してコピュラから乱数を生成できますcopularnd。ドキュメントにはいくつかの例があります。ケンドールのタウとピアソンのローの使用を切り替えるには、とを見てcopulaparamくださいcopulastat

于 2012-05-14T11:51:14.423 に答える
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')

数値CDF反転を使用したガウスコピュラ

参照:
逆変換
コピュラ

ガウスコピュラ:
ロス、シェルドン。(2013)。シミュレーション。アカデミックプレス、カリフォルニア州サンディエゴ、第5版。103〜105。

于 2018-10-17T23:19:30.383 に答える
2

2つの異なる変数x1、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の目的で、Gaussian、t、Clayton、Frank、またはGumbelコピュラのランダム値(n = 1000)を生成できます。その後、目的の分布を目的として、コピュラの逆累積分布関数を推定するだけで済みます。

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変数から生成された新しいランダム値を表します。

私はコピュラ統計に慣れていないので、間違えたらすみません。

于 2014-02-28T10:31:13.453 に答える