如何从 R 中的两个连续变量计算 AUC?
How do I calculate AUC from two continuous variables in R?
我有以下数据:
# 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 吗?
问题:
I thought AUC is for classification problems, was I mistaken?
你没有看错。无法像您的示例中那样为两个数字向量计算接收器操作特性曲线下的面积。它用于确定您的二元分类器与黄金标准二元分类器的对比情况。您需要一个案例向量与对照向量,或 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。
我有以下数据:
# 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 吗?
问题:
I thought AUC is for classification problems, was I mistaken?
你没有看错。无法像您的示例中那样为两个数字向量计算接收器操作特性曲线下的面积。它用于确定您的二元分类器与黄金标准二元分类器的对比情况。您需要一个案例向量与对照向量,或 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。