r语言 - 重现插入符号混淆矩阵敏感性和特异性(它们似乎被交换)和 PPV(似乎标记为 NPV)



我在从caret混淆矩阵值重现灵敏度和特异性参数时遇到问题。(提前道歉,这是不可重现的,但我希望我展示足够的代码来清晰;除了pROC引用之外,它应该能够被任何(0,1(个真相和预测向量复制(。

从 https://en.wikipedia.org/wiki/Sensitivity_and_specificity

  • 灵敏度(又名召回率,又名 TPR(= TP/(TP + FN(
  • 特异性(又称选择性又称 TNR(= TN/(TN + FP(
  • 精度(又称阳性预测值或 PPV(= TP/(TP + FP(

我的困惑矩阵:

> cm = confusionMatrix(factor(y_pred),factor(y_test))
> cm$table
Reference
Prediction    0    1
0 8883  374
1 1440 1640

我从中获取

> TP=1640; FP=1440; FN=374; TN=8883
> cm$byClass
Sensitivity          Specificity       Pos Pred Value       Neg Pred Value 
0.8605057            0.8142999            0.9595981            0.5324675 
Precision               Recall                   F1           Prevalence 
0.9595981            0.8605057            0.9073544            0.8367512 
Detection Rate Detection Prevalence    Balanced Accuracy 
0.7200292            0.7503445            0.8374028 
> TP / (TP + FN)  #sensitivity aka Recall aka TPR
[1] 0.8142999
> TN / (TN + FP)  #Specificity 
[1] 0.8605057
> TP / (TP + FP)  #precision aka PPV
[1] 0.5324675
> TN / (TN + FN)  # NPV
[1] 0.9595981

看起来返回的数据被错误标记 - 特异性和灵敏度已被交换,Pos Pred 值和 Neg Pred 值也是如此。

pROC交叉检查:

> best_thr = coords(pROC_obj,x='best',input='threshold',transpose=TRUE)
> best_thr
threshold specificity sensitivity 
0.2204595   0.8605057   0.8142999

似乎验证了confustionMatrix灵敏度和特异性值是否已交换。

最令人担忧的是,当我尝试验证它时,我将要检索的 F1 值远远偏离:

> cm$byClass[7]
F1 
0.9073544 
> TP / (TP + (FP+FN)/2)   # F1
[1] 0.6438948

我正在使用带有(新安装的(pROCcaret包的 R 版本 3.5.3。 我的计算是否做错了,或者caret confusionMatrix实际上可能返回了错误的值(尤其是 F1(? (我认为我更有可能是错的,但pROC coords同意我的观点,不同意confusionMatrix

我在"y_pred"和"y_test"中有两个值(0和1(。 我想预测 1s。 例如:

y_pred = c(0,1,0,0,1,1,0)
y_test = c(0,0,0,0,1,1,0)

当我执行时:

cm = confusionMatrix(factor(y_pred),factor(y_test), positive="1")

输出正确。

最新更新