我注意到,如果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值?
感谢您的帮助。
答案 0 :(得分:10)
Fisher精确检验使用超几何分布。
您正在使用的scipy版本使用了不太精确的超几何分布的实现。这是known problem,已在scipy存储库中修复。