我有一个包含四列的pandars数据框:
import pandas as pd
import numpy as np
arr = {
"A" :[75.3,85.2,90.1,80.4,70.9],
"B" :[80.6,90.2,85.7,70.8,95.1],
"C" :[85.2,95.6,80.8,90.4,75.1],
"D" :[90.3,85.5,80.0,70.5,95.2]
}
df = pd.DataFrame(arr)
字符串
我想对每一行运行2x2 fisher精确检验,并将p值保存到新列中。换句话说,我想对下面的数组运行2x2 fisher精确测试
第一个月
对于0和5之间的所有i,并将该列表保存为 Dataframe 中的另一列。
在“scipy.stats”中有一个名为“fisher_exact()”的函数,它将输出2x2数组的奇数值和p值。我有下面的代码,现在它的工作:
import scipy.stats as stats
pvalue = []
for i in df.index.values:
a = df["A"][i]
b = df["B"][i]
c = df["C"][i]
d = df["D"][i]
data = [[a,b],[c,d]]
odd_value, p_value = stats.fisher_exact(data)
pvalue.append(p_value)
df["p_value"] = np.array(pvalue)
型
但是,对于较大的阵列,这需要一段时间。有没有一种方法可以使用numpy向量操作来运行这个测试?这里有没有比scipy.stats.fisher_exact()更好的函数?
2条答案
按热度按时间huwehgph1#
字符串
你也可以运行:
型
其中第二列ie
[:, 1]
是p_values,第一列是奇比lkaoscv72#
您可以使用的另一个选项是fast-fisher库。
当运行fast_fisher_exact_compatibility而不是fisher_exact时,我们可以得到以下结果:
字符串
您可以以此为起点,看看在更大的阵列上运行时性能是否有所提高。