为什么SciPy通过Fisher精确检验返回极小p值的负p值?

时间:2011-09-21 17:43:19

标签: python r statistics scipy

我注意到,如果p值非常小,SciPy中的Fisher精确检验会返回负p值:

>>> import scipy as sp
>>> import scipy.stats
>>> x = [[48,60],[3088,17134]]
>>> sp.stats.fisher_exact(x)
(4.4388601036269426, -1.5673906617053035e-11)

在R中,使用相同的2x2列联表:

> a = matrix(c(48,60,3088,17134), nrow=2)
> fisher.test(a)
p-value = 6.409e-13

我的问题是1)为什么SciPy会返回负p值? 2)如何使用SciPy生成正确的p值?

感谢您的帮助。

1 个答案:

答案 0 :(得分:10)

Fisher精确检验使用超几何分布。

您正在使用的scipy版本使用了不太精确的超几何分布的实现。这是known problem,已在scipy存储库中修复。