服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - R语言 - 用R语言绘制ROC曲线的实例讲解

用R语言绘制ROC曲线的实例讲解

2022-01-06 14:12coding-day R语言

这篇文章主要介绍了用R语言绘制ROC曲线的实例讲解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

1 roc曲线的意义

ROC曲线就是用来判断诊断的正确性,最理想的就是曲线下的面积为1,比较理想的状态就是曲线下的面积在0.8-0.9之间,0.5的话对实验结果没有什么影响。

如图:

用R语言绘制ROC曲线的实例讲解

 

2代码部分

install.packages(“pROC”)
install.packages(“ggplot2”)
library(pROC)
library(ggplot2)
#建立曲线
data(aSAH)
rocobj1<-roc(aSAHo u t c o m e , a S A H outcome,aSAHoutcome,aSAHs100b)
rocobj2<-roc(aSAHo u t c o m e , a S A H outcome,aSAHoutcome,aSAHwfns)
rocobj3<-roc(aSAHo u t c o m e , a S A H outcome,aSAHoutcome,aSAHndka)
#计算full AUC
auc(rocobj1)
auc(rocobj2)
auc(rocobj3)
#绘制曲线
plot(rocobj1)
#其他参数美化
plot(rocobj1,print.auc=TRUE,auc.polygon=TRUE,grid=c(0.1,0.2),grid.col=c(“green”,“red”),max.auc.polygon=TRUE,auc.polygon.col=“skyblue”,print.thres=TRUE)
#计算partial AUC选择关注一定范围数据
plot(rocobj1,print.auc=TRUE,auc.polygon=TRUE,partial.auc=c(0.8,0.4),partial.auc.focus=“sp”,grid=c(0.1,0.2),grid.col=c(“green”,“red”),max.auc.polygon=TRUE,auc.polygon.col=“skyblue”,print.thres=TRUE,reuse.auc=FALSE)
#比较两个曲线,pROC提供三种方法比较“delong”, “bootstrap”或“venkatraman”
roc.test(rocobj1,rocobj2,method = “bootstrap”)
#ggroc(功能仍在测试中)绘制Multiple curves
g3<-ggroc(list(s100b=rocobj,wfns=rocobj2,ndka=rocobj3))
g3
install.packages(“pROC”)
library(“pROC”)##roc
data(aSAH)
roc1<-roc(myDatal a b e l , m y D a t a label,myDatalabel,myDatascore)
roc2<-roc(myData2l a b e l , m y D a t a 2 label,myData2label,myData2score)
polt(roc1,col=“blue”)
polt.roc(roc2,add=TRUE,col=“red”)

 

3 实验结果

用R语言绘制ROC曲线的实例讲解

补充:R语言proc包绘制多重ROC曲线(信用评分应用,已有label和相应score)

数据:好坏标签label、用四种model简单计算出的每一个样本的score,标记为pre1至pre4,约1w样本

目的:使用proc包绘制ROC曲线,并生成AUC值

 

1.读入数据

data<-read.csv(file="D:/个人消费信用/第三次上机/工作簿2.csv",header=T)

header=T 即在读取中,将原有数据的第一行设置为变量名。

注意文件的分隔为 “ / ”,与默认不同。

 

2.画出最基本的ROC曲线

library(pROC) #加载pROC包
roc1<-roc(data$label,data$pre1)
plot(roc1,print.auc=TRUE,plot=TRUE,
print.thres=TRUE)

用R语言绘制ROC曲线的实例讲解

包含AUC的值和最优临界点,下面把它美化一下~

(问题:为啥横坐标Specificity的范围是1.5到-0.5,查了一下没有找到原因,可能是因为原数据本身的问题,以前以违约概率而非score的时候没有出现这个问题,择日探究……TvT)

 

3.美化ROC曲线

plot(roc2,print.auc=TRUE,print.auc.x=0.4,print.auc.y=0.4,auc.polygon=TRUE,auc.polygon.col="gray",
smooth=TRUE,
grid=c(0.5, 0.2),
grid.col=c("black", "black"), 
max.auc.polygon=TRUE,
print.thres=TRUE,print.thres.cex=0.8,
lty=1,main=" ROC曲线",mfrow=c(1,1)) 

