如何从R中的两个连续变量计算AUC?

时间:2018-06-14 22:28:21

标签: r roc auc

我有以下数据:

# actual value: 
a <- c(26.77814,29.34224,10.39203,29.66659,20.79306,20.73860,22.71488,29.93678,10.14384,32.63233,24.82544,38.14778,25.12343,23.07767,14.60789)

# predicted value
p <- c(27.238142,27.492240,13.542026,32.266587,20.473063,20.508603,21.414882,28.536775,18.313844,32.082333,24.545438,30.877776,25.703430,22.397666,15.627892)

我已经为这两个计算了MSE和RMSE,但他们要求AUC和ROC曲线。如何使用R从这些数据中计算出来?我认为AUC是针对分类问题的,我错了吗?我们还可以像上面那样为数值计算AUC吗?

1 个答案:

答案 0 :(得分:3)

问题:

  

我认为AUC是针对分类问题的,我错了吗?

你没有错。接收器工作特性曲线下的面积不能像您的示例中那样计算两个数值向量。它用于确定二元分类器与金标准二元分类器的匹配程度。您需要一个案例与控件的向量,或a向量的级别,它将每个值置于两个类别之一。

以下是使用pROC软件包执行此操作的示例:

library(pROC)

# actual value
a <- c(26.77814,29.34224,10.39203,29.66659,20.79306,20.73860,22.71488,29.93678,10.14384,32.63233,24.82544,38.14778,25.12343,23.07767,14.60789)

# predicted value
p <- c(27.238142,27.492240,13.542026,32.266587,20.473063,20.508603,21.414882,28.536775,18.313844,32.082333,24.545438,30.877776,25.703430,22.397666,15.627892)

df <- data.frame(a = a, p = p)

# order the data frame according to the actual values
odf <- df[order(df$a),]

# convert the actual values to an ordered binary classification 
odf$a <- odf$a > 12 # arbitrarily decided to use 12 as the threshold

# construct the roc object
roc_obj <- roc(odf$a, odf$p)
auc(roc_obj)
# Area under the curve: 0.9615

在这里,我们已经任意决定黄金标准(a)的阈值是12.如果是这样的话,那么具有低于12的值的观察值就是对照。预测(p)分类非常好,AUC为0.9615。我们不必决定预测分类器的阈值以确定AUC,因为它与阈值决策无关。我们可以上下滑动,具体取决于查找案例或不对控件进行错误分类更为重要。

重要提示

我完全弥补了黄金标准分类器的门槛。如果您选择不同的阈值(对于黄金标准),您将获得不同的AUC。例如,如果我们选择28,则AUC将为1. AUC与预测器的阈值无关,但绝对取决于黄金标准的阈值。

修改

为了澄清上面的说明,这显然被误解了,你没有弄错。这种分析是针对分类问题的。没有更多信息,您无法在此处使用它。为了做到这一点,您需要一个您没有的a向量的阈值。你不能提出一个并且期望获得AUC的非组成结果。因为AUC取决于黄金标准分类器的阈值,如果您只是构成阈值,就像我们在上面的练习中所做的那样,您也只是在构成AUC。