计算函数并比较 table 中的一列与多列

Calculating a function and comparing one column with multiple columns in a table

我对一个简单的任务有很大的疑问。我有一个由真实值(0 和 1)和来自不同模型的几个预测值组成的数据集。我正在使用包 'Metrics' 并且我想使用 AUC(度量中的函数“auc”)评估每个预测。 这是一个可重现的例子。我有一个 table:

evaluate <- "true prediction_1 prediction_2 prediction_3
1 0.9 0.5 0.8
1 0.9 0.4 0.7
1 0.8 0.6 0.75
0 0.1 0.3 0.2
0 0.05 0.4 0.1
0 0.15 0.45 0.15"
Table <- read.table(text=evaluate, header = TRUE)

让我们得到第一个预测的 AUC:

require(Metrics)
auc(Table[,1], Table[,2])
[1] 1

类似地,我们可以得到第二次预测的AUC:

auc(Table[,1], Table[,3])
[1] 0.8333333

但是如何同时获得所有列的AUC? (不是对它们求和,而是在每一对上迭代函数) 我想输入如下内容:

auc(Table[,1], Table[,2:4])

并得到一个 table,其中每个预测都分配有其 AUC 值,但这不起作用...

[1] 13.16667
Warning message:
In auc(Table[, 1], Table[, 2:4]) :
  longer object length is not a multiple of shorter object length

我想这很简单,但我正在努力寻找答案,所以如果有人能帮助我或指出正确的道路,我将不胜感激!

使用 mapply.

mapply(auc, list(Table[,1]), Table[-1])
# [1] 1.0000000 0.8333333 1.0000000

mapply 对其参数中给出的列表按元素计算 auc。因为 Table[,1] 被强制转换为向量,所以我们需要再次 list 它。我们也可以使用 Table[,1, drop=FALSE],但使用 list.

输出更好

我们也可以用sapply

sapply(Table[-1], function(x) auc(Table[,1], x))
#  prediction_1 prediction_2 prediction_3 
#  1.0000000    0.8333333    1.0000000