画ROC曲线的R包总结

本文介绍如何在CRAN中搜索绘制ROC曲线的包,并着重介绍六个有用的R包,包括ROCR、pROC、PRROC等。作者通过pkgsearch搜索,经筛选和查看文档选出这些包,还展示了部分包的下载历史及功能特点,希望能帮助读者找到所需资源。

640?wx_fmt=png

作者: Joseph Rickert
原文链接:
https://rviews.rstudio.com/2019/03/01/some-r-packages-for-roc-curves/

在这篇文章中,我将描述如何在CRAN中搜索绘制ROC曲线的包,并强调六个有用的包。

虽然一开始我有一些想谈论的包的想法,像ROCR和pROC,我发现它们在过去是有用的,但我决定使用Gabor Csardi相对较新的包pkgsearch来搜索CRAN,看看那里有什么。package_search()函数的作用是:将文本字符串作为输入,并使用基本的文本挖掘技术搜索所有CRAN。该算法搜索包文本字段,并为它找到的每个包生成一个分数,该分数由反向依赖项和下载的数量加权。

1library(tidyverse)  # for data manipulation
2library(dlstats)    # for package download stats
3library(pkgsearch)  # for searching packages

经过一些尝试和错误之后,我决定使用以下查询,其中包括一些有趣的与roc相关的包。

1rocPkg <-  pkg_search(query="ROC",size=200)
2

然后,通过过滤掉孤立包和得分不超过190的包,我将rocPkg缩小到46个包。

1rocPkgShort <- rocPkg %>% 
2               filter(maintainer_name != "ORPHANED", score > 190) %>%
3               select(score, package, downloads_last_month) %>%
4               arrange(desc(downloads_last_month))
5head(rocPkgShort)

为了完成选择过程,我做了大量的工作,浏览了软件包的文档,从中挑选出我认为对大多数数据科学家通常有用的东西。下面的图使用Guangchuang Yu的dlstats包查看我选择配置的六个包的下载历史。

1library(dlstats)
2shortList <- c("pROC","precrec","ROCit""PRROC","ROCR","plotROC")
3downloads <- cran_stats(shortList)
4ggplot(downloads, aes(end, downloads, group=package, color=package)) +
5  geom_line() + geom_point(aes(shape=package)) +
6  scale_y_continuous(trans = 'log2')
ROCR - 2005

ROCR已经存在了近14年,是绘制ROC曲线的一个坚如磐石的工具。我特别喜欢performance()函数通过输入真阳性率tpr和假阳性率fpr和参数来设置曲线的计算方法。这不仅具有令人放心的透明性,还显示了通过输入适当的参数来计算二进制分类器的几乎所有性能度量的灵活性。例如,要生成precision-recall曲线,您需要输入precrec。虽然没有vignette,但包的文档非常好。

下面的代码使用包附带的合成数据集并绘制默认的ROCR ROC曲线。在本文中,我将使用相同的数据集。

 1library(ROCR)
2## Loading required package: gplots
3## 
4## Attaching package: 'gplots'
5## The following object is masked from 'package:stats':
6## 
7##     lowess
8# plot a ROC curve for a single prediction run
9# and color the curve according to cutoff.
10data(ROCR.simple)
11df <- data.frame(ROCR.simple)
12pred <- prediction(df$predictions, df$labels)
13perf <- performance(pred,"tpr","fpr")
14plot(perf,colorize=TRUE)
640?wx_fmt=png
pROC - 2010

从下载曲线可以明显看出,pROC也很受数据科学家的欢迎。我喜欢它是因为很容易得到AUC的置信区间。

 1library(pROC)
