import pandas as pd
import numpy as np
from scipy import stats
import scikit_posthocs as sp
导入数据
rocs=pd.read_csv('/public/gkxiao/work/dude_comparison/roc_auc.csv')
预览前5行
rocs.head()
target | auc_tc | auc_tv | auc_tc_koes | |
---|---|---|---|---|
0 | aa2ar | 0.69 | 0.77 | 0.71 |
1 | abl1 | 0.60 | 0.70 | 0.61 |
2 | ace | 0.76 | 0.76 | 0.69 |
3 | aces | 0.46 | 0.63 | 0.52 |
4 | ada | 0.94 | 0.93 | 0.89 |
auc_tc: TanimotoCombo
auc_tv: RefTverskyCombo
auc_tc_koes: TanimotoComo reported by Koes
求平均值
rocs.mean()
auc_tc 0.691275 auc_tv 0.755882 auc_tc_koes 0.663725 dtype: float64
求中值
rocs.median()
auc_tc 0.72 auc_tv 0.76 auc_tc_koes 0.69 dtype: float64
求标准方差
rocs.std()
auc_tc 0.160264 auc_tv 0.129335 auc_tc_koes 0.163040 dtype: float64
创建数据用于统计处理
tc=rocs['auc_tc'].tolist()
tv=rocs['auc_tv'].tolist()
tc_koes=rocs['auc_tc_koes'].tolist()
data_rocs = np.array([tc,tv,tc_koes])
Friedman Test使用下面的null与alternative假设:
The null hypothesis (H0): 各组均值无差异。
The alternative hypothesis: (Ha): 至少有一组均值与其它的有差异。
stats.friedmanchisquare(tc, tv,tc_koes)
FriedmanchisquareResult(statistic=84.68380462724937, pvalue=4.0845618049257356e-19)
结果表明,Friedman检验结果为84.68,对应的p-value=4.08E-19。因为p-value小于0.05,因此拒绝接受三组方法的AUC均值是无差异的H0假设。
也就是说,我们有充足的证据表明,在三种方法里,至少有一种方法的AUC均值与其它的不同。
用Nemenyi post-hoc test找出哪一组与其它组不同。
#perform Nemenyi post-hoc Test
sp.posthoc_nemenyi_friedman(data_rocs.T)
0 | 1 | 2 | |
---|---|---|---|
0 | 1.000000 | 0.001 | 0.005218 |
1 | 0.001000 | 1.000 | 0.001000 |
2 | 0.005218 | 0.001 | 1.000000 |
0:TanimotoCombo;1:RefTverskyCombo;2:TanimotoCombo Koes
组0 vs 组1,p-value=0.001
组0 vs 组2,p-value=0.147
组1 vs 组2,p-value=0.001
在α = 0.05水平, 组0与组2(即两组采用TanimotoCombo打分函数的方法)间的p-value=0.147,两组间AUC均值不存在统计学意义上的显著差异;
在α = 0.05水平, 采用TanimotoCombo打分函数的组0、组2比之采用RefTverskyCombo打分函数的组1,p-value均为0.001,它们的组间AUC存在统计学意义上的显著差异。