R语言基于ggplot绘制多条ROC曲线(2)

ROC曲线也叫受试者工作曲线,原来用在军事雷达中,后面广泛应用于医学统计中。ROC曲线是根据一系列不同的二分类方式(分界值或决定阈),以真阳性率(灵敏度)为纵坐标,假阳性率(1-特异度)为横坐标绘制的曲线。ROC曲线主要应用于二分类结局,比如是否死亡,疾病诊断,肿瘤复发等等,可以用于自变量为连续变量的截点判定。
在这里插入图片描述
既往我们已经介绍了R语言基于ggplot和pROC包绘制多条ROC曲线,但是在我们实际绘制操作中还是有许多对于细节的调整,比如我们在论文中需要对两个预测模型进行比较需要制作出一个类似上图这样的ROC曲线,今天继续聊聊ggplot制作ROC曲线的一些细节操作。
假设我们有一个数据,我们已经做出来了两个模型,一个是机器学习的xgboost模型,一个是Logisti回归模型我们想比较一下这两模型的ROC曲线并绘图。
先导入R包

library(pROC)
library(ggplot2)

得出预测数据后,机器学习的模型的ROC为

xgboost_roc <- roc(bc$placenta.accreta,as.numeric(pre_xgb))

Logisti回归模型的ROC为

roc1<-roc(as.ordered(bc$placenta.accreta) ,as.ordered(bc$pre))

我们先可以使用混淆矩阵比较两个模型的准确率

table(bc$placenta.accreta,pre_xgb,dnn=c("真实值","预测值"))

在这里插入图片描述

confusionMatrix(bc$placenta.accreta,pre)#使用混淆矩阵进行分类

在这里插入图片描述
这样两个模型的准确率比较就算出来了,数据可以放到论文中,我们现在可以使用得到ROC绘图,我们可以要把两个ROC放在list中绘图
这里xgboost=xgboost_roc中,xgboost将成为图例的名字,可以自己取

ggroc(list(xgboost=xgboost_roc, Logistic=roc1))

在这里插入图片描述
这个图有几个问题X轴刻度是1-0,我们需要的是0-1,x轴标题需要改成1-特异度,需要添加对角线,图例需要放进图中,我们一步步来修改
更改X轴的刻度,更改线条大小

ggroc(list(xgboost=xgboost_roc, Logistic=roc1),legacy.axes = TRUE,size = 1)

在这里插入图片描述
添加对角线和采用空白背景

g2 <- ggroc(list(xgboost=xgboost_roc, Logistic=roc1),legacy.axes = TRUE,size = 1)
g2+annotate(geom = "segment", x = 0, y = 0, xend =1, yend = 1,color = "blue",size=1)+ theme_minimal()+theme_bw()

在这里插入图片描述
如果想在0点位置相交

g2+annotate(geom = "segment", x = 0, y = 0, xend =1, yend = 1,color = "blue",size=1)+ theme_minimal()+theme_bw()+
  scale_y_continuous(expand = c(0, 0))+scale_x_continuous(expand = c(0, 0))

在这里插入图片描述
我这图0点相交对于不好看,我就不这样弄了,可以自定义曲线的颜色

g2+annotate(geom = "segment", x = 0, y = 0, xend =1, yend = 1,color = "blue",size=1)+ theme_minimal()+theme_bw()+
  scale_colour_manual(values=c("green", "yellow"))

在这里插入图片描述
修改X轴和Y轴标题

g2+annotate(geom = "segment", x = 0, y = 0, xend =1, yend = 1,color = "blue",size=1)+ theme_minimal()+theme_bw()+
  xlab("1-特异度")+
  ylab("灵敏度")

在这里插入图片描述
修改图例位置

g2+annotate(geom = "segment", x = 0, y = 0, xend =1, yend = 1,color = "blue",size=1)+ theme_minimal()+theme_bw()+
  xlab("1-特异度")+
  ylab("灵敏度")+
  theme(legend.position = c(.8,.2),
        legend.key.width = unit(2,"cm"),panel.grid.major = element_blank(), panel.grid.minor = element_blank())

在这里插入图片描述
更改图例标题

g2+annotate(geom = "segment", x = 0, y = 0, xend =1, yend = 1,color = "blue",size=1)+ theme_minimal()+theme_bw()+
  xlab("1-特异度")+
  ylab("灵敏度")+
  theme(legend.position = c(.8,.2),
        legend.key.width = unit(2,"cm"),panel.grid.major = element_blank(), panel.grid.minor = element_blank())+
  guides(color=guide_legend(title = "预测模型"))

在这里插入图片描述
加上AUC值

g2+annotate(geom = "segment", x = 0, y = 0, xend =1, yend = 1,color = "blue",size=1)+ theme_minimal()+theme_bw()+
  xlab("1-特异度")+
  ylab("灵敏度")+
  theme(legend.position = c(.8,.2),
        legend.key.width = unit(2,"cm"),panel.grid.major = element_blank(), panel.grid.minor = element_blank())+
  guides(color=guide_legend(title = "预测模型"))+
  annotate("text", x=0.2, y=0.88, label="AUC = 0.92",size=5)+
  annotate("text", x=0.5, y=0.7, label="AUC = 0.67",size=5)

在这里插入图片描述
这样基本就算做好了,最后对两个auc进行比较,比较的结果也要附在论文中

roc.test(xgboost_roc,roc1)

在这里插入图片描述

  • 4
    点赞
  • 59
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天桥下的卖艺者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值