多変量ガウス分布から値を生成する


14

現在、平均ベクトルと共分散行列多変量正規分布を持つ次元のランダム変数値をシミュレートしようとしています。X μ = μ 1μ N T SNXμ=(μ1,...,μN)TS

逆CDF法に似た手順を使用したいと考えています。つまり、最初にN次元の一様なランダム変数Uを生成し、次にこの分布の逆CDFにプラグインして、値Xを生成しますX

手順が十分に文書化されておらず、MATLABmvnrnd関数ウィキペディアで見つけ説明にわずかな違いがあるため、問題が発生しています。

私の場合、分布のパラメーターもランダムに選択しています。特に、平均分布μi一様分布U(20,40)ます。次に、次の手順を使用して共分散行列Sを作成します。

  1. 下三角行列作成L L(I、I)= 1のための私は1..N =及びLを(I、J)= U(-1,1)のために 、I <JLL(i,i)=1i=1..NL(i,j)=U(1,1)i<j

  2. してみましょうS = LL ^ T L ^ Tはの転置表すLをS=LLTLTL

この手順により、Sが対称かつ正定であることを確認できます。また、S = LL ^ Tになるように下三角行列Lを提供します。これは、分布から値を生成するために必要だと思います。LS=LLT

ウィキペディアのガイドラインを使用すると、次のようにN次元のユニフォームを使用してXの値を生成できるはずです。XN

  • X=μ+LΦ1(U)

ただし、MATLAB関数によると、これは通常次のように行われます。

  • X=μ+LTΦ1(U)

ここでΦ1の逆CDFであるN次元、分離、正規分布は、両方の方法の唯一の違いは、単に使用するかどうかであるL又はLT

MATLABまたはWikipediaを使用する方法はありますか?それとも両方とも間違っていますか?


2
前述のとおり、は行ベクトルであり、列ベクトルでなければならないため、両方とも間違っています。あなたは、行と列まっすぐを取得すると、この質問は、単に、どのバージョンの識別することによって自分自身に答える必要がありますまたは 提供しますマトリックスとどのバージョンが単に数値を与えるか:マトリックスバージョンの期待値を計算でき、それがを与えることを確認してください。T * I N V N O R M U μTinvnorm(U) (Xμ)(Xμ)(Xμ)(Xμ)S
whuber

@whuberうん。質問のフォーマットを変更しました。先端をありがとう-間違いなくチェックする最も簡単な方法。
バーク

回答:


14

場合標準正規RVのの列ベクトルで設定した場合、、共分散のである。 Y = L X Y L L TXN(0,I)Y=LXYLLT

あなたが抱えている問題は、平均を列ベクトルとして指定しても、matlabのmvnrnd関数が行ベクトルをサンプルとして返すという事実から生じる可能性があると思います。例えば、

 > size(mvnrnd(ones(10,1),eye(10))  
 > ans =
 >      1    10

また、行ベクトルを変換すると、逆の式が得られることに注意してください。場合行ベクトルであり、その後、、また、行ベクトルであるので、列ベクトルとの共分散であり、を書き込むことができる。 Z = X L T Z T = L X T Z T E [ Z T Z ] = L L TXZ=XLTZT=LXTZTE[ZTZ]=LLT

あなたが書いたものに基づいて、ウィキペディアの式は正しいです:がmatlabによって返される行ベクトルである場合、で左乗算することはできません。(ただし、右乗算すると、同じ共分散サンプルが得られます)。Φ1(U)LTLTLLT


matlabのmvnrndのヘルプでは、サンプル数としてを使用していることに注意してください。次元数はです。したがって、次元の多変量正規分布からサンプルを要求すると、それらは行列として返されます。NDNDN×D
jpillow
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.