pROC带你轻松搞定ROC曲线绘制
pROC带你轻松搞定ROC曲线绘制
ROC曲线(Receiver Operating Characteristic Curve)是一种常用的二分类模型评估工具,通过绘制真阳性率(True Positive Rate, TPR)与假阳性率(False Positive Rate, FPR)的关系曲线,来评估分类器的性能。pROC包是R语言中用于计算、绘制和分析ROC曲线的强大工具,支持计算AUC值、比较不同模型的ROC曲线等高级功能。
在医学诊断试验和预测模型性能评估中,ROC曲线是一个非常重要的工具。为了帮助大家更好地理解和使用ROC曲线,本文将详细介绍如何使用pROC包来绘制和分析ROC曲线。
一、数据准备与pROC包加载
我们将使用aSAH数据集作为示例,这是一个经典的脑动脉瘤研究数据集,包含了200个亚实质性蛛网膜下腔出血(aSAH)病例的相关信息。该数据集包括11个变量,如年龄、颅内压、术前状态等,常用于分析不同变量与患者病情恢复的关系。
# 加载MASS包
library(MASS)
# 加载pROC包
library(pROC)
# 加载aSAH数据集
data(aSAH)
二、使用roc()进行ROC分析
在aSAH数据集中,我们用age这个数值型预测变量来预测outcome二分类因变量的取值,并且指定因变量的两个水平分别为”Good”和”Poor”。roc1是二分类预测变量age在预测outcome二分类因变量时的ROC曲线和AUC值。我们可以通过这个分析来评估age对outcome的预测能力。
# 使用roc()来建立ROC对象
roc1 <- roc(aSAH$outcome, aSAH$age,
levels=c("Good", "Poor"))
# 绘制ROC曲线并进行个性化设置
plot(roc1,
# 打印AUC值
print.auc=TRUE,
# 设置打印AUC值的x轴位置
print.auc.x=0.4,
# 设置打印AUC值的y轴位置
print.auc.y=0.5,
# 不生成ROC曲线下方多边形
auc.polygon=FALSE,
# 设置两个轴间隔的大小
# 设置两个轴间隔的颜色
grid.col=c("#FF8C00", "#FF8C00"),
# 不显示最佳阈值的位置
print.thres=FALSE,
# 图形标题
main="ROC curve for aSAH dataset",
# ROC曲线颜色
col="#FF2E63",
# 绘制旧式的轴刻度标签
legacy.axes=TRUE,
# 打印AUC值时使用橙色文本
print.auc.col="#FF8C00")
三、曲线的比较与p值的添加
为了检验两条曲线的p值,我们再次引入另一条曲线,参数更改为aSAH$s100b,并使用 add=TRUE将它与上一条曲线放置在同一图上。
# 使用roc()来建立ROC对象
roc2 <- roc(aSAH$outcome, aSAH$s100b, levels = c("Good", "Poor"))
# 绘制 ROC 曲线
plot(roc2, col = "blue", add=TRUE, # 增加曲线,
print.auc = TRUE,
main = "ROC curve for S100B",
xlab = "1 - Specificity", ylab = "Sensitivity",
print.auc.x=0.6,print.auc.y=0.6)
紧接着,我们使用 roc.test() 函数对前面得到的两条 ROC 曲线 roc1 和 roc2 进行比较,并得出它们是否具有显著差异。函数返回的结果存储在变量 testp 中。然后我们使用 text() 函数在图表上添加了一个注释,显示了检验结果中的 p 值。
testp <- roc.test(roc1,roc2) # 检验两条曲线
text(0.4, 0.2, # 设置添加p值的位置(x,y)
labels=paste("P value =", format.pval(testp$p.value)),
adj=c(0, 0.5)) # 在图上添加P值
通过以上步骤,我们已经了解了如何使用pROC包对ROC曲线进行绘制和分析。希望这篇文章能帮助大家更好地理解和应用ROC曲线分析。如果大家还有更多关于R包的问题,欢迎继续探索和学习。