R软件实现Meta亚组分析以及森林图调整

本文关注的是R用于Meta分析的亚组分析,以及亚组分析时如何更加美观地调整森林图。
以一个实例做演示,开始分析

基本代码
读入数据,R读数据的代码有很多,此处用的代码是直接读取csv文件里的数据,
mydata1 <- read.csv(file.choose())
加载包,meta包做meta分析非常强大,其他还有
metaforlibrary("meta")
直接进行疗效评价,基本代码之:二分类数据metabin函数,RCT的评价指标用RR;meta分析summary;以及绘制森林图。图形紧跟在代码之后。
meta1 <- metabin(treat, n1,control, n2, data = mydata1, sm="RR")
summary(meta1)
forest(meta1)

以治疗方法作为分组依据进行亚组分析,添加亚组分析代码byvar = subRCT,代码及图形如下:
meta2 <- metabin(treat, n1, control, n2, data = mydata1, sm="RR", byvar = subtreat)
forest(meta2)

亚组分析的关键代码即:byvar=subgroup,其中subgroup为各种亚组分组。
接下来对图形进行进阶美观调整。首先,上图中同时显示了固定和随机效应模型结果,但根据之前summary中I2 = 0我们选择用固定效应模型,添加代码comb.random = FALSE。
然后要在图形左侧显示作者和发表年份信息,添加代码 studlab = paste(author," " ,year),括号中双引号中间为空格,表示在作者和年份之间留一个空格。
同时,改变实验组和对照组标题,添加代码label.e="Treatment", label.c="Control"。
亚组分析中,我们可以不用显示subgroup的标签,添加代码print.byvar = FALSE即可,最终代码及图形如下:
meta3<-metabin(treat, n1, control, n2, data = mydata1, sm="RR", studlab=paste(author," " ,year), comb.random=FALSE, byvar = subtreat,print.byvar = FALSE, label.e="Treatment", label.c="Control")
forest(meta3)

此时我们发现森林图已经变得美观了许多,但老板发来邮件,说A和B药不能单纯合并总效应,应该当成不同的治疗方法,但你可以放在一张图里……
此刻立马想到这个问题stata有个很简单的命令可以做到,就是nooverall,然后R怎么做?!
想到代码的相似性,迅速查找meta包里面所有关于overall的命令,在forest函数找到了相关代码并开心的马上实验,结果如下,出乎意料。
meta4<-metabin(treat, n1, control, n2, data = mydata1, sm="RR", studlab=paste(author," " ,year), comb.random=FALSE, byvar = subtreat,print.byvar = FALSE, label.e="Treatment", label.c="Control")
forest(meta4, overall = FALSE)

可是,这时weight不见了,难道这个overall不行?解决办法也简单,添加代码rightcols = c("w.fixed")。
meta5<-metabin(treat,n1,control,n2,data = mydata1, sm="RR", studlab=paste(author," " ,year),comb.random=FALSE, byvar = subtreat,print.byvar = FALSE, label.e="Treatment",label.c="Control")
forest(meta5,overall = FALSE, rightcols = c("w.fixed"))

然而,因为rightcols默认是吧effect和ci都显示出来的,而我们这样限定之后就相当于只显示Weight了,继续改进rightcols = c("effect", "ci", "w.Fixed"), 迅速跑一遍发现终于显示完整,得到了stata一个nooverall就可以解决的答案。
然后想着按发表年份拍一下顺序(sortvar = year)吧,然后森林图左侧好空,调整一下x轴吧(xlim = c(0.5,5)),代码及图形如下:
meta6 <- metabin(treat, n1, control, n2, data = mydata1, sm = "RR", studlab = paste(author, " " , year), comb.random = FALSE, byvar = subtreat, print.byvar = FALSE, label.e = "Treatment",label.c = "Control")
forest(meta6,overall = FALSE, rightcols = c("effect", "ci", "w.fixed"), sortvar = year, xlim = c(0.5,5))

好吧,到此完美达到我们想要的效果。还有一点要切记,R里面是不识别中文逗号的,一定要要用英文标点!一定要要用英文标点!一定要要用英文标点!(重要事情说三遍)
今天的分享就到这了,你学会用R做出想要的亚组分析森林图了吗?

