数据可视化——R语言forestplot包绘制组间差异对比图(森林图forest plot)
概述:使用R语言中的forestplot包绘制组间差异对比图。forestplot包本来用于绘制森林图,此处笔者将此用于绘制组间差异对比图,异曲同工,为另一篇博文:数据可视化——R语言ggplot2包绘制组别间指标差异对比图(箱形图及误差条图)提供了另一种实现方案。
森林图(forest plot)常用于Meta分析,可用于表达统计指标的效应量和置信区间。本文中,笔者将森林图中的效应量用于表示各组间的属性指标差异的中值,森林图中的置信区间用于表示各组间的属性指标差异的四分位距的范围。
使用工具:R语言中的forestplot包
如果没有安装forestplot包,输入install.packages(“forestplot”)进行安装。
以下示例中的数据模拟产生:共5个模型,每个模型都有一个属性指标,且每个模型的每个属性指标都进行了100次重复测量。绘制差异对比图时需要额外的计算,即每两两模型之间指标属性相减求出差异,然后寻找差异值的上、下四分位数和中值即可。
示例代码如下:
rm(list=ls()) #清除工作区
library(forestplot)
#生成模拟数据
# 共5个模型,每个模型都有一个属性指标,且每个模型的每个属性指标都进行了100次重复测量
group1 <- rnorm(100)+2
group2 <- rnorm(100)+1
group3 <- rnorm(100)+0.5
group4 <- rnorm(100)
group5 <- rnorm(100)-0.5
Data <- data.frame(group1=group1,group2=group2,group3=group3,group4=group4,group5=group5)
#计算各个模型属性之间的差值
Data$group1_2 <- Data$group1 - Data$group2
Data$group1_3 <- Data$group1 - Data$group3
Data$group1_4 <- Data$group1 - Data$group4
Data$group1_5 <- Data$group1 - Data$group5
Data$group2_3 <- Data$group2 - Data$group3
Data$group2_4 <- Data$group2 - Data$group4
Data$group2_5 <- Data$group2 - Data$group5
Data$group3_4 <- Data$group3 - Data$group4
Data$group3_5 <- Data$group3 - Data$group5
Data$group4_5 <- Data$group4 - Data$group5
#计算各个模型之间差值的25%分位数,中位数,75%分位数,同时保留两位有效数字
Data_differ_quantile <- apply(Data[,6:15],2,function(x) round(quantile(x,c(0.25,0.5,0.75)),digits=2))
#设置行名
rownames(Data_differ_quantile)[1:3] <-c("differ_down","differ_median","differ_up")
Data_t <- data.frame(t(Data_differ_quantile)) #转置
#各个模型间的比较
pairs_name <- c("Model1 vs. Model2","Model1 vs. Model3","Model1 vs. Model4","Model1 vs. Model5",
"Model2 vs. Model3","Model2 vs. Model4","Model2 vs. Model5",
"Model3 vs. Model4","Model3 vs. Model5",
"Model4 vs. Model5")
pairs_median <- Data_t$differ_median #差值的中值
pairs_CI <- paste("(", Data_t$differ_down, " ~ ", Data_t$differ_up, ")", sep = "") #差值的四分距的范围
Data_str <- data.frame(pairs_na=pairs_name,pairs_median=pairs_median,pairs_CI=pairs_CI)
Data_str <- as.matrix(Data_str) #类型转为矩阵
Data_str <- rbind(c(NA,"Median","Interquartile ranges"),Data_str) #第一行表示指标说明,NA表示不显示
jpeg(file = "results_Value_1.jpg",width =2000,height = 1800,units = "px",res =300) #结果保存
forestplot(Data_str, #显示的文本
c(NA,Data_t$differ_median), #误差条的均值(此处为差值的中值)
c(NA,Data_t$differ_down), #误差条的下界(此处为差值的25%分位数)
c(NA,Data_t$differ_up), #误差条的上界(此处为差值的75%分位数)
zero = 0, #显示y=0的垂直线
xlog=FALSE, #x轴的坐标不取对数
fn.ci_norm = fpDrawCircleCI, #误差条显示方式
boxsize = 0.3, ##误差条中的圆心点大小
col=fpColors(line = "#CC79A7", #误差条的线的颜色
box="#D55E00"), #误差条的圆心点的颜色
lty.ci = 7, # 误差条的线的线型
lwd.ci = 3, # 误差条的线的宽度
ci.vertices.height = 0.15, # # 误差条末端的长度
txt_gp = fpTxtGp(ticks = gpar(cex = 0.5), xlab = gpar(cex = 0.7), cex = 0.7), #文本大小设置
lineheight = "auto", #线的高度
xlab="Differences in assessment indicators between relevant pairs" #x轴的标题
)
dev.off()
效果图如下:
使用forestplot包绘制组间差异对比图的好处在于整理好要显示的文本和数字,可直接生成图形,且需要设置的参数相对较少。
References
https://cran.r-project.org/web/packages/forestplot/forestplot.pdf