为什么1E-16之后apache数学中的尾概率会降到零?

时间:2015-01-05 04:39:30

标签: apache math apache-commons-math

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)中没有此精度问题的另一个函数计算卡方尾概率的直接方法。

ChiSquaredDistribution Javadoc

1 个答案:

答案 0 :(得分:0)

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