在Java中计算多元正常CDF

And*_*Mao 6 java math statistics distribution numeric

有谁知道一个可靠,准确的库来计算Java中的多变量法线(MVN)CDF?我正在寻找像MATLAB的mvncdf函数.我需要能够达到10或更多的尺寸.大多数统计/数学库都没有此功能.能够计算对数概率是一个加号.

这篇文章中,似乎没有提到其他语言的免费实现.虽然直接java实现会摇滚,但我会接受其他语言中不需要许可证的实现(例如,不是MATLAB或IMSL),并且可以用最少的开销从Java轻松调用.

(这个问题是StackExchange数学上的一个帖子的衍生物,我试图计算正态随机变量排序的概率......如果你有兴趣尝试用其他数学方法直接解决问题,请检查出来.)

And*_*Mao 5

在做了一些额外的研究之后,似乎以下是最合理的方法。

多元正态 CDF 计算起来并不容易(特别是对于大维度),并且已经有几篇关于该主题的学术论文。Alan Genz 教授有一堆 Fortran-77 子程序,可以计算各种多元密度和 CDF,可在他的页面上找到:http : //www.math.wsu.edu/faculty/genz/software/software.html

正如您从其中一些代码中看到的那样,用另一种语言重新实现并不是一件轻而易举的事情,这可能就是为什么除非有人付费才能完成它。许多数学/数值编程是在研究级别在 Fortran 中完成的,因此大多数最好的代码都在那里。

因此,为了获得最佳结果,最好使用 JNI 或 JNA 直接调用(本机编译的)Fortran 子例程。JNA 似乎是最容易实现的,遵循以下说明:http : //www.javaforge.com/wiki/66061。使用它和其他一些参考资料,我实现了 Java-JNA-Fortran 链接,以便能够调用 MVNEXP(预期值)和 MVNDST(cdf)子例程。你可以在这里查看代码:

还要指出的是:对于一些二元分布和其他在公共数学中找不到的东西,确实存在本机 Java 代码;它改编自上述来源:http : //www.iro.umontreal.ca/~simardr/ssj/indexe.html。这是一个非常好的数学库,我直到现在才发现。