3 x 3混淆矩阵的最佳统计测试

时间:2020-05-16 18:28:51

标签: statistics confusion-matrix hypothesis-test

我有一个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类进行比较。也一样这样做的正确的统计方法/检验是什么?

1 个答案:

答案 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)。