1

令 (X,Y) 为均值为 0 且协方差矩阵为 S 的二维正态随机变量。进一步令 Q = [0,1]x[0,1] 为单位平方,并均匀地对其进行网格化每边有 N 个网格点。结果,我们得到 Q 是 N x N 个正方形的并集。我需要在 MATLAB 中计算每个这样的正方形的 (X,Y) 的边际,即我需要计算一个矩阵 I ,其中元素是形式的 N x N 积分

整数1

其中七杰是分区的元素。贪心的方法是运行两个循环:在 i 上和在 j 上,并以数值方式计算这些积分中的每一个。但是,如果 S 是对角线,则可以做更有效的技巧:首先计算 X 的分布(这将是一个行向量),然后是 Y 的分布(列向量),最后取它们的 Kronecker 乘积,即将产生正确的矩阵 I。

但是,如果存在相关性,即 S 不是对角矩阵,则这种技巧不起作用。在这种情况下是否有必要运行 2 个循环,或者有更好的方法?

4

2 回答 2

0

多元正态 CDF 不容易计算。但是,使用您上面提到的内容,双变量情况比单变量情况更容易和更准确。它有 FORTRAN(见下文)和纯 Java 库:http ://www.iro.umontreal.ca/~simardr/ssj/indexe.html

更一般地说,自 1980 年代以来,WSU 教授 (Alan Genz) 一直在研究如何在数值上进行此积分和其他多元积分。其他人实现的所有代码都来源于他的算法和研究。他的代码可以计算维度高达 1000 的多元正态分布和 T 分布的 CDF 和期望。

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

我还编写了代码来从 Java 调用这些子例程:Compute the multivariate normal CDF in Java

于 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

有可用的 C/C++ 版本,您可能可以 MEX:

C、C++ 或 Fortran 中的多元正态 cdf

或者,如果你想在 MATLAB 中做所有事情,试试积分 2,它有很多优化。

于 2013-01-09T13:50:48.943 回答