其他
超详细的ROC曲线绘制教程(5000余字),真正的保姆级教程
ROC曲线是临床中常用的统计分析之一,R中可以绘制ROC曲线的包也有很多,pROC
包就是其中的佼佼者。
pROC包可以计算AUC和95%置信区间,可以可视化、平滑和比较ROC曲线。下面是pROC
包中的常用缩写:
缩写 | 解释 |
---|---|
ROC曲线 | 受试者操作特征曲线 |
AUC | ROC曲线下面积 |
pAUC | 部分ROC曲线下面积 |
CI | 置信区间 |
SP | 特异度specificity |
SE | 灵敏度sensitivity |
今天来学习下怎么使用pROC
包来绘制多条ROC曲线。
1. 加载数据
使用pROC包自带的aSAH
数据集来演示。该数据集包括了113例动脉瘤蛛网膜下腔出血患者的临床和实验室资料。
library(pROC) # 加载pROC包
data(aSAH) # 加载内置数据集
head(aSAH) # 查看数据集
2. 拟合曲线
在pROC包中,使用roc()来建立ROC对象。默认情况下roc()会输出AUC的值。
roc1 <- roc(aSAH$outcome, aSAH$s100b,
levels=c("Good", "Poor"))
roc2 <- roc(aSAH$outcome, aSAH$ndka,
levels=c("Good", "Poor"))
roc1; roc2
3. 绘制多条ROC曲线
使用plot()来绘制ROC曲线,可以使用很多参数来调整ROC曲线外观。
# 先绘制1条ROC曲线
plot(roc1,
print.auc=TRUE, # 图像上输出AUC的值
print.auc.x=0.4, print.auc.y=0.5, # 设置AUC值坐标为(x,y)
auc.polygon=TRUE, # 将ROC曲线下面积转化为多边形
auc.polygon.col="#fff7f7", # 设置ROC曲线下填充色
grid=c(0.5, 0.2), # 设置两轴网格线的间隔为0.5,0.2
grid.col=c("black", "black"), # 设置两轴间隔线条的颜色
print.thres=TRUE, # 图像上输出最佳截断值
main="Comparison of two ROC curves", # 添加图形标题
col="#FF2E63", # 设置ROC曲线颜色
legacy.axes=TRUE) # 使x轴从0到1,表示为1-特异度
# 再添加1条ROC曲线
plot.roc(roc2,
add=TRUE, # 增加曲线
col="#252A34", # 设置ROC曲线颜色
print.thres=TRUE, # 图像上输出最佳截断值
print.auc=TRUE, # 图像上输出AUC
print.auc.x=0.4,print.auc.y=0.4) # AUC的坐标为(x,y)
# 两曲线比较并添加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值
# 添加图例
legend(0.35, 0.20, # 图例位置x,y
bty = "n", # 图例样式
legend=c("roc1","roc2"), # 添加分组
col=c("#FF2E63","#252A34"), # 颜色跟前面一致
lwd=2) # 线条粗细
4. plot()解释
plot()是用来绘制ROC曲线的,函数中的许多参数可以调整ROC曲线外观。
函数调用方法:
plot.roc(x, add=FALSE, reuse.auc=TRUE,
axes=TRUE, legacy.axes=FALSE, ...)
## 参数解释
x # 通过roc()构建的ROC对象,如上面的roc1。
add # 逻辑词;如为TRUE,则ROC曲线将添加到现有图形中;
# 为FALSE(默认),则创建一个新的ROC曲线图形
axes # 逻辑词;是否绘制X,Y轴,默认为TRUE。
legacy.axes # 逻辑词;为TRUE,则x轴为“1-specificity”;
# 为FALSE,则x轴表示为“specificity”
4.1 调整坐标轴
绘图用的通用参数,仅在add= FALSE
时使用。
xlim、ylim # 指定x轴、y轴范围最大值
# 使用示例
# xlim=c(100, 0) 或 c(1, 0)
# ylim=c(0, 100) 或 c(0, 1)
xlab、ylab # 指定x轴、y轴标签
# 若legacy.axes为TRUE,则 xlab="100-Specificity(%)" 或 "1-Specificity"
# 若legacy.axes为FALSE,则 xlab="Specificity(%)" 或 "Specificity"
# ylab = "Sensitivity (%)" 或 "Sensitivity"
asp # 一个数值,图形中Y轴与X轴的比值,一般为1。
mar # 以数值向量表示的边界大小,顺序为“下、左、上、右”,单位为英分。
# 如 mar = c(4, 4, 2, 2) + 0.1
mgp # 坐标轴与ROC曲线图的距离,如 mgp=c(2.5, 1, 0)
4.2 ROC曲线颜色、线型和线宽
只能用于来设置ROC曲线的颜色、线型、线宽,也就是图上的那根曲线。
col, lty, lwd # 曲线的颜色、线型和线宽
# 使用示例:
# col=par("col")
# lty=par("lty")
# lwd=2
4.3 对角参考线颜色、线型和线宽
参考线也就是对角线(45°那根线),仅在add= FALSE
时使用。
identity # 逻辑词;是否显示参考线;
identity.col, identity.lty, identity.lwd
# 参考线的颜色、线型和线宽
# 仅在 identity = TRUE 时生效。
# 使用示例:
# identity.col="darkgrey"
# identity.lty=1
# identity.lwd=1
4.4 ROC曲线的阈值
print.thres # 是否在ROC曲线上显示阈值;
# FALSE、NULL或"no":表示在图上不显示阈值
# TRUE或"best":在图上显示约等指数最大时的阈值(可能不止1个阈值)
# "all":在ROC曲线上显示所有的点
# "local maximas":所有的local maximas
# 数字向量:直接指定要显示的阈值
# 请注意:平滑ROC曲线仅支持"best"参数
print.thres.pch # 阈值点的绘图符号
print.thres.adj # 阈值文本字符的位置调整
print.thres.col # 阈值文本数字的颜色
print.thres.cex # 阈值文本数字的字符缩放倍数
print.thres.pattern # 阈值的文本模式,为sprintf格式。
# 三个数字传递给sprintf:阈值、特异度和灵敏度。
print.thres.pattern.cex = print.thres.cex
4.5 AUC数值文本的位置、颜色和大小
print.auc # 逻辑词;是否在图上显示AUC的值
print.auc.pattern=NULL # AUC的文本模式,为sprintf格式
print.auc.x, print.auc.y # 图示AUC的坐标位置
print.auc.adj # AUC数字的文本调整
print.auc.col # 调整AUC的颜色
print.auc.cex # 调整AUC的缩放倍数
4.6 调整背景网格线
grid=FALSE, # 如为逻辑词,则表示是否在图上显示背景网格线;
# 如为数字向量,则表示显示网格线的间隔宽度;
# 数字向量长度为1,则表示垂直和水平网格线间隔宽度相同;
# 数字向量长度为2,如c(0.2,0.5),则分别指定垂直和水平网格线的间隔宽度。
# 请注意:如果grid显示的数字向量,这些值是用来计算grid.v和grid.h的;
# 如果指定了grid.v和grid.h的值,则grid会被忽略。
grid.v,grid.h # 数字;指定绘制垂直网格线和水平网格线间隔的值;
# 如果grid = FALSE,则为NULL。
grid.lty # 网格线线型,如grid.lty=3
grid.lwd # 网格线宽度,如grid.lwd=1
grid.col # 网格线颜色,如grid.col="#DDDDDD"
# 线型、颜色和宽度可以输入长度为2的向量,则分别指定垂直(第1个数字)和水平网格线。
4.7 将AUC面积转化为多边形
auc.polygon # 逻辑词;是否将曲线下面积转化为多边形;
auc.polygon.col # 填充多边形的颜色;
auc.polygon.lty # 多边形边框的线型
auc.polygon.density # 阴影线的密度,默认为NULL,表示不绘制阴影线;
# 为0则表示既没有阴影也没有填充,而负值和NA则表示抑制阴影,可以填充颜色;
# 如果为正值,则会显示阴影线的颜色。
auc.polygon.angle # 输入数值,表示阴影线的角度
auc.polygon.border # 设置多边形边框的颜色,默认为NULL;为NA则可以省略边框。
4.8 将背景四边形转化为四边形
max.auc.polygon # 逻辑词;是否将背景四边形转化为四边形
max.auc.polygon.col="#EEEEEE" # 填充四边形的颜色;
max.auc.polygon.lty=par("lty") # 四边形边框的线型
max.auc.polygon.density=NULL, # 阴影线的密度,默认不绘制阴影线;
# 为0则表示既没有阴影也没有填充,而负值和NA则表示抑制阴影,可以填充颜色;
# 如果为正值,则会显示阴影线的颜色。
max.auc.polygon.angle=45 # 输入数值,表示阴影线的角度
max.auc.polygon.border=NULL # 设置多边形边框的颜色,默认为NULL;
# 为NA则可以省略边框。
4.9 ROC曲线的置信区间
ci # 逻辑词;是否在ROC曲线上绘制置信区间
ci.type # CI的类型,有"no"、"bars"和"shape"两种,可以缩写为"b"或"s"。
# "shape"形状只用于ci.se和ci.sp,不用于ci.thresholds。
ci.col # 当CI类型为bars时,通过此参数设置CI的颜色。
pROC包是目前功能最全面的ROC曲线专业绘制包,可以多探索探索。
其他pROC包的教程:
参考资料
1.pROC包帮助文件
《完》
如果需要进群,请在公众号菜单栏处添加作者微信,邀请入群,请记得附上备注,谢谢。
点个在看,SCI马上发表。