r roc函数_【r<-ROC|包】分析与可视化ROC——plotROC、pROC

本文介绍了R语言中用于绘制和分析ROC曲线的两个包:plotROC和pROC。plotROC基于ggplot2,用于简单绘制ROC曲线,提供了交互式应用和命令行使用方式。pROC则提供了更全面的ROC分析功能,其图像呈现更加圆润。文章通过实例展示了这两个包的使用方法,包括多条ROC曲线的绘制和AUC计算。
摘要由CSDN通过智能技术生成

在【r

这一篇文章我们学习两个跟ROC相关的R包:

plotROC - Generate ROC Curve Charts for Print and Interactive Use

pROC - display and analyze ROC curves in R and S+

plotROC

plotROC包较为简单与单一,它就是用来绘制ROC曲线的,包中定义的函数基于ggplot2,因此我们可以结合ggplot2使用和修改、美化图形结果。

# 从GitHub上安装

devtools::install_github("hadley/ggplot2")

devtools::install_github("sachsmc/plotROC")

library(plotROC)

# 从CRAN

install.packages("plotROC")

快速使用

plotROC提供了Shiny应用,只需要键入

shiny_plotROC()

即可通过图形界面使用。

咱们还是来看命令吧,要有点难度不是?

命令行使用

导入包与创建模拟数据:

library(plotROC)

set.seed(2529)

D.ex

M1

M2

test

M1 = M1, M2 = M2, stringsAsFactors = FALSE)

简单绘图:

basicplot

basicplot

b71e548ced3d

这里我们唯一需要理清的是d与m映射是什么,现在我们查看下生成的数据框:

b71e548ced3d

上述画图只使用到了D与M1,只关注这两列即可。D是一个0-1列,即表示结果的两分类信息,M1是一个数值型数据。我们可以姑且称d为decision缩写,m为measurement缩写。

一旦我们理解了ggplot中的映射,对这个图的修改和美化其实就是修改geom_roc()函数里面的参数,以及用其他ggplot元素进行优化。

默认曲线上会显示阈值cutoff的数值,我们可以关闭它:

ggplot(test, aes(d = D, m = M1)) + geom_roc(n.cuts = 0)

b71e548ced3d

修改它:

ggplot(test, aes(d = D, m = M1)) + geom_roc(n.cuts = 5, labelsize = 5, labelround = 2)

b71e548ced3d

使用plotROC提供的风格:

styledplot

styledplot

b71e548ced3d

将标签加在曲线上:

direct_label(basicplot, labels = "Biomarker", nudge_y = -.1) + style_roc()

b71e548ced3d

绘制多条曲线

plotROC提供的函数melt_roc()可以将多个变量列变为长格式,方便数据的绘制:

longtest

head(longtest)

## D M name

## M11 1 1.48117155 M1

## M12 1 0.61994478 M1

## M13 0 0.57613345 M1

## M14 1 0.85433197 M1

## M15 0 0.05258342 M1

## M16 1 0.66703989 M1

画比较图:

ggplot(longtest, aes(d = D, m = M, color = name)) + geom_roc() + style_roc()

b71e548ced3d

还有其他一些功能,请查看文档(http://sachsmc.github.io/plotROC/)学习,这里最后介绍一下我封装的一个函数,便于两组ROC比较的使用,感兴趣的朋友可以自定义再修改和优化。

plotROC

if(!(require(tidyverse) & require(plotROC))){

stop("--> tidyverse and plotROC packages are required..")

}

predict_col

target

group

predictN

groupN

df % dplyr::select(!! predict_col, !! target, !! group) %>%

mutate(targetN = ifelse(!! target == positive, 1, 0)) %>% as.data.frame()

if (all){

df2

df2[, groupN]

df

}

p % ggplot(aes_string(m = predictN,

d = "targetN",

color = groupN)) + geom_roc(show.legend = TRUE, labels=FALSE)

p

ng

if(length(ng) == 3){

auc

names(auc)

auc

p

label = paste(names(auc)[1], " AUC =", round(auc[1], 3), "\n",

names(auc)[2], " AUC =", round(auc[2], 3), "\n",

names(auc)[3], " AUC =", round(auc[3], 3), "\n"),

size = 6)

}

p + xlab("1 - Specificity") + ylab("Sensitivity") +

scale_x_continuous(expand = c(0, 0)) + scale_y_continuous(expand = c(0, 0))

}

使用:

plotROC(longtest, predict_col = M, target = D, group = name, positive = 1)

# 参数1:提供数据框

# 参数2:提供预测数值列

# 参数3:提供二分类信息列(尽量为0-1,字符也可以)

# 参数4:提供一个组别

