作者简介:蒋文瀚(1987-),男,上海人,硕士研究生,从事卫生统计学研究。
目的介绍一般Meta分析方法在R语言meta包上的实现。方法 以实例说明了R语言中meta包的使用方法,并将其与STATA和RevMan作比较。结果 通过R语言的meta 包分析,从中可得到Meta分析固定效应模型与随机效应模型下的合并效应值、森林图和漏斗图,还可做影响性分析等。结论 R语言Meta分析的能力十分强大、使用简便,它与STATA的功能基本一致,其有些模块的操作要比STATA简单,而且它是一个完全免费的软件。
Objective To introduce the process of meta-analysis with the meta package of R software.Method With some examples the meta-analysis with R software was demonstrated, and the functions of meta package of R, Stata and RevMan were compared.Result With the meta package of the R software, the summary effect value of fixed or random model, and the forest and funnel plot was finished, and did the influence analysis.Conclusion R is a powerful and convenient software. The same function as the Stata, R language is more simple operation and free completely.
在国内, Meta分析的软件主要是Review Manager(简称RevMan)与STATA[1]。RevMan是免费的专用软件, 但其功能有限; STATA是一个收费的统计软件[2, 3], 它具有Meta分析的模块。本文主要对近几年来在统计学流行的免费软件包R语言下的meta包的功能作一些介绍。
R是由新西兰奥克兰大学的Ross Ihaka和Robert Gentleman开发的, 它是一套完整的数据处理、计算和制图的免费软件系统。其功能包括:数据存储和处理系统; 数组运算工具; 完整连贯的统计分析工具; 优秀的统计制图功能; R语言开源的设计, 让使用者可以根据需要设计添加自己的程序包, 然后上传到网络, 供大家使用, 这一特点使R语言成为统计功能最强大的软件[4, 5]。
在R语言下的meta包中可以完成二分类变量和连续性变量的Meta分析、累计Meta分析、Meta回归分析、单个研究的影响性分析、诊断试验的Meta分析、剂量反应关系Meta分析等Meta分析方法。可以绘制森林图、漏斗图、L’ Abbe图、Begg漏斗图、Egger漏斗图、剪补图等图形[5, 6]。
目前, R语言的最新版本为2.13, 可从网站http://www.r-project.org/下载。R语言的强大功能在于其强大的资源:包(package)。以Meta包说明R 语言中是如何加载包的。首先点菜单栏中“ 程序包” 下“ 安装程序包” 然后从当中选择一个安装的镜像, 如中国有4个镜像可供下载。安装完meta包后, 可用菜单栏中“ 加载程序包” 或使用命令: library (“ meta” )载入meta包以便调用程序分析。
R语言支持多种数据(Excel、SPSS、Splus、SAS等)的读取, 下面介绍Excel数据读取及自建数据集的方法。数据集为 Fleiss于1993年发表的文献[7]。探讨用Aspirin预防心肌梗塞后死亡的发生, 分析包括了美国1974-1988年间进行的7个关于Aspirin预防心肌梗塞后死亡率的研究。数据格式如表1。
![]() | 表1 1974-1988年美国7个关于Aspirin预防心肌梗塞后死亡率的研究 |
从Excel导入数据的方法有两种, 一种是利用剪贴板, 另一种是使用程序包RODBC。
首先介绍剪贴板的方法。打开Excel中电子表格, 选中需要的数据区域, 再复制到剪贴板中(使用CTRL+C)。然后在R中键入命令:
mydata < - read.delim(“ clipboard” )
第二种方法使用程序包RODBC, 从E盘R文件夹下导入名为Fleiss93的xls文件sheet1表。载入RODBC包, 在R中键入命令:
z< -odbcConnectExcel("E:/R/Fleiss93.xls")
mydata< -sqlFetch(z, "Sheet1")
除了直接导入数据集外, 还可以使用data.frame 命令建立一个R语言的数据集, 具体命令如下:
d < -data.frame(study=c(“ MRC-1” , …, ” ISIS-2” ), year=c(1974, 1976, …, 1988), …), n.c=c(624, 771, …, 8600))
这样就建立了一个名为d的数据集。
R的基础包中只包含了一些很基本的功能, 绝大多数的功能需要加载其他功能的包才能实现, 可进行Meta分析的包有meta、rmeta、metafor、metacor等。本文主要介绍meta 包。
metabin:两分类资料的Meta分析
metacont:连续资料的Meta分析
metacum:累计Meta分析
metainf:分析中单个研究的影响
metabias:分析中检验发表偏倚
metacor:关联性Meta分析
forest:森林图绘制命令
funnel:漏斗图绘制命令
限于篇幅, 本文仅对metabin、metacont、metainf的功能作介绍。
metabin命令能够计算两分类资料的RR、OR、RD和AS(反正弦)差异值, 并可用MH, 方差倒数和Peto方法联合估计效应值。具体命令格式如下:
metabin(event.e, n.e, event.c, n.c, studlab, data=NULL, subset=NULL, method="MH", sm=“ RR” , incr=0.5, allincr=FALSE, addincr=FALSE, allstudies=FALSE, MH.exact=FALSE, RR.cochrane=FALSE, level = 0.95, level.comb = level, comb.fixed=TRUE, comb.random =TRUE)
metabin命令中, event.e、 n.e、 event.c、 n.c分别为试验组事件发生例数、观测例数、对照组事件发生例数、观测例数。
data为选取分析的数据集, studlab为标签选项, subset为可选数据集中的子集。
method选项中可以选择“ Inverse” 、“ MH” 或者“ Peto” 方法联合估计效应值。sm选项可以选择联合估计的效应值为OR、RR、RD或者AS值。MH.exact选项, 当使用MH方法, 选择FALSE时如果四格表中出现0值, 程序会自动为其添加0.5, 但是根据Fleiss(Cooper & Hedges, 1994)的意见, 使用MH方法时没有必要对其进行校正。
incr选项后加数值, 意义为如果四格表中有0值, 用此数值来对其修正; allincr选项为TRUE时, 如果所有格子中至少有一个格子为0, 那么对所有格子进行incr校正, 当等于FALSE时, 只对0值格子进行校正; addincr选项意义为不论格子中是否有0值, 都进行incr校正。
allstudies选项是分析包含所有的研究, 不论研究中是否有0值(仅对sm为RR、OR时适用)。RR.cochrane选项是参照RevMan设定的, 当使用RR值为效应的研究中, 有格子数为0时, 试验人数和观察人数校正2倍的incr值。
level选项为选择单个研究的置信区间范围。level.comb命令为选择合并效应量的置信区间的范围。comb.fixed与comb.random分别为选择固定效应模型或随机效应模型。
metacont命令能够计算连续型资料的固定效应值或随机效应值, 合并效应量的权重为方差倒数, 命令提供了SMD和MD两种方法。具体命令格式如下:
metacont(n.e, mean.e, sd.e, n.c, mean.c, sd.c, studlab,
data=NULL, subset=NULL, sm="MD",
level = 0.95, level.comb = level,
comb.fixed=TRUE, comb.random=TRUE)
命令中, n.e、mean.e、sd.e分别为实验组的例数、均数、标准差, n.c、mean.c及sd.c分别为对照组的例数、均数及标准差。
sm选项可选择SMD或者MD两种方法来计算合并效应值; 其他命令解释同metabin。
metainf命令可以执行单个影响的Meta分析。逐一计算忽略单个研究时总效应值的变化。研究的排序可根据sortvar命令改变。如果不使用pooled命令, 程序会根据对象的信息自动选择联合估计的模型。
metainf(x, pooled, sortvar, level = xꇧlevel, level. comb = xꇧlevel.comb)
x为分析的对象; pooled选项为选择随机或固定效应模型, sortvar选项可对显示结果进行排序; level选项为选择单个研究的置信区间范围, level.comb选项为选择合并效应量的置信区间的范围。
以表1为例进行Meta分析, 具体R 命令如下:
metabin(event.e, n.e, event.c, n.c, data=Fleiss93, studlab=paste(study, year), sm="OR", comb.random=FALSE)
![]() | 表2 metabin产生结果 |
一致性检验结果提示, 纳入Meta 分析的各独立研究间尚未存在有统计学意义的异质性(P=0.126 9), 所以采用固定效应模型M-H, 总估计的效应值OR=0.896 9, 95%置信区间不包含OR=1, 所以, 统计学上可以作出Aspirin有预防心肌梗塞后死亡的作用的结论。漏斗图显示研究存在一定的发表偏倚。可以进一步结合线性回归模型检验来分析漏斗图不对称是否存在统计学意义, 及应用秩相关检验法检验被纳入的各独立研究其标准化效应是否为独立分布。
连续型的资料格式不同于两分类资料, 资料中只给出实验组与对照组的例数、治疗效应平均值及标准差。
对于连续型资料Meta分析的R命令如下:
meta1 < - metacont(n.e, mean.e, sd.e, n.c, mean.c, sd.c, data=Fleiss93cont, sm="SMD")
其结果与两分类资料较为相似就不再列出。
影响性分析的目的是可以粗略地看出每个研究对总估计效应的影响有多大, 使作者在下分析的结论时有所参考。
meta包中对影响性分析使用metainf命令, 在实行影响性分析之前, 需要利用metabin或metacont进行Meta分析的基础上进一步作影响性分析。以两份类资料为例, 先进行Meta分析后, 采用命令:
metainf(meta1)
其中meta1是采用metabin命令分析的结果。影响性分析的结果整理如表3。
![]() | 表3 单个研究影响的分析结果 |
对其绘制单个研究影响的森林图, 加以分析。命令如下:
forest(metainf(meta1, pooled="random"), comb. random = TRUE)
结果如图3。
由上图可知, ISIS-2研究的结果直接影响了本次Meta分析的结果, 其他研究有或无对结果的影响很小。
为了更好地理解R语言中meta包的功能, 将R、STATA与RevMan三种软件Meta分析功能进行比较。对于分类资料, 统计量为OR时, 三个软件均可用Mantel-Haenszel、方差倒数、Peto三种方法; 统计量为RR或危险差(risk difference)时, 可使用Mantel-Haenszel、Peto两种方法。对于发表偏倚, R与STATA有漏斗图、Begg检验法、Egger检验法与剪补法; RevMan只有漏斗图。
对于连续型变量, 三种软件均可使用WMD与SMD方法。对于数据录入格式, 三个软件可使用频数(a、b、c、d)、估计值与标准差、估计值与可信区间。三个软件还可同时执行的有森林图、分层的森林图、方差齐性检验、I2统计量及分层Meta分析。另外, Meta回归、L’ Abbe图、Galbraith图可以在R与STATA中实现, 但不能在RevMan中实现。
总的来说, 每个软件都有其自身的特点, RevMan简单易用, 容易上手, 但功能有限[2]。比如, 它缺乏Meta回归和诊断性试验的Meta分析功能; 不能绘制Begg和Egger图; STATA功能全面, 但其中有些操作命令比较繁琐, 比如STATA漏斗图的绘制需要效应量及其标准误[8], 即LogOR和SELogOR, 而R只需使用原始数据即可。另外STATA是收费软件, 虽然STATA有简易版与学生版, 价格较低廉, 可是能够处理的资料量与变量数有限[9], 而且STATA每年都要收费。与之相比, R开源性的特点, 使其不但功能强大全面, 而且完全免费, 与RevMan和STATA相比其绘图能力更为优秀, 各种统计模型无所不包。R在专业杂志中出现的频率越来越高, 可以预见R在Meta分析及其他统计分析中将会有着十分广阔的应用前景。
The authors have declared that no competing interests exist.
[1] |
|
[2] |
|
[3] |
|
[4] |
|
[5] |
|
[6] |
|
[7] |
|
[8] |
|
[9] |
|