【问题标题】:Computing integrals of correlated Gaussain random variables计算相关高斯随机变量的积分
【发布时间】:2013-01-25 15:49:15
【问题描述】:

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

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

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

【问题讨论】:

  • 令人惊讶的是,这个网站不支持数学模式——据我所知,使用它的唯一方法是通过图片,但是它非常慢而且不方便。另一方面,如果不使用公式,这个问题可能不清楚。请告诉我是否需要任何澄清 - 例如在 S 是对角线的情况下我该怎么做。
  • 你在 dsp.stackexchange.com 上提问会更好。这里的人是白痴(见下面的答案)。他们不知道如何回答 htis 之类的问题。此外,dsp 有很酷的乳胶数学符号。你正在做的是简单的数值积分。当 S 不是对角线时,您不能使用相同的技巧,因为 PDF 不可分离。但是,您知道高斯分布与不同的主轴倾斜,并且沿这些轴是可分离的。您可以做的是将随机变量 X、Y 转换为 A = aX+bY 和 B = cX+dY。 [a b; c d] 是 PCA 变换。这也会让你的 Q 倾斜。

标签: matlab numerical-methods normal-distribution


【解决方案1】:

不,通常没有简单的方法来计算多元正态分布的 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:

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

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

【讨论】:

    【解决方案2】:

    多元正态 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

    【讨论】:

      猜你喜欢
      • 2010-09-18
      • 2019-07-04
      • 1970-01-01
      • 1970-01-01
      • 2012-10-17
      • 2012-07-02
      • 1970-01-01
      • 2016-12-09
      • 1970-01-01
      相关资源
      最近更新 更多