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


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

    library(pROC)
    library(ggplot2)
    
    • 1
    • 2

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

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

    Logisti回归模型的ROC为

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

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

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

    在这里插入图片描述

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

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

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

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

    ggroc(list(xgboost=xgboost_roc, Logistic=roc1),legacy.axes = TRUE,size = 1)
    
    • 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()
    
    • 1
    • 2

    在这里插入图片描述
    如果想在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))
    
    • 1
    • 2

    在这里插入图片描述
    我这图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"))
    
    • 1
    • 2

    在这里插入图片描述
    修改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("灵敏度")
    
    • 1
    • 2
    • 3

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

    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())
    
    • 1
    • 2
    • 3
    • 4
    • 5

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

    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 = "预测模型"))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在这里插入图片描述
    加上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)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

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

    roc.test(xgboost_roc,roc1)
    
    • 1

    在这里插入图片描述

  • 相关阅读:
    XUI - 一个简洁而优雅的Android原生UI框架
    Ubuntu下发送邮件
    C#设计模式学习总结
    MATLAB科技绘图与数据分析
    计算机中的逻辑运算详解(与、或、非、同或、异或)
    Python爬虫——爬虫基础模块和类库(附实践项目)
    HTML基本讲解与使用
    美团二面:为什么Redis会有哨兵?
    爬虫----robots.txt 协议简介
    HTTP的请求报文和响应报文是怎样的,有哪些常见字段?
  • 原文地址:https://blog.csdn.net/dege857/article/details/126599513