# 参数5:这里1表示成功,如果target是success和failure,可以知道positive="success"

# 注意,这里只有3条曲线绘制时才会给出AUC在图上,可以修改函数进行自定义

b71e548ced3d

默认会画出两组及其融合的曲线,可以添加选项all=FALSE去掉ALL曲线。

有读者谈到如何修改,之前之所以没写多条曲线添加AUC,是因为涉及一些文本图像的微调,实际使用时需要自定义一下

如果想要添加6条曲线,在加上ALL,就是7条,请补充函数中的if代码块

if(length(ng) == 3){

auc

names(auc)

auc

p

label = paste(names(auc)[1], " AUC =", round(auc[1], 3), "\n",

names(auc)[2], " AUC =", round(auc[2], 3), "\n",

names(auc)[3], " AUC =", round(auc[3], 3), "\n"),

size = 6)

}

为:

if(length(ng) == 7){

auc

names(auc)

auc

p

label = paste(names(auc)[1], " AUC =", round(auc[1], 3), "\n",

names(auc)[2], " AUC =", round(auc[2], 3), "\n",

names(auc)[3], " AUC =", round(auc[3], 3), "\n",

names(auc)[4], " AUC =", round(auc[4], 3), "\n"

names(auc)[5], " AUC =", round(auc[5], 3), "\n"

names(auc)[6], " AUC =", round(auc[6], 3), "\n"

names(auc)[7], " AUC =", round(auc[7], 3), "\n"),

size = 6)

}

曲线太多时可能文本注释添加需要注意下位置和大小。注意上述更改未测试,请根据实际情况调整。

pROC

pROC是一个相对plotROC更强大的R包,不同于plotROC基于ggplot2的创建,pROC自身构建了比较完整的ROC分析和绘图体系。

该包发表文章为:

Xavier Robin, Natacha Turck, Alexandre Hainard, Natalia Tiberti, Frédérique Lisacek, Jean-Charles Sanchez and Markus Müller (2011). pROC: an open-source package for R and S+ to analyze and compare ROC curves. BMC Bioinformatics, 12, p. 77. DOI: 10.1186/1471-2105-12-77.

目前谷歌搜索已经有超过2000次引用。

b71e548ced3d

pROC绘图

该包创建的图像似乎更加圆润。

安装

# 安装

install.packages("pROC")

# 导入

library(pROC)

# 获取帮助

?pROC

使用

比如

b71e548ced3d

其代码为:

library(pROC)

data(aSAH)

plot.roc(aSAH$outcome, aSAH$s100b, # data

percent=TRUE, # show all values in percent

partial.auc=c(100, 90), partial.auc.correct=TRUE, # define a partial AUC (pAUC)

print.auc=TRUE, #display pAUC value on the plot with following options:

print.auc.pattern="Corrected pAUC (100-90%% SP):\n%.1f%%", print.auc.col="#1c61b6",

auc.polygon=TRUE, auc.polygon.col="#1c61b6", # show pAUC as a polygon

max.auc.polygon=TRUE, max.auc.polygon.col="#1c61b622", # also show the 100% polygon

main="Partial AUC (pAUC)")

plot.roc(aSAH$outcome, aSAH$s100b,

percent=TRUE, add=TRUE, type="n", # add to plot, but don't re-add the ROC itself (useless)

partial.auc=c(100, 90), partial.auc.correct=TRUE,

partial.auc.focus="se", # focus pAUC on the sensitivity

print.auc=TRUE, print.auc.pattern="Corrected pAUC (100-90%% SE):\n%.1f%%", print.auc.col="#008600",

print.auc.y=40, # do not print auc over the previous one

auc.polygon=TRUE, auc.polygon.col="#008600",

max.auc.polygon=TRUE, max.auc.polygon.col="#00860022")

不过我们常用的一般是

b71e548ced3d

这样的图形,我们参考代码修改和自定义即可:

library(pROC)

data(aSAH)

rocobj1

main="Statistical comparison", percent=TRUE, col="#1c61b6")

rocobj2

testobj

text(50, 50, labels=paste("p-value =", format.pval(testobj$p.value)), adj=c(0, .5))

legend("bottomright", legend=c("S100B", "NDKA"), col=c("#1c61b6", "#008600"), lwd=2)

这个图显示了pROC包最重要几个函数的使用,第一个是plot.roc(),它可以绘制ROC曲线,并返回一个ROC对象,里面包含该曲线的众多有用信息,并为后续的分析做基础,lines.roc()为当前ROC曲线上增添新的ROC曲线。不仅如此,roc.test()函数提供了对曲线进行检验,检验的方法分为3种,可以自己选择,有兴趣的朋友不妨再深入看看。

b71e548ced3d

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值