其他
R语言统计与绘图:基于ggplot2绘制ROC曲线
pROC包中可以绘制ROC曲线的函数有两个:一个是plot()
函数,在前面的推文中已经学习过了;还有一个是ggroc()
函数,此函数使用ggplot2绘制曲线。
今天来继续来学习在R中使用ggroc()函数绘制ROC曲线。
目 录
1. 安装和加载R包
2. 加载数据集
3. 绘制1条曲线
3.1 简易绘制
3.2 修改线型和坐标轴
4. 绘制多条曲线
4.1 简易绘制
4.2 修改背景网格线
4.3 修改图例
4.4 修改原点
4.5 修改曲线颜色
4.6 修改字体样式
4.7 图上添加文本
5. 分面绘制
6. ggroc()函数
1. 安装和加载R包
install.packages("pROC") # 安装pROC包
install.packages("ggplot2") # 安装ggplot2包
library(pROC) # 加载pROC包
library(ggplot2) # 加载ggplot2包
2. 加载数据集
使用pROC包自带的aSAH
数据集来演示。该数据集包括了113例动脉瘤蛛网膜下腔出血患者的临床和实验室资料。
data(aSAH) # 加载内置数据集
View(aSAH) # 预览数据集
3. 绘制1条曲线
3.1 简易绘制
roc1 <- roc(aSAH$outcome, aSAH$s100b) # 拟合1条曲线
ggroc(roc1)
3.2 修改线型和坐标轴
这里就不仔细调整单条ROC曲线的图形参数啦,在下面多条ROC曲线中调整。
ggroc(roc1, # roc()函数创建的对象
alpha = 0.5, # 设置曲线透明度
colour = "red", # 设置曲线颜色
linetype = 2, size = 2, # 设置曲线线型和大小
legacy.axes = TRUE) # 坐标轴为"1-specificity"
4. 绘制多条曲线
ggroc()函数是基于ggplot2包来绘制的,因此,图形的参数修改都可以根据ggplot2包来修改。
4.1 简易绘制
# 拟合多条曲线
roc2 <- roc(outcome ~ s100b + ndka + wfns, data = aSAH)
ggroc1 <- ggroc(roc2,
legacy.axes = TRUE) # 设置x轴坐标轴为"1-specificity"
ggroc1
4.2 修改背景网格线
论文中的ROC曲线图形一般不需要背景网格线,运行下面代码去掉。
ggroc2 <- ggroc1 + theme_bw() + # 更换黑白主题,默认为theme_grey()
theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank())
# 隐藏主、次网格线
ggroc2
4.3 修改图例
对于ROC曲线,图例一般可以移到图形内部。
ggroc3 <- ggroc2 +
theme(legend.position=c(0.85,0.20)) + # 设置图例位置
theme(legend.text=element_text(size=14, face="plain")) + # 设置图例字体格式
theme(legend.background=element_rect(fill="white", colour="black")) # 图例填充白色,边框为黑色
ggroc3
4.4 修改原点
ggplot2绘图结果往往X轴和Y轴的截距交点往往不是原点:如上图x、y轴交点不是起始于0。
ggroc4 <- ggroc3 +
scale_y_continuous(expand = c(0, 0)) +
scale_x_continuous(expand = c(0, 0))
ggroc4
4.5 修改曲线颜色
本文中的ROC曲线是使用ggroc()函数创建的,其是利用ggplot2包绘制图形,因此曲线颜色的调整可通过自定义调色盘来修改。
ggroc5 <- ggroc4 +
scale_colour_manual(values=c("#CC6666", "#7777DD", "#EC7700"))
ggroc5
4.6 修改字体样式
论文中的图形一般采用Times New Roman
或者Arial
字体。
windowsFonts(A=windowsFont("Times New Roman")) # 调用 windows字体
ggroc6 <- ggroc5 +
theme(axis.title=element_text(size=16, face="bold", family = "A")) +
# 设置x轴、y轴字体样式
theme(axis.text=element_text(size=14, face="bold", family = "A"))
# 设置x轴、y轴刻度标签样式
ggroc6
上图中,图例的字体没有修改,但是修改方法是一样的。
4.7 图上添加文本
ggroc6 + annotate("text", x=0.6, y=0.70, label="AUC = 0.612",size=5, fontface="bold", family = "A") +
annotate("text", x=0.6, y=0.85, label="AUC = 0.731",size=5, fontface="bold", family = "A") +
annotate("text", x=0.6, y=0.95, label="AUC = 0.801",size=5, fontface="bold", family = "A")
上面的图形基本可以满足投稿要求了。
5. 分面绘制
分面绘制的ROC曲线也是通过ggplot包来绘制的。
# 绘制简易分面ROC曲线图形
ggroc2 + facet_grid(.~name) + theme(legend.position="none")
6. ggroc()函数
ggroc()函数是使用ggplot2包来绘制ROC曲线的,曲线上的图形参数可以使用ggplot2图形参数来调整。
ggroc(data,
aes = c("colour", "alpha", "linetype", "size", "group"),
legacy.axes = FALSE, ...)
## 参数解释
data # roc函数中的roc对象,或roc对象列表。
aes # geom_line的参数,映射给不同的ROC曲线。
# 如果采用分面绘制,希望ROC曲线采用相同的参数,使用"group".
legacy.axes # 逻辑词,FALSE(默认)则x轴为"specificity",
# 为TRUE则为"1 - specificity".
# 其他参数:参考geom_line的alpha(透明度), colour(颜色), linetype(线型) 和size(大小).
参考资料:
[美]Winston Chang著.R数据可视化手册.肖楠,邓一硕,魏太云译.北京:人民邮电出版社.2014. pROC包帮助文档。
既往专辑