【问题标题】:How do I calculate AUC from two continuous variables in R?如何从 R 中的两个连续变量计算 AUC?
【发布时间】:2018-06-14 22:28:21
【问题描述】:

我有以下数据:

# 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 吗?

【问题讨论】:

  • “他们”是谁?

标签: r roc auc


【解决方案1】:

问题:

我以为 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。

【讨论】:

  • 对连续实际变量设置阈值以在非二元分类设置中执行 ROC 曲线分析对我来说听起来很像作弊。如果是 stats.SE,我什至会反对建议这样做(并且作为审稿人拒绝你的论文)。但就 SO 而言,您的答案是正确的。
  • @Calimo 在实践中,正如我希望你知道的那样,实际变量有时是连续的。它只是有一个既定的门槛。这个答案的重点是,如果没有二元分类,就无法进行 ROC 曲线分析。显示两个不同的阈值会为您提供曲线下面积的不同结果以证明这一点。
  • 我同意@DanHall。我把它当作一个示范。我知道ROC只是在分类问题上做的,但是当我被要求计算它时,我很困惑。丹给出的答案为我提供了拒绝该请求的必要知识支持。在我们的案例中,我们没有明确的门槛。
猜你喜欢
  • 2011-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-28
  • 2021-08-07
  • 1970-01-01
  • 1970-01-01
  • 2013-05-08
相关资源
最近更新 更多