2016-05-29 1 views
1

XYの両方が均一に分布し、[0,1]に相関があり、相関がrhoに関連付けられているとします。Matlabの相関限界周りからの描画:copularndの代替?

Pの実現をMatlabの共同配布から引き出したいと考えています。

はそれを行うための唯一の方法

A = copularnd('gaussian',rho,P); 

ですか?

+0

は、これを行うには、多くの方法が明確にあります..この方法を使用して、特定の関心事は何ですか?あなたが達成しようとしていることをもっと文脈で伝えない限り、問題は無意味です。「copularnd」はあなたに合っていません。 –

+0

ありがとうございます。私はコプリュラをあまりよく知らないので、他のものよりもガウス型を選択することの意義について心配しています。 – user3285148

答えて

1

Copulasは、関節分布をモデル化する非常に便利な方法を提供します。 X~U[0,1]Y~U[0,1]、およびcorr(X,Y)=rhoの2つのランダム変数の関係を定義するだけでは不十分だと言うだけです。異なるコピュラを代入するだけで、すべてがこの条件を満たすさまざまなモデルを構築できます(最終的にはユースケースに最も適したモデルを選択する)。

別にコピュラが何であるかの基本を理解することから、あなたは、このようなリニアPearson)とランクSpearman/Kendall)などの相関関係の異なる種類が存在する理解する必要があり、そしてどのようにrelate to each other。特に、線形相関とは異なり、単調変換が適用される場合、順位相関は保存されます。これは、均一な境界分布の望ましい線形相関を、二相性の法線(またはコピュラで使用する他のタイプの分布)の線形相関に容易に変換することを可能にする重要な特性であり、入力相関はcopularndです。

Cross Validated、describing exactly how to convert the correlation in your caseには非常に良い回答があります。 Using Rank Correlation CoefficientsのMatlabガイドとコピュラもお読みください。

一言で言えば、余裕の線形相関をモデル化するには、それをある順位相関に変換する必要があります(Spearmanは一様分布のためにPearason相関に等しいので便利です)。これは単調な変換なので)。あなたの必要なのは、あなたの法線に対するSpearmanの相関を線形Person相関に変換することです。これはcopularndの入力になります。

コードを使用すると分かりやすくなると思います。明らかに、あなたはそれらの一時変数は必要ありませんが、それはロジックを明確にする必要があります。(私たちは非常に大規模なサンプルを生成したので)

rho_uni_Pearson = 0.7; 
rho_uni_Spearman = rho_uni_Pearson; 
rho_normal_Spearman = rho_uni_Spearman; 
rho_normal_Pearson = 2*sin(rho_normal_Spearman*pi/6); 

X = copularnd('gaussian', rho_normal_Pearson, 1e7); 

、そして得られた直線的な相関関係は、我々が望んでいたまさにです:

corr(X(:,1), X(:,2)); 
ans = 
    0.7000 

2変量正規コピュラの場合、線形と階数の相関関係は十分に簡単ですが、別のコピュラを使用するとさらに複雑になります。 Matlabには、ランクからリニアへの相関を変換できる関数copulaparamがあります。だからではなく、上記のように、明示的な式を書くのは、我々は単に使用することができます

rho_normal_Pearson = copulaparam('Gaussian', rho_normal_Spearman, 'type', 'spearman') 

を今、私たちは基本を学んできたこと、のは先に行くと代わりにガウスコピュラの自由5 degressでtコピュラを使用してみましょう:

線形相関を結果として確保
nu = 5; % number of degrees of freedom of t distribution 
rho_t_Pearson = copulaparam('t', 0.7, nu, 'type', 'spearman'); 

X = copularnd('t', rho_t_Pearson, nu, 1e7); 

は、我々が望んでいたものです:

corr(X(:,1), X(:,2)); 
ans = 
    0.6996 

それは結果の分布がSであり得ることを観察するのは簡単ですあなたが選択したコピュラに応じて、たとえそれらがすべて同じ線形相関を与えるとしても、はっきりと違っています。どのモデルがあなたの特定のデータや問題に最も適しているかを判断するのは、あなたの研究者次第です。たとえば:

N = 500; 
rho_Pearson = copulaparam('gaussian', 0.1, 'type', 'spearman'); 
X1 = copularnd('gaussian', rho_Pearson, N); 
figure(); scatterhist(X1(:,1),X1(:,2)); title('gaussian'); 

nu = 1; % number of degrees of freedom of t distribution 
rho_Pearson = copulaparam('t', 0.1, nu, 'type', 'spearman'); 
X2 = copularnd('t', rho_Pearson, nu, N); 
figure(); scatterhist(X2(:,1),X2(:,2)); title('t, nu=1'); 

Gaussian copula

t copula

関連する問題