各位读者朋友们大家好啊,最近有不少读者私信我说关于单臂实验的meta分析能不能出个教程,尤其是对于单臂连续型变量,找遍了全网都不知如何用R实现,不要着急,相信看完本期教程,你会获益匪浅的。(需要本教程的原始数据及完整程序命令的可在公,众号(全哥的学习生涯)内回,复“单个率meta”。)
01 单个率meta分析的理论基础
单个率的Meta分析是一种只提供了一组人群的总人数和事件发生人数,基于原始研究为横断面的研究,国内Meta 分析的软件主要是Review Manager,但该软件无法实现单个率的Meta 分析。Stata 软件可进行单个率的Meta 分析,但其计算繁琐,操作较复杂且是收费的统计软件。Meta-analysis 软件是一款免费的软件且可以进行单个率的Meta 分析,但是其为菜单操作,无法实现对原始率的转换。相比之下,R 软件是一种共享的免费统计软件,有专门的Meta 分析程序包,可以进行单个率的Meta 分析,而且提供了五种方法估算率, 研究者可以根据原始率的分布选择合适的方法。
02 准备工作
2.1
本教程使用的R软件版本为3.6.2,RStudio版本为1.2.1335,需要软件的读者可在公,众号(全哥的学习生涯)内回,复“R”,”RS”。同时,我们需要安装“meta”包,及加载此包。代码如下:
install.packages(“meta”)
library(meta)
2.2
在本教程中,我们的目的是研究某病毒在某特定人群中的阳性检出率,输入以下命令将数据录入进R中:
setwd(dir="C:/Users/Desktop") #可更改为自己的工作目录
data <- read.csv("data.csv",header = T)
原始数据如图1所示:
其中,Author为研究作者,Year为发表年份,Sample.size为样本量,Case为事件发生数,
03 R语言中的Meta 分析函数
3.1 R语言样本率的5种估计方法
可使用metaprop 函数进行率的合并,R 语言中关于样本率的估计方法有五种,根据样本率的分布决定使用哪种合并方法,五种估计方法如下:
sm ="PRAW",untransformed proportions(没有转换的原始率)。
sm="PLN", Log transformation(对数转换)。
sm="PLOGIT",Logit transformation(logit 转换)。
sm="PAS",Arcsine transformation(反正弦转换)。
sm=”PFT”,Freeman-Tukey Double arcsine transformation (Freeman-Tukey双重反正弦转换)
3.2 单个率的合并
在进行metaprop 分析之前,对原始率及按四种估计方法进行转换后的率进行正态性检验,根据检验结果选择接近正态分布的方法。transform 为对数据进行计算,p、log、logit、arcsin、dsrcsin 表示分
别按上述五种方法估计率的函数,shapiro.test 为正态性检验。命令如下:
rate <- transform(data,p=Case/Sample.size) #没有转换的原始率
shapiro.test(rate$p)
rate <- transform(data,log=log(Case/Sample.size)) #对数转换
shapiro.test(rate$log)
rate <- transform(data,logit=log((Case/Sample.size)/(1-Case/Sample.size))) #logit转换
shapiro.test(rate$logit)
rate <- transform(data,arcsin.size=asin(sqrt(Case/(Sample.size+1))))
shapiro.test(rate$arcsin) #反正弦转换
rate <- transform(data,darcsin=0.5*(asin(sqrt(Case/(Sample.size+1)))+asin((sqrt(Case+1)/(Sample.size+1))))) # Freeman-Tukey双重反正弦转换
shapiro.test(rate$darcsin)
metaprop 函数用于计算各个独立研究的率及95%可信区间,并按照率的分布选择合适的估计方法,得到合并的率及95%可信区间。命令如下:
meta1 <- metaprop(Case,Sample.size,data=data,studlab = paste(data$Author,data$Year,sep="-"),sm="PRAW",incr=0.5,allincr=TRUE,addincr=FALSE)
meta1
sm 表示估计样本率的方法,根据正态性检验结果选择合适的估计方法。本例原始率符合正态分布,因此直接选取是PRAW法估计原始率即可。
incr=0.5 表示当事件发生数为0时用0.5 来替代。
allincr=TRUE 表示至少有一个研究的事件发生数为0时,所有事件发生数都加上incr数值;为FALSE时,只对事件发生数为0 的研究加上incr 数值。
addincr=TRUE 表示无论是否有事件发生数为0的研究,所有研究都加上incr数值。
04 图形绘制与结果展示
4.1 森林图绘制
敲入命令:
jpeg("Forest plot.jpeg",height = 1300,width = 800)
forest(meta1,digits=3,family="sans",fontsize=9.5,lwd=2,col.diamond.fixed="lightslategray",col.diamond.lines.fixed="lightslategray",
col.diamond.random="maroon",col.diamond.lines.random="maroon",col.square="skyblue",col.study="lightslategray",
lty.fixed=4,plotwidth="8cm",colgap.forest.left="1cm",colgap.forest.right="1cm",just.forest="right",colgap.left="0.5cm",
colgap.right="0.5cm")
dev.off()
以上代码看起来繁琐复杂,但其目的是为了绘制一张精美漂亮的森林图,且因为数据较多,需要将图片完整的显示出来,如图2所示。对于以上代码的解释,可参考之前公,众号:全哥的学习生涯,的文章:如何用R画出精美漂亮的meta分析森林图。
需要注意的是,上述代码中,digits 表示保留的小数位数。合并的率及95%可信区间与原文一致,结果见图2。
4.2 漏斗图的绘制
funnel 画漏斗图,是用于识别发表偏倚或其他偏倚的方法,根据图形的不对称程度判断Meta 分析中偏倚的有无。
命令为:
funnel(meta1)
结果见图3。漏斗图是一种用主观定性的方法来判断有无偏倚,因此需要对漏斗图的不对称程度进行统计学检验。另外,本公众号还介绍了一种“超级漏斗图”,其能在统计学99%、95%和90%三个水平上对发表偏倚进行检测,详细教程可见公,众号:全哥的学习生涯。
4.3 漏斗图的不对称性检验
metabias是对漏斗图的不对称性进行统计学检验。
Egger 检验的命令为:
metabias(meta1,method=”linreg”)
根据结果输出窗口P 值大小,判断发表偏倚或其他偏倚是否具有统计学意义。
输出Egger 漏斗图的命令为
metabias (meta1,method ="linreg", plotit=TRUE,k.min=10)
结果见图4。
Method 为Egger 检验的方法;plotit 为画图函数;k.min 为进行检验时所需最小的单个研究的数量,默认10,如果研究在3~10 个之间可通过此函数进行调整。
4.4 敏感性分析
metainf 可以进行敏感性分析,计算分别剔除每个入选研究后合并的OR 值及95%可信区间。命令为:
jpeg("Sensitivity analysis results.jpeg",height = 1300,width = 800)
forest(metainf(meta1,pooled ="random"),comb.random=TRUE,family="sans",fontsize=9.5,lwd=2,col.diamond.fixed="lightslategray",col.diamond.lines.fixed="lightslategray", col.diamond.random="maroon",col.diamond.lines.random="maroon",col.square="skyblue",col.study="lightslategray", lty.fixed=4,plotwidth="8cm",colgap.forest.left="1cm",colgap.forest.right="1cm",just.forest="right",colgap.left="0.5cm",colgap.right="0.5cm")
dev.off()
结果见图5.
4.5 剪补法评价
命令如下:
tf1 <- trimfill(meta1,comb.random = TRUE)
summary(tf1)
funnel(tf1)
结果见图6。
05 单臂连续型变量的meta分析
此种类型的分析用到的函数为metamean()函数,命令如下:
meta2 <- metamean(n,mean,sd,data=data,studlab = paste(data$Author,data$Year,sep="-"))
meta2
forest(meta2,digits=2,family="sans",fontsize=9.5,lwd=2,col.diamond.fixed="lightslategray",col.diamond.lines.fixed="lightslategray",
col.diamond.random="maroon",col.diamond.lines.random="maroon",col.square="skyblue",col.study="lightslategray",
lty.fixed=4,plotwidth="8cm",colgap.forest.left="1cm",colgap.forest.right="1cm",just.forest="right",colgap.left="0.5cm",
colgap.right="0.5cm")
用到的数据如图7所示,其中,n为样本量,mean为均数,sd为标准差。
结果的森林图如图8所示,敏感性分析、发表偏倚分析、漏斗图、剪补法等命令同上,在此不作赘述。