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

drb*_*sen 8 python statistics r 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)
Run Code Online (Sandbox Code Playgroud)

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

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

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

谢谢您的帮助.

Jef*_*Sax 10

Fisher的精确测试使用超几何分布.

您正在使用的scipy版本使用了不太精确的超几何分布的实现.这是一个已知问题,已在scipy存储库中修复.