神刀安全网

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

【r<-绘图|ROC】ROC的计算与绘制这篇文章中我讲了ROC曲线的本质以及如何计算和绘制ROC曲线。注意,我这里谈到的ROC并未曾涉及机器学习模型的拟合与预测,而是指存在一组真实的连续型数值数据设定阈值的不同对响应变量(二分类)的影响(真阳性率、假阳性率)。

这一篇文章我们学习两个跟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 <- rbinom(200, size = 1, prob = .5) M1 <- rnorm(200, mean = D.ex, sd = .65) M2 <- rnorm(200, mean = D.ex, sd = 1.5)  test <- data.frame(D = D.ex, D.str = c("Healthy", "Ill")[D.ex + 1],                     M1 = M1, M2 = M2, stringsAsFactors = FALSE)  

简单绘图:

basicplot <- ggplot(test, aes(d = D, m = M1)) + geom_roc() basicplot 
【r&lt;-ROC|包】分析与可视化ROC——plotROC、pROC

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

【r&lt;-ROC|包】分析与可视化ROC——plotROC、pROC

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

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

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

ggplot(test, aes(d = D, m = M1)) + geom_roc(n.cuts = 0) 
【r&lt;-ROC|包】分析与可视化ROC——plotROC、pROC

修改它:

ggplot(test, aes(d = D, m = M1)) + geom_roc(n.cuts = 5, labelsize = 5, labelround = 2) 
【r&lt;-ROC|包】分析与可视化ROC——plotROC、pROC

使用plotROC提供的风格:

styledplot <- basicplot + style_roc() styledplot 
【r&lt;-ROC|包】分析与可视化ROC——plotROC、pROC

将标签加在曲线上:

direct_label(basicplot, labels = "Biomarker", nudge_y = -.1) + style_roc() 
【r&lt;-ROC|包】分析与可视化ROC——plotROC、pROC

绘制多条曲线

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

longtest <- melt_roc(test, "D", c("M1", "M2")) 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() 
【r&lt;-ROC|包】分析与可视化ROC——plotROC、pROC

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

plotROC <- function(.data, predict_col, target, group, positive=1, all=TRUE){     if(!(require(tidyverse) & require(plotROC))){         stop("--> tidyverse and plotROC packages are required..")     }           predict_col <- enquo(predict_col)     target <- enquo(target)     group  <- enquo(group)          predictN <- quo_name(predict_col)     groupN   <- quo_name(group)          df <- .data %>% dplyr::select(!! predict_col, !! target, !! group) %>%         mutate(targetN = ifelse(!! target == positive, 1, 0)) %>% as.data.frame()     if (all){         df2 <- df          df2[, groupN] <- "ALL"              df <- rbind(df, df2)     }     p  <- df %>%  ggplot(aes_string(m = predictN,                                      d = "targetN",                                     color = groupN)) + geom_roc(show.legend = TRUE, labels=FALSE)     p <- p + ggpubr::theme_classic2()          ng <- levels(factor(df[, groupN]))     if(length(ng) == 3){         auc <- calc_auc(p)$AUC         names(auc) <- ng         auc <- base::sort(auc, decreasing = TRUE)         p <- p + annotate("text", x = .75, y = .25,                            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) 
【r&lt;-ROC|包】分析与可视化ROC——plotROC、pROC

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

要回家了~有空再补充pROC包…

转载本站任何文章请注明:转载至神刀安全网,谢谢神刀安全网 » 【r<-ROC|包】分析与可视化ROC——plotROC、pROC

分享到:更多 ()