【问题标题】:Best statistical test for a 3 x 3 confusion matrix3 x 3 混淆矩阵的最佳统计测试
【发布时间】:2020-09-02 14:29:51
【问题描述】:

我有一个 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 类进行比较以及。什么是正确的统计方法/测试来做到这一点?

【问题讨论】:

  • 您可以尝试使用优势比作为统计推断。有关更多信息,请参阅here
  • 这是否适用于 3x3 表/矩阵?
  • 它可能会给你一些推断,但总的来说这是一个方差分析案例。对您来说真正的实现肯定是 ANOVA。

标签: statistics confusion-matrix hypothesis-test


【解决方案1】:

如果你对它更可能是好的感兴趣,你可以将其他两个类别折叠成不好,并做一个成对的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 中进行事后处理(需要使用 R)。

【讨论】:

    猜你喜欢
    • 2013-01-29
    • 1970-01-01
    • 2014-10-14
    • 2018-04-01
    • 2021-07-28
    • 1970-01-01
    • 2017-02-25
    • 2020-07-31
    相关资源
    最近更新 更多