0

Apache Math 3.4(和 3.3),java 1.8.0_25

import org.apache.commons.math3.distribution.ChiSquaredDistribution;
ChiSquaredDistribution chisq = new ChiSquaredDistribution(23)
System.out.println(1.0 - chisq.cumulativeProbability(130) //  1.1102230246251565E-16
System.out.println(1.0 - chisq.cumulativeProbability(131) //  0.0

为什么 Apache Math 在第二次调用中返回 0.0?一些统计库(Excel,但不是 R)确实返回的值远小于 1E-16 的尾部概率。

附加编辑:在下面的评论中,Robert 提供了一种直接计算卡方尾概率的方法,该方法使用 Apache 数学库 (regularizedGammaQ) 中不存在此精度问题的另一个函数。

卡方分布 Javadoc

4

1 回答 1

0

请注意,可以从 1.0 中减去以产生小于 1.0 的最小值约为 1e-16;您可以直接验证这一点。也许您应该打印出 chisq.cumulativeProbability(131) 本身。我不知道它是否正确,但无论如何我们不要通过从 1.0 中减去它来混淆这个问题。

于 2015-01-05T06:09:02.800 回答