查看原文
其他

R语言统计与绘图:基于ggplot2绘制ROC曲线

段小麻 R语言统计与绘图 2023-01-01

pROC包中可以绘制ROC曲线的函数有两个:一个是plot()函数,在前面的推文中已经学习过了;还有一个是ggroc()函数,此函数使用ggplot2绘制曲线。

R语言统计与绘图:pROC包绘制ROC曲线

今天来继续来学习在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) # 预览数据集
aSAH数据集包括7个变量

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(00)) +     
  scale_x_continuous(expand = c(00))     
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(大小).

参考资料:

  1. [美]Winston Chang著.R数据可视化手册.肖楠,邓一硕,魏太云译.北京:人民邮电出版社.2014.
  2. pROC包帮助文档。

既往专辑



您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存