计算相关高斯随机变量的积分

时间:2013-01-09 09:18:53

标签: matlab numerical-methods normal-distribution

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

int1

其中Qij是分区的元素。贪婪的方法是运行两个循环:在i和j之上,并以数字方式计算每个积分。然而,在S是对角线的情况下,可以做更有效的技巧:首先计算X的分布(即一个行向量),然后计算Y(列向量)中的一个,最后得到它们的Kronecker乘积,其中将产生正确的矩阵I.

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

2 个答案:

答案 0 :(得分:0)

不,通常没有简单的方法来计算多变量正态分布的CDF - 请参阅:

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

如果您有MATLAB统计工具箱,则可以使用mvncdf:

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

有些可用的C / C ++版本可能是MEX:

multivariate normal cdf in C, C++, or Fortran

或者,如果你想在MATLAB中做所有事情,请尝试使用integral2,它有很多优化。

答案 1 :(得分:0)

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

更一般地说,自20世纪80年代以来,WSU教授(Alan Genz)一直在研究如何以数字方式进行此项和其他多元积分。其他人已经实现的所有代码都来自他的算法和研究。他的代码可以计算CDF以及多变量法线和T分布的预期,最大可达1000维。

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

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