用R语言绘制ROC曲线的实例讲解

解释在括号里面叠加命令的代码:

print.auc.x=0.4,print.auc.y=0.4 #设置AUC值显示出来的坐标
auc.polygon=TRUE,auc.polygon.col="gray" #设置ROC曲线下填充色,此处设定为灰色
smooth=TRUE #使ROC曲线变得光滑
max.auc.polygon=TRUE #整个图像填充
print.thres.cex=0.8 #设置最优临界点字体的大小
lty=1,main=" ROC曲线",mfrow=c(1,1) #设置标题啥的 mfrow貌似是图形参数,待查……

 

4.合并ROC曲线

由于共有4个model,所以要想比较模型的优劣,可以将四个ROC曲线画到一起。

roc1<- roc(data$label,data$pre1)
roc2<- roc(data$label,data$pre2)
roc3<- roc(data$label,data$pre3)
roc4<- roc(data$label,data$pre4)
plot(roc1, print.auc=TRUE,print.auc.x=0.4,print.auc.y=0.4, auc.polygon=TRUE,auc.polygon.col="gray", grid=c(0.5, 0.2),smooth=T,grid.col=c("black", "black"), max.auc.polygon=TRUE)
plot.roc(roc2,add=T,col="red", print.auc=TRUE,print.auc.x=0.3,print.auc.y=0.3)
plot.roc(roc3,add=T,col="blue",print.auc=TRUE,print.auc.x=0.5,print.auc.y=0.5)
plot.roc(roc4,add=T,col="yellow",print.auc=TRUE,print.auc.x=0.6,print.auc.y=0.6)

由于此处要显示AUC值,且不要重合~所以在后面加上了print.auc=TRUE,print.auc.x=0.6,print.auc.y=0.6的命令。

如果不重合的话,直接在roc1下面加上下列代码即可:

plot.roc(roc2,add=T,col="red")

由于原有数据的问题,这里的四条ROC曲线几乎重合~但此处只是介绍pROC包绘制ROC曲线的用法。就不要太在意辽!

用R语言绘制ROC曲线的实例讲解

以上为个人经验,希望能给大家一个参考,也希望大家多多支持服务器之家。如有错误或未考虑完全的地方,望不吝赐教。

原文链接:https://blog.csdn.net/qq_29423387/article/details/87911526

延伸 · 阅读

精彩推荐
  • R语言R语言可视化存储矢量图实现方式

    R语言可视化存储矢量图实现方式

    这篇文章主要为大家介绍了R语言存储矢量图的实现方式过程,有需要的朋友可以借鉴参考下,希望能够有所你帮助,祝大家多多进步,早日升职加薪...

    Kanny广小隶9392022-01-20
  • R语言R语言编程学习绘制动态图实现示例

    R语言编程学习绘制动态图实现示例

    这篇文章主要介绍了R语言编程学习绘制动态图实现示例,有需要的的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪...

    微小冷7652022-01-18
  • R语言R studio 批量注释的快捷方式

    R studio 批量注释的快捷方式

    这篇文章主要介绍了R studio 批量注释的快捷方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    JasonKQLin13342022-01-04
  • R语言R语言创建矩阵的实现方法

    R语言创建矩阵的实现方法

    这篇文章主要介绍了R语言创建矩阵的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随...

    hjk_caesar9462021-12-27
  • R语言聊聊R语言中Legend 函数的参数用法

    聊聊R语言中Legend 函数的参数用法

    这篇文章主要介绍了聊聊R语言中Legend 函数的参数用法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    Gavin姓陈6352021-12-28
  • R语言R语言-使用ifelse进行数据分组

    R语言-使用ifelse进行数据分组

    这篇文章主要介绍了R语言-使用ifelse进行数据分组,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    小力丸12042022-01-10
  • R语言R语言中c()函数与paste()函数的区别说明

    R语言中c()函数与paste()函数的区别说明

    这篇文章主要介绍了R语言中c()函数与paste()函数的区别说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    yiyu_j11152022-01-12
  • R语言R语言绘制散点图实例分析

    R语言绘制散点图实例分析

    在本篇文章里小编给大家整理的是一篇关于R语言绘制散点图实例分析内容,有需要的朋友们可以学习下。...

    w3cschool6942022-01-06