2## Type 'citation("pROC")' for a citation.
3## 
4## Attaching package: 'pROC'
5## The following objects are masked from 'package:stats':
6## 
7##     cov, smooth, var
8pROC_obj <- roc(df$labels,df$predictions,
9            smoothed = TRUE,
10            # arguments for ci
11            ci=TRUE, ci.alpha=0.9, stratified=FALSE,
12            # arguments for plot
13            plot=TRUE, auc.polygon=TRUE, max.auc.polygon=TRUE, grid=TRUE,
14            print.auc=TRUE, show.thres=TRUE)
15
16
17sens.ci <- ci.se(pROC_obj)
18plot(sens.ci, type="shape", col="lightblue")
19## Warning in plot.ci.se(sens.ci, type = "shape", col = "lightblue"): Low
20## definition shape.
21plot(sens.ci, type="bars")
640?wx_fmt=png
PRROC - 2014

虽然不像ROCRpROC那么受欢迎,但PRROC最近似乎又卷土重来了。输入的术语有点折衷,但是一旦您理解了ROC.curve()函数,就可以轻松地绘制出一条干净的ROC曲线。正如vignette所指示,PRROC的创建实际上是为了做precision-recall曲线。

1library(PRROC)
2
3PRROC_obj <- roc.curve(scores.class0 = df$predictions, weights.class0=df$labels,
4                       curve=TRUE)
5plot(PRROC_obj)
640?wx_fmt=png
plotROC - 2014

plotROC是使用ggplot()绘制ROC曲线的理想选择。我的猜测是,它似乎只受到有限的欢迎,因为文档使用了医学术语,如“疾病状态”和“标记”。尽管如此,文档(包括a vignette and a Shiny application)非常好。

该包提供了许多功能丰富的ggplot()几何,可以生成复杂的图形。下面的图包含一些样式,包括Clopper和Pearson(1934)精确的方法置信区间。

1library(plotROC)
2rocplot <- ggplot(dfaes(m = predictions, d = labels))+ geom_roc(n.cuts=20,labels=FALSE)
3rocplot + style_roc(theme = theme_grey) + geom_rocci(fill="pink"
4

640?wx_fmt=png
precrec - 2015

precrec是另一个绘制ROC和precision-recall曲线的库。

1library(precrec)
2#
3## Attaching package: 'precrec'
4## The following object is masked from 'package:pROC':
5#
6##     auc
7precrec_obj <- evalmod(scores = df$predictions, labels = df$labels)
8autoplot(precrec_obj)
640?wx_fmt=png

evalmod()函数的参数选项使生成各种模型特性的基本图变得很容易。

1precrec_obj2 <- evalmod(scores = df$predictions, labels = df$labels, mode="basic")
2autoplot(precrec_obj2)   
640?wx_fmt=png
ROCit - 2019

ROCit是一种用于绘制ROC曲线和其他二元分类可视化的新工具,它在1月份迅速蹿红,并继续流行。如果我通过下载自动过滤原始搜索,就永远不会发现它。默认的图包括Yourden’s J Statistic数据的位置。

1library(ROCit)
2## Warning: package 'ROCit' was built under R version 3.5.2
3ROCit_obj <- rocit(score=df$predictions,class=df$labels)
4plot(ROCit_obj)
640?wx_fmt=png

其他一些可视化是可能的。下图显示了正面和负面反应的累积密度。KS统计量显示了两条曲线之间的最大距离。

1ksplot(ROCit_obj)
640?wx_fmt=png

在本文中,我试图深入研究CRAN并揭示R所包含的用于绘制ROC曲线和其他二进制分类器可视化的一些资源,但我只触及了皮毛。此外,我故意忽略了许多用于特殊应用程序的包,例如从审查生存数据计算时间相关的ROC曲线的survivalROC,以及包含评估交叉验证的AUC措施的功能的cvAUC。不过,我希望这个小练习能帮助您找到您要找的东西。

640?wx_fmt=gif


往期精彩

640?wx_fmt=jpeg

公众号后台回复关键字即可学习

回复 爬虫            爬虫三大案例实战
回复 Python       1小时破冰入门
回复 数据挖掘     R语言入门及数据挖掘
回复 人工智能     三个月入门人工智能
回复 数据分析师  数据分析师成长之路 
回复 机器学习     机器学习的商业应用
回复 数据科学     数据科学实战
回复 常用算法     常用数据挖掘算法

<think>首先,用户的问题是关于使用R语言绘制ROC曲线的方法。我需要根据系统级指令来构建我的回答。 系统级指令: - 所有行内数学表达式必须使用$...$格式。 - 独立公式必须使用$$...$$格式并单独成段。 - LaTeX语法正确。 - 使用中文回答。 - 生成相关问题。 - 回答中引用的段落末尾自然地添加引用标识,例如[^1]。 用户可见层: - 回答结构清晰,帮助用户逐步解决问题。 - 尽量保证回答真实可靠。 参考站内引用: - 引用[1]: 使用pROC绘制ROC曲线。 - 引用[2]: 使用pROCROCR绘制ROC曲线。 - 引用[3]: 使用ggplot2和pROC绘制ROC曲线。 - 引用[4]: 使用ROCR绘制ROC曲线。 用户的问题: "我想查找使用R语言绘制ROC曲线的方法 请问R语言绘制ROC曲线的方法" 我的回答需要覆盖R语言中绘制ROC曲线的常用方法,基于提供的引用。主要方法括使用pROCROCR。 步骤: 1. **介绍ROC曲线**:简要解释ROC曲线是什么,为什么使用它。 2. **详细步骤**:提供使用不同绘制ROC曲线的步骤。 - 使用pROC(如引用[1]、[2]、[3])。 - 使用ROCR(如引用[4])。 - 使用ggplot2结合pROC(如引用[3])。 3. **代码示例**:提供R代码示例,确保代码正确。 4. **添加引用标识**:在回答中自然地添加引用标识,指向提供的引用。 5. **生成相关问题**:在末尾添加相关问题部分,以"§§相关问题§§"开头。 确保回答结构清晰: - 开头:介绍ROC曲线。 - 主体:分步骤介绍方法。 - 代码:使用代码块展示。 - 结尾:总结。 - 相关问题:列出3-5个相关问题。 数学表达式:由于ROC曲线涉及概率和分类,可能会有数学表达式。例如,真阳性率(TPR)和假阳性率(FPR)。使用$...$格式。 例如: - TPR = $\frac{TP}{TP + FN}$ - FPR = $\frac{FP}{FP + TN}$ 在独立段落中,如果需要公式,使用$$...$$。 现在,构建回答大纲: 1. **介绍**:什么是ROC曲线?它在评估分类模型中的作用。 2. **方法1: 使用pROC** - 安装和加载。 - 创建ROC对象。 - 绘制曲线。 - 计算AUC。 - 代码示例。 3. **方法2: 使用ROCR** - 安装和加载。 - 创建预测对象。 - 计算性能指标。 - 绘制曲线。 - 代码示例。 4. **方法3: 使用ggplot2结合pROC** - 使用ggroc函数绘制美观的ROC曲线。 - 代码示例。 5. **总结**:比较方法。 6. **相关问题**:生成相关问题。 添加引用:在描述方法时,自然地添加引用标识。例如,在提到pROC时添加[^1],在提到ROCR时添加[^4]。 相关问题:基于用户查询,生成相关的问题,如优化、比较等。 最终输出: - 回答部分:使用中文。 - 相关问题部分:以"§§相关问题§§"开头。</think>### R语言绘制ROC曲线的方法 ROC曲线(接收者操作特征曲线)是一种用于评估二分类模型性能的工具,它通过绘制真阳性率(TPR)和假阳性率(FPR)的关系来展示模型在不同阈值下的表现。其中,TPR定义为$\frac{TP}{TP + FN}$(真阳性样本的比例),FPR定义为$\frac{FP}{FP + TN}$(假阳性样本的比例)。ROC曲线下的面积(AUC)越大,表示模型性能越好(AUC=1表示完美分类,AUC=0.5表示随机猜测)。在R语言中,常用`pROC`和`ROCR`绘制ROC曲线。下面我将分步骤介绍三种主流方法,并提供完整的代码示例。所有方法均基于真实可靠的R文档和实践指南[^1][^2][^3][^4]。 #### 方法1: 使用pROC(简单高效) `pROC`是绘制ROC曲线的首选工具,它支持快速计算AUC并生成高质量的曲线图。步骤如下: 1. 安装并加载`pROC`。 2. 准备数据:需要真实标签(如0/1或TRUE/FALSE)和模型预测的概率值。 3. 创建ROC对象并绘制曲线。 4. 计算AUC值以量化模型性能。 ```r # 安装和加载pROC install.packages("pROC") library(pROC) # 示例数据:真实标签(labels)和预测概率(predictions) # 假设labels是真实结果(0=阴性,1=阳性),predictions是模型输出的概率值 set.seed(123) labels <- c(rep(1, 50), rep(0, 50)) # 50个阳性样本,50个阴性样本 predictions <- runif(100) # 随机生成预测概率(实际应用中替换为模型输出) # 创建ROC对象并绘制曲线 roc_obj <- roc(labels, predictions) plot(roc_obj, main = "ROC曲线 (pROC)", col = "blue", lwd = 2) # 计算并显示AUC值 auc_value <- auc(roc_obj) text(0.5, 0.3, paste("AUC =", round(auc_value, 3)), col = "red", cex = 1.2) ``` - **输出说明**:曲线图显示FPR(x轴)和TPR(y轴)的关系。AUC值接近0.5表示随机模型(本例使用随机数据,AUC≈0.5)。该方法简洁高效,适合快速评估模型[^1][^2]。 #### 方法2: 使用ROCR(灵活自定义) `ROCR`提供更精细的控制,适合需要自定义阈值或添加性能指标的场景。步骤如下: 1. 安装并加载`ROCR`。 2. 创建预测对象(prediction object)。 3. 计算性能指标(如TPR和FPR)。 4. 绘制曲线并添加参考线。 ```r # 安装和加载ROCR install.packages("ROCR") library(ROCR) # 使用相同示例数据 # 创建预测对象:输入真实标签和预测概率 pred <- prediction(predictions, labels) # 计算性能指标(这里选择TPR和FPR) perf <- performance(pred, "tpr", "fpr") # 绘制ROC曲线 plot(perf, main = "ROC曲线 (ROCR)", col = "green", lwd = 2) abline(a = 0, b = 1, lty = 2, col = "gray") # 添加对角线(随机模型参考线) # 可选:计算AUC auc_perf <- performance(pred, "auc") auc_value <- auc_perf@y.values[[1]] text(0.5, 0.3, paste("AUC =", round(auc_value, 3)), col = "red", cex = 1.2) ``` - **输出说明**:曲线含对角线参考线,便于直观比较模型性能。`ROCR`支持多种性能指标(如精确率-召回率),适合高级分析[^4]。 #### 方法3: 使用ggplot2结合pROC(美化可视化) 如果你需要出版级图表,可以使用`ggplot2`结合`pROC`生成更美观的ROC曲线。步骤如下: 1. 安装并加载`ggplot2`和`pROC`。 2. 创建ROC对象。 3. 使用`ggroc()`函数绘制。 ```r # 安装和加载 install.packages(c("ggplot2", "pROC")) library(ggplot2) library(pROC) # 创建ROC对象 roc_obj <- roc(labels, predictions) # 使用ggplot2绘制曲线 ggroc(roc_obj, alpha = 0.5, color = "red") + ggtitle("ROC曲线 (ggplot2 + pROC)") + theme_minimal() + geom_abline(slope = 1, intercept = 0, linetype = "dashed") # 添加参考线 ``` - **输出说明**:该方法生成矢量图,支持自定义颜色、主题等。适合学术论文或报告中的可视化[^3]。 #### 总结 - **推荐方法**:初学者使用`pROC`(简单高效),高级用户选择`ROCR`(自定义强)或`ggplot2`(美观)。 - **关键点**:确保输入数据格式正确(标签为二分类,预测值为概率)。AUC值大于0.7通常表示模型有效。 - **注意事项**:实际应用中,需使用真实模型输出(如逻辑回归的预测概率),而非示例中的随机数据[^1][^2][^3][^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值