pROC multiclass.roc-单变量情况。在这种情况下,如何计算AUC?

时间:2019-07-08 15:13:10

标签: proc-r-package

很明显,在多变量情况下,Hand and Till方法是如何工作的(基于类的概率),我已经根据我编写的一些代码对此进行了检查。即我使用了3类问题,得到的结果与pROC相同。当我将3类问题转换为2类问题(通过合并2个类)时,得到的结果与pROC相同(仍然使用multiclass.roc)。但是,当我通过multiclass.roc通过3个类,3个级别但只有一个类概率向量的响应时,我得到了另一个结果。

我知道这是不同的处理方式; https://rdrr.io/cran/pROC/man/multiclass.html说:“ multiclass.roc函数可以处理两种类型的数据集:单变量和多变量。在单变量情况下,将传递单个预测变量向量并评估所有响应组合。”但是,我无法找到有关此处发生情况的解释。显然,这与响应中的类数有关(因为这是唯一的其他数据),但是我很想知道pROC在这种情况下正在做什么。

这是我的结果(我写了AUC_mc):

pROC:3级单变量:0.8494,3级vs其余(2级):0.9118
AUC_mc:3级与其余(2级):0.9118

pROC:1类单变量:0.9721,1类与其余(2类):0.9693
AUC_mc:1级与其他(2级):0.9692823

#
# Here the probabilities for only 1 class are passed to pROC.   
# When there are 2 classes in the domain that's fine  
# When there are 3 classes in the domain then I get a different result
#
roc = multiclass.roc(test.df$response, probabilities[,n], levels=levels(test.df$response))

pROC:3级:0.9568
AUC_mc:3级:0.9567698

roc = multiclass.roc(test.df$response, probabilities[,], levels=levels(test.df$response))

非常感谢

1 个答案:

答案 0 :(得分:0)

在单变量情况下,pROC测试所有1对1比较。其余比较中没有1。因此,对于3个类别,您有3个roc曲线:1 vs 2; 1比3;和2比3。

您可以找到the source code in multiclass.R

rocs <- utils::combn(levels, 2, function(X, response, predictor, percent, ...) {
    roc(response, predictor, levels=X, percent=percent, auc=FALSE, ci=FALSE, ...)
[...]

utils::combn函数一次生成levels所产生的2元素的所有组合。

我将尝试改进文档以更好地反映这一点。

相关问题