如何用R语言实现单个率/单臂实验的meta分析(包括二分类变量与连续型变量教程)

各位读者朋友们大家好啊,最近有不少读者私信我说关于单臂实验的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所示:


图 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。

图 2

4.2 漏斗图的绘制

funnel 画漏斗图,是用于识别发表偏倚或其他偏倚的方法,根据图形的不对称程度判断Meta 分析中偏倚的有无。

命令为:

funnel(meta1)

结果见图3。漏斗图是一种用主观定性的方法来判断有无偏倚,因此需要对漏斗图的不对称程度进行统计学检验。另外,本公众号还介绍了一种“超级漏斗图”,其能在统计学99%、95%和90%三个水平上对发表偏倚进行检测,详细教程可见公,众号:全哥的学习生涯。

图 3

4.3 漏斗图的不对称性检验

 metabias是对漏斗图的不对称性进行统计学检验。

Egger 检验的命令为:

metabias(meta1,method=”linreg”)

根据结果输出窗口P 值大小,判断发表偏倚或其他偏倚是否具有统计学意义。

输出Egger 漏斗图的命令为

metabias (meta1,method ="linreg", plotit=TRUE,k.min=10)

结果见图4。

图 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.

图 5

4.5 剪补法评价

命令如下:

tf1 <- trimfill(meta1,comb.random = TRUE)

summary(tf1)

funnel(tf1)

结果见图6。

图 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为标准差。


图 7

结果的森林图如图8所示,敏感性分析、发表偏倚分析、漏斗图、剪补法等命令同上,在此不作赘述。

图 8

你可能感兴趣的:(如何用R语言实现单个率/单臂实验的meta分析(包括二分类变量与连续型变量教程))