R Confusion Matrix敏感性和特异性标记

时间:2017-01-03 11:50:24

标签: r r-caret confusion-matrix

我正在使用R v3.3.2和Caret 6.0.71(即最新版本)来构建逻辑回归分类器。我使用confusionMatrix函数创建统计数据来判断其性能。

logRegConfMat< - confusionMatrix(logRegPrediction,valData [,“Seen”])

  • 参考0,预测0 = 30
  • 参考文献1,预测0 = 14
  • 参考0,预测1 = 60
  • 参考文献1,预测1 = 164

准确度:0.7239
灵敏度:0.3333
特异性:0.9213

我的数据中的目标值(Seen)使用1表示true,0表示false。我假设混淆矩阵中的参考(地面实况)列和预测(分类器)行遵循相同的约定。因此我的结果显示:

  • 真阴性(TN)30
  • 真阳性(TP)164
  • 假阴性(FN)14
  • 误报(FP)60

问题:为什么灵敏度为0.3333,特异性为0.9213?我原本以为它是相反的 - 见下文。

我不愿意相信R confusionMatrix函数中存在错误,因为没有任何报告,这似乎是一个重大错误。

关于计算特异性和敏感性的大多数参考文献将它们定义如下 - 即www.medcalc.org/calc/diagnostic_test.php

  • 灵敏度= TP /(TP + FN)= 164 /(164 + 14)= 0.9213
  • 特异性= TN /(FP + TN)= 30 /(60 + 30)= 0.3333

2 个答案:

答案 0 :(得分:8)

根据文档?confusionMatrix

  

"如果只有两个因子级别,则第一级将用作   "积极" 。结果"

因此,在您的示例中,正面结果将是0,评估指标将是错误的方式。要覆盖默认行为,可以将参数positive =设置为正确的值,唉:

 confusionMatrix(logRegPrediction, valData[,"Seen"], positive = "1")

答案 1 :(得分:0)

confusionMatrix(y_hat,y,positive =“ 1”)

将使用“ 1”作为肯定结果重新定义所有指标。例如,敏感性和特异性将被颠倒,但是它将仍然像以前一样显示混乱矩阵,即以(0,1)的顺序。可以通过重新排序类别的因子级别来纠正此问题,如下所示。

y_hat = factor(y_hat,levels(y_hat)[c(2,1)])

y = factor(y,level(y)[c(2,1)]

现在,矩阵将以(1、0)的顺序显示,并以“ 1”作为肯定结果,并且无需使用positive =“ 1”参数。