比较r中四条ROC曲线的auc

问题描述 投票:2回答:1

我想比较R中4个roc曲线的auc。我试过roc.test,但是这个函数只能比较两条曲线

roc.test(roc1,roc2)

R是否具有比较四条曲线的功能?我知道在stata中我可以通过roccomp比较4条曲线。有没有人知道如何比较R中的四条曲线?

谢谢!!

r roc auc
1个回答
2
投票

我不认为它与roc.test,但你可以使用library(caTools)来做到这一点。

通过使用library(pROC)使用'sapply'来比较下面的AUC值非常容易,我在这里描述了两种方法:

这两种方法的示例和设置:

在这里构建模型:

    lm1 <- lm(am ~ disp + mpg, data= mtcars)
    lm2 <- lm(am ~ disp + hp, data= mtcars)
    lm3 <- lm(am ~ disp + wt, data= mtcars)

在此预测模型:

predict1 <- predict(lm1, newdata=mtcars)
predict2 <- predict(lm2, newdata=mtcars)
predict3 <- predict(lm3, newdata=mtcars)

方法一:

library("caTools")
colAUC(cbind(predict1, predict2, predict3), mtcars$am, plotROC = T)

输出:

                 [,1]      [,2]      [,3]
    0 vs. 1 0.8380567 0.9433198 0.9433198

如果您选择使用plotROC = T,那么您将收到ROC之间的情节比较

enter image description here

方法2:

auc.val <- sapply(list(predict1, predict2, predict3),function(x)roc(pred=x,resp=mtcars$am)$auc)

最后使用sapply计算AUC:

library(pROC)
auc.val <- sapply(list(predict1, predict2, predict3),function(x)roc(pred=x,resp=mtcars$am)$auc)

会回来这个:

> auc.val
[1] 0.8380567 0.9433198 0.9433198

如果您有兴趣使用名称打印,请在sapply中使用USE.NAMES

> auc.val <- sapply(list("lm1" = predict1, "lm2" = predict2,"lm3"= predict3),function(x)roc(pred=x,resp=mtcars$am)$auc, USE.NAMES = T)
> auc.val
      lm1       lm2       lm3 
0.8380567 0.9433198 0.9433198 
© www.soinside.com 2019 - 2024. All rights reserved.