AUC意外值

时间:2017-03-22 19:52:14

标签: r roc auc

在对一组分子运行逻辑回归模型后,我有以下预测,我们认为这些分子可预测肿瘤与正常人的关系。

                  Predicted   class     
                      T        N          
                 T   29        5
  Actual class
                 N   993      912           

我有一个分数列表,范围从预测< 0(负数)到预测> 0(正数)。然后我在我的data.frame中有另一列,表示从模型预测的标签(1 ==肿瘤和0 ==法线)。我尝试使用library(ROC)以下列方式计算ROC:

 pred = prediction(prediction, labels)     
 roc = performance(pred, "tpr", "fpr")   
 plot(roc, lwd=2, colorize=TRUE)   

使用:

       roc_full_data <- roc(labels, prediction)
       rounded_scores <- round(prediction, digits=1)
       roc_rounded <- roc(labels, prediction)

呼叫:

       roc.default(response = labels, predictor = prediction)
       Data: prediction in 917 controls (category 0) < 1022 cases (category1).
       Area under the curve: 1

AUC等于1.我不确定我是否正确运行或者我在解释结果时做错了,因为AUC等于1是非常罕见的。

有人能帮帮我吗?

最佳

2 个答案:

答案 0 :(得分:1)

你的x.measure中有一个拼写错误,应该抛出一个错误。你有“for”而不是“fpr”。请尝试以下代码。

performance(pred, measure = "tpr", x.measure = "fpr")
plot(perf)

# add a reference line to the graph
abline(a = 0, b = 1, lwd = 2, lty = 2)

# calculate AUC
perf.auc <- performance(pred, measure = "auc")
str(perf.auc)
as.numeric(perf.auc@y.values)

答案 1 :(得分:0)

我使用pROC来计算AUC:

require(pROC)
set.seed(1)
pred = runif(100)
y = factor(sample(0:1, 100, TRUE))
auc = as.numeric(roc(response = y, predictor = pred)$auc)
print(auc) # 0.5430757

或者

require(AUC)
auc = AUC::auc(AUC::roc(pred, y))
print(auc) # 0.4569243

我无法解释为什么结果不同。

编辑:上面的aucs总和为1.0,因此其中一个lib会自动“反转”预测。