我有一个3 x 3的混淆矩阵:
+---------+------+--------+-----+
| | Good | Medium | Bad |
+---------+------+--------+-----+
| Class 1 | 314 | 176 | 95 |
+---------+------+--------+-----+
| Class 2 | 184 | 275 | 126 |
+---------+------+--------+-----+
| Class 3 | 87 | 134 | 364 |
+---------+------+--------+-----+
我现在想说明一下,与第3类的元素相比,第1类的元素更可能被标识为“良好”。类似地,我想将第2类和第3类以及第1类和第2类进行比较。也一样这样做的正确的统计方法/检验是什么?
答案 0 :(得分:0)
如果您对它可能更有用感兴趣,可以将其他两个类别分解为不好,然后进行成对的fisher.test进行比较:
from scipy.stats import fisher_exact
import itertools
import pandas as pd
df = pd.DataFrame(index=['Class1','Class2','Class3'],
data={'Good':[314,184,87],'Medium':[176,275,134],'Bad':[95,126,364]})
df['not_gd'] = df['Medium'] + df['Bad']
def fn(comp,df):
mat = df.loc[comp][['Good','not_gd']]
ft = fisher_exact(mat)
return {'comp':" vs ".join(comp),'OR':ft[0],'p':ft[1]}
pd.DataFrame([fn(list(i),df) for i in itertools.combinations(df.index.to_list(),2)])
comp OR p
0 Class1 vs Class2 2.525148 1.828720e-14
1 Class1 vs Class3 6.632396 5.891070e-46
2 Class2 vs Class3 2.626537 1.959776e-11
可以设置逻辑回归,但是您很可能会获得与上述类似的结果..并且可能更难在python中进行事后操作(needa使用R)。