You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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)

现有三类ROC曲线图

实现方法

有两种简单的方式可以把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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 13:54:38