为什么SciPy在Fisher精确检验中返回负的p值?

8 投票
1 回答
2394 浏览
提问于 2025-04-17 02:47

我注意到,在SciPy中,Fisher精确检验如果p值非常小的话,会返回一个负的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 个回答

10

费舍尔精确检验是用超几何分布来进行的。

你现在使用的scipy版本里的超几何分布实现得不是很准确。这是一个已知的问题,在scipy的代码库里已经修复了。

撰写回答