【问题标题】:Calculating a function and comparing one column with multiple columns in a table计算函数并将一列与表中的多列进行比较
【发布时间】:2020-12-20 01:12:02
【问题描述】:

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

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])

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

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

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

【问题讨论】:

    标签: r auc


    【解决方案1】:

    使用mapply

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

    mapplyauc 在其参数中给出的列表进行逐元素评估。因为Table[,1] 被强制转换为一个向量,我们需要再次list 它。我们也可以使用Table[,1, drop=FALSE],但使用list 输出会更好。

    【讨论】:

    • 非常感谢!就是这个。以及如何在输出中保留原始列名?
    • 非常欢迎@Kamil,试试setNames(mapply(auc, list(Table[,1]), Table[-1]), names(Table)[-1])
    【解决方案2】:

    我们也可以使用sapply

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多