费舍尔的精确检验大于2乘2列联表

时间:2014-08-18 16:54:30

标签: python statistics

嗨scipy stats有一个Fisher精确测试的实现,但它仅适用于2乘2的列联表。我想在大于2比2的表格上进行测试。 (5x2,5x3) 我知道在R中有fisher.test可以完成这项工作,但我想在我的python代码中做到这一点

有人知道Fisher精确测试的python实现可以在更大的表上运行吗?

此外,我不确定是否可以在大于2比2的桌子上进行Fisher精确测试。

由于

1 个答案:

答案 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
相关问题