嗨scipy stats有一个Fisher精确测试的实现,但它仅适用于2乘2的列联表。我想在大于2比2的表格上进行测试。 (5x2,5x3) 我知道在R中有fisher.test可以完成这项工作,但我想在我的python代码中做到这一点
有人知道Fisher精确测试的python实现可以在更大的表上运行吗?
此外,我不确定是否可以在大于2比2的桌子上进行Fisher精确测试。
由于
答案 0 :(得分:9)
是的,可以在5x2或5x3表上进行Fisher精确测试。
目前在python中还没有任何干净,经过广泛测试的解决方案。一种解决方案是使用rpy2并从python调用R函数。
<强>更新强>:
无需创建R对象,我们可以直接使用numpy数组:
import numpy as np
import rpy2.robjects.numpy2ri
from rpy2.robjects.packages import importr
rpy2.robjects.numpy2ri.activate()
stats = importr('stats')
m = np.array([[4,4],[4,5],[10,6]])
res = stats.fisher_test(m)
print 'p-value: {}'.format(res[0][0])
>> p-value: 0.668165917041
另一个解决方案是深入研究R实现使用的C代码并直接调用该代码。这是一个链接到某个人的github project,他们回到原来的fortran实现并从python中调用它。
<强> OLD:强>
import rpy2.robjects as robjects
from rpy2.robjects.packages import importr
stats = importr('stats')
v = robjects.IntVector([4,4,10,4,5,6])
m = robjects.r['matrix'](v,nrow=3)
res = stats.fisher_test(m)
print m
>>> [,1] [,2]
>>> [1,] 4 4
>>> [2,] 4 5
>>> [3,] 10 6
print 'p-value: {}'.format(res[0][0])
>>> p-value: 0.668165917041