如何在R语言多类别ROC图中添加Macro Average AUC?
多分类ROC图添加Macro Average AUC的实现方案
问题背景
我需要为三类索赔数据绘制Macro Average AUC,已通过R语言的multiclass.roc函数计算得到Macro Average AUC为0.6905,并且已经将三个类别的ROC曲线绘制在同一张图中(代码如下),现在希望把Macro Average AUC添加到该图中,请问有实现方法吗?
已计算AUC的代码
roc <- multiclass.roc(Claims$CLAIMS2 ~ Claims$PredA) roc #Call: #multiclass.roc.formula(formula = Claims$CLAIMS2 ~ Claims$PredA) #Data: ClaimsA$PredA with 3 levels of ClaimsA$CLAIMS2: >=2, 0, 1. #Multi-class area under the curve: 0.6905
现有绘图代码
rsA <- roc[['rocs']] par(pty="s") plot(rsA[[1]],cex.axis=1.8,lwd = 4,grid = FALSE, xlab="",ylab="",legacy.axes = F,colorize=FALSE, col="gray80", print.auc=F,print.auc.x=0.8,print.auc.y=0.33) # plot ROC curve plot(rsA[[2]],cex.axis=1.8,cex.lab=2,lwd = 4,colorize=FALSE, xlab="",ylab="",grid = FALSE, legacy.axes = F,col="gray50", add=TRUE, print.auc=F,print.auc.x=0.8, print.auc.y=0.33) plot(rsA[[3]],cex.axis=1.8,cex.lab=2,lwd = 4,colorize=FALSE, xlab="",ylab="",grid = FALSE, legacy.axes = F,col="black", add=TRUE, print.auc=F,print.auc.x=0.8, print.auc.y=0.33) title(xlab = "1-Specificity", line = 4,cex.lab=2.5) # Add x-axis text title(ylab = "Sensitivity", line = 5,cex.lab=2.5) # Add y-axis text legend(0.7, 0.35, legend=c(TeX("Claims 0 vs 1: 0.664"), TeX("Claims 0 vs >=2: 0.770"), TeX("Claims 1 vs >=2: 0.637")), col=c("black", "gray50", "gray80","red"), lty=c(1, 1, 1, 3),lwd = 4, cex=1.7, box.lty=0)

实现方法
有两种简单的方式可以把Macro Average AUC添加到图中:
方法1:直接在图中指定位置添加文本
在现有绘图代码的最后(legend()语句之后)添加以下代码,通过text()函数将AUC值标注在图上:
# 提取并标注Macro Average AUC,x、y坐标可根据图的布局调整 text(x = 0.7, y = 0.25, labels = paste("Macro Average AUC:", round(roc$auc, 4)), cex = 1.7, font = 2) # font=2表示加粗,增强辨识度
这里roc$auc会直接调用之前计算好的多分类AUC值,无需手动输入数值,更灵活可靠。
方法2:将Macro Average AUC加入图例
修改原有的legend()函数,把Macro Average AUC作为新条目加入图例,让所有AUC信息统一展示:
legend(0.7, 0.35, legend=c(TeX("Claims 0 vs 1: 0.664"), TeX("Claims 0 vs >=2: 0.770"), TeX("Claims 1 vs >=2: 0.637"), paste("Macro Average AUC:", round(roc$auc, 4))), col=c("black", "gray50", "gray80", "blue"), lty=c(1, 1, 1, 2), # 用不同线型区分Macro Average条目 lwd = 4, cex=1.7, box.lty=0)
内容的提问来源于stack exchange,提问作者F74
相关产品推荐
相关产品推荐

