1

(X,Y) を、平均が 0 で共分散行列が S の 2 次元正規確率変数とします。さらに、Q = [0,1]x[0,1] を単位正方形とし、それを均一にグリッド化します。各辺に N 個のグリッド ポイントがあります。その結果、Q は N x N 正方形の和集合であることがわかります。MATLAB でそのような正方形ごとに (X,Y) の限界を計算する必要があります。つまり、要素が次の形式の N x N 積分である行列 I を計算する必要があります。

int1

whereキジはパーティションの要素です。貪欲な方法は、i と j の 2 つのループを実行し、これらの積分のそれぞれを数値的に計算することです。ただし、S が対角の場合は、はるかに効率的なトリックを実行できます。最初に X の分布 (1 つの行ベクトル) を計算し、次に Y の分布 (列ベクトル) を計算し、最後にそれらのクロネッカー積を取得します。正しい行列 I が得られます。

ただし、相関がある場合、つまり S が対角行列でない場合、このようなトリックは機能しません。このような場合、2 つのループを実行する必要がありますか、それともより良い方法がありますか?

4

2 に答える 2

0

多変量正規 CDF の計算は簡単ではありません。ただし、上記のことを使用すると、二変量のケースは一変量のケースよりもやや簡単で正確です。FORTRAN (下記参照) と純粋な Java ライブラリの両方があります: http://www.iro.umontreal.ca/~simardr/ssj/indexe.html

より一般的に言えば、WSU 教授 (Alan Genz) は、1980 年代から、これや他の多変量積分を数値的に行う方法を研究してきました。他の人が実装したすべてのコードは、彼のアルゴリズムと研究から派生したものです。彼のコードは、1000 次元までの多変量正規分布と T 分布の CDF と期待値を計算できます。

http://www.math.wsu.edu/faculty/genz/software/software.html

これらのサブルーチンを Java から呼び出すコードも作成しました。Java で多変量正規 CDF を計算する

于 2013-01-25T07:49:15.963 に答える
0

いいえ、一般的に多変量正規分布の CDF を計算する簡単な方法はありません。以下を参照してください。

http://en.wikipedia.org/wiki/Multivariate_normal_distribution#Cumulative_distribution_function

MATLAB Statistics Toolbox がある場合は、mvncdf を使用できます。

http://www.mathworks.com/help/stats/mvncdf.html

MEX を実行できる可能性のある C/C++ バージョンが利用可能です。

C、C++、または Fortran の多変量正規累積分布関数

または、MATLAB ですべてを実行する場合は、多くの最適化が行われている Integral2 を試してください。

于 2013-01-09T13:50:48.943 に答える