R軟件是一款具備強大的數據處理和圖形繪制功能的免費軟件,其在Meta分析中的應用日趨廣泛。本文介紹了可以實現二分類變量的Meta分析、累積Meta分析、繪制森林圖和漏斗圖的rmeta程序包的使用。該程序包具有結構單純、命令函數參數較少、易于理解和掌握、功能較全面等優點,但現行版本有些功能存在局限性,有待發掘和完善。
引用本文: 原瑞霞, 張超, 羅樂, 曾憲濤, 牛玉明. 應用R軟件rmeta程序包實現Meta分析. 中國循證醫學雜志, 2015, 15(6): 735-740. doi: 10.7507/1672-2531.20150122 復制
醫學領域的Meta分析(meta-analysis)是循證醫學重要的證據來源之一,也是解決同一主題不同研究間不一致性的重要方法[1]。當前有眾多軟件可以實現Meta分析,非編程軟件以Cochrane協作網的官方軟件RevMan最為流行,編程軟件以Stata軟件功能最為完善[2, 3]。非編程軟件功能繁瑣有限,不利于大量數據的處理;而Stata軟件屬于收費軟件。R是一個公益性的開放平臺,具備強大的數據處理和圖形繪制功能,在Meta分析領域應用日益廣泛。當前應用最廣泛的R軟件程序包為meta程序包[4, 5]和metafor程序包[6, 7],此外尚有其他程序包,如rmeta程序包。rmeta程序包由Thomas Lumley研發,當前版本為v-2.16[8]。相較其他實現Meta分析的R程序包,rmeta程序包功能單純,主要用于實現二分類變量的Meta分析、累積Meta分析、效應量及其可信區間(CI)的Meta分析以及森林圖、漏斗圖等圖形的繪制。本文通過實例展示了rmeta程序包實現Meta分析的過程。
1 程序包安裝及加載
本文使用R軟件的版本為R 3.1.2版,R的下載及安裝見《R軟件Metafor程序包在Meta分析中的應用》一文[6]。
R安裝完成后,通過下述命令安裝與加載rmeta程序包:
install.packages("rmeta")
library(rmeta)
2 數據準備與加載
本文以《Efficacy of BCG Vaccine in The Prevention of Tuberculosis. Meta-analysis of The Published Literature》[9]一文中的數據(表 1)為例,演示rmeta程序包如何實現二分類數據的Meta分析。

將表 1的數據采用Excel 2007命名為“1.xlsx”存儲在E盤的R文件夾中。隨后就可以進行加載了。數據加載前還需安裝及加載xlsx程序包,因此整體命令為:
install.packages("xlsx")
library(xlsx)
bcg<-read.xlsx("E:/R/1.xlsx",2)
bcg
命令運行后,數據就加載成功了。第三行命令中的“2”是指Excel 2007中的“Sheet 2”表格。
3 數據分析及圖形繪制
數據加載完成后即可執行數據分析。rmeta程序包在進行二分類資料的數據分析時,可根據實際情況選擇使用程序包提供的“meta.MH()”函數或“meta.DSL()”函數進行,兩種函數的具體命令及參數涵義見表 2。其中“meta.MH()”函數是基于Manthel-Haenszel法實現的,適用于納入研究間不存在異質性采用固定效應模型進行Meta分析的情況,相反則需選用基于Dersimonian-Laird法的“meta.DSL()”函數采用隨機效應模型進行。rmeta程序包中關于適用于固定效應模型計算的Mantel-Haensel法和Peto法兩種計算方法的表述如下:對于二分類資料,至少有兩種方法適用于固定效應模型。Peto法近似Mantel-Haenszel方法,計算更加簡便;但當任一組中事件發生數小于5時,Mantel-Haenszel方法具有優越性。

筆者建議一般情況下,先行選擇隨機效應模型,若無異質性或異質性可接受,再改用固定效應模型。本例使用隨機效應模型的數據分析命令如下:
BCG<-meta.DSL(a+b,c+d,a,c,names=paste(authors,year,sep="--"),data=bcg,statistic="RR")
summary(BCG)
命令運行后,結果自動出現(表 3)。根據χ2及P值判斷,提示納入研究間存在異質性(χ2=12及P<0.001),故本Meta分析采用隨機效應模型的分析結果。結果顯示,使用BCG可以使結核的病死率風險降低51%[RR=0.49,95%CI(0.34,0.7)]。

在數據分析的基礎上,可進行圖形繪制。首先,使用“meta.DSL”函數的“plot”命令實現,命令為:
plot(BCG,summlabel="SummaryRR",colors=meta.colors(summary="red",lines="black",box="black"))
plot
命令運行后生成的圖形見圖 1。該圖非常簡單,若要得到更為詳細的森林圖,則采用rmeta程序包的“forestplot”函數實現;漏斗圖則通過“funnelplot”函數實現,詳見后述。

4 累積Meta分析
rmeta程序包中的“cummeta()”函數提供了累積Meta分析的計算。“cummeta()”函數的具體命令及參數與meta.MH()函數等相同或相似,此處不再贅述,讀者可通過“help()”函數獲得更多信息。現仍以表 1數據為例,演示cummeta()函數實現累積Meta分析的過程及結果的解讀。因該函數當前只能基于固定效應模型進行圖形的繪制,故需選擇固定效應模型進行分析,具體函數命令如下:
bcg<-read.xlsx(“E:/R/1.xlsx”,2)
BCG<-cummeta(a+b,c+d,a,c,names=authors,data=bcg,statistic="RR",method="meta.MH")
summary(BCG)
plot(BCG)
結果見表 4和圖 2,其中表 4給出了單個研究的RR值及其95%CI;圖 2是plot()函數生成的累積Meta分析圖形。


在使用rmeta程序包實現累積Meta分析的過程中需要注意兩點:在使用cummeta()函數進行累計Meta分析之前,需要先進行異質性檢驗,以便對method參數進行正確的選取;cummeta()函數實現累積Meta分析,并未給出每次累積Meta分析的Z值及P值,讀者如有需要,可以使用metafor()等程序包。
5 森林圖與漏斗圖的繪制
rmeta程序包通過“forestplot()函數”和“funnelplot()函數”繪制森林圖和漏斗圖,函數具體參數格式詳見表 5。

以表 1中的數據為例,演示“forestplot()”函數及“funnelplot()”函數制作森林圖和漏斗圖的方法。
5.1 “forestplot()”函數
使用者可根據需求及愛好修改函數參數來繪制出更加精美的圖形。該函數當前只能基于固定效應模型進行圖形的繪制,因先前分析使用的是隨機效應模型,故需要先行使用固定效應模型進行分析,之后再定義labeltext參數,然后再使用函數繪制。本例具體命令如下:
BCG<-meta.MH(a+b,c+d,a,c,names=paste(authors,year,sep="--"),data=bcg,statistic="RR")labeltext<-cbind(c("","Study",BCG$names,NA,"Summary RR"),c("死亡","(BCG組)",bcg$a,NA,NA),c("死亡","(對照組)",bcg$c,NA,NA),c("","RR",format(exp(BCG$logRR),digits=2) ,NA,format(exp(BCG$logMH),digits=2) ))
m<- c(NA,NA,BCG$logRR,NA,BCG$logMH)
l<- m-c(NA,NA,BCG$selogRR,NA,BCG$selogMH)*2
u<- m+c(NA,NA,BCG$selogRR,NA,BCG$selogMH)*2
forestplot(labeltext,m,l,u,zero=0,is.summary=c(TRUE,TRUE,rep(FALSE,8) ,TRUE),clip=c(log(0.1) ,log(10) ),xlog=TRUE,boxsize=0.75,col=meta.colors(box="royalblue",line="black",summary="red"))
命令運行后,森林圖見圖 3。

5.2 “forestplot()”函數
同樣,通過定義funnelplot()的參數,可以繪制出更加定制化的圖形。但該函數當前只能實現基于固定效應模型且統計量為“OR”時漏斗圖的繪制,因先前分析使用的是隨機效應模型,故需要先行使用固定效應模型進行分析,之后再定義x參數,然后再使用函數繪制。本例具體命令如下:
BCG<-meta.MH(a+b,c+d,a,c,n ames=paste
(authors,year,sep="--"),data=bcg,statistic="OR")
funnelplot(BCG$logOR,BCG$selogOR)
funnelplot(BCG$logOR,BCG$selogOR,plot.conf=TRUE,summ=BCG$logMH,
mirror=TRUE)
funnelplot(BCG,plot.conf=TRUE)
命令運行后,生成的漏斗圖見圖 4。

6 結語
目前,R軟件中能夠實現Meta分析的程序包有很多,囊括了幾乎所有的Meta分析類型,如傳統的頭對頭比較的Meta分析[4, 6]、間接比較與網狀Meta分析[10, 11]、單組率的Meta分析[12]、診斷準確性試驗的Meta分析[13-15]、劑量-反應關系的Meta分析[16]等。這些既有的程序包均在不斷地發展與完善中,新的程序包也在不斷地被研發出來,rmeta程序包只是其中之一。通過本文的演示可以看出當前rmeta程序包具有以下特點:① 功能簡單,主要應用于對二分類變量的Meta分析;② R軟件強大的繪圖功能在rmeta程序包中體現,用戶可根據實際需要和喜好定義參數,繪制個性化圖形;③ 與meta程序包[4]、metafor程序包[6]相比,在異質性處理和繪制森林圖等功能上,rmeta程序包存在局限性。
R軟件功能強大,在行Meta分析時,盡管rmeta程序包缺乏相關的功能,但可通過其他程序包聯合實現。對于使用者而言,只要具備了Meta分析的方法學基礎,掌握R命令的編寫,即可得心應手地使用R軟件得到需要的分析和圖形。此外,rmeta程序包具有其自身的特點與優勢,相信隨著后期的完善,其功能必將日益增強。與RevMan軟件相比,R為編程軟件,功能更加強大與靈活,更便于調整圖形的架構,適用于更多的Meta分析類型[17, 18]。與Stata相比,兩者皆為編程軟件,但在很多新型的Meta分析類型上,R的功能更為強大,且R對圖形的編輯更為靈活、容易[19]。在具體使用各款軟件時,建議使用者結合自己的愛好與涉及的Meta分析類型進行選用。
醫學領域的Meta分析(meta-analysis)是循證醫學重要的證據來源之一,也是解決同一主題不同研究間不一致性的重要方法[1]。當前有眾多軟件可以實現Meta分析,非編程軟件以Cochrane協作網的官方軟件RevMan最為流行,編程軟件以Stata軟件功能最為完善[2, 3]。非編程軟件功能繁瑣有限,不利于大量數據的處理;而Stata軟件屬于收費軟件。R是一個公益性的開放平臺,具備強大的數據處理和圖形繪制功能,在Meta分析領域應用日益廣泛。當前應用最廣泛的R軟件程序包為meta程序包[4, 5]和metafor程序包[6, 7],此外尚有其他程序包,如rmeta程序包。rmeta程序包由Thomas Lumley研發,當前版本為v-2.16[8]。相較其他實現Meta分析的R程序包,rmeta程序包功能單純,主要用于實現二分類變量的Meta分析、累積Meta分析、效應量及其可信區間(CI)的Meta分析以及森林圖、漏斗圖等圖形的繪制。本文通過實例展示了rmeta程序包實現Meta分析的過程。
1 程序包安裝及加載
本文使用R軟件的版本為R 3.1.2版,R的下載及安裝見《R軟件Metafor程序包在Meta分析中的應用》一文[6]。
R安裝完成后,通過下述命令安裝與加載rmeta程序包:
install.packages("rmeta")
library(rmeta)
2 數據準備與加載
本文以《Efficacy of BCG Vaccine in The Prevention of Tuberculosis. Meta-analysis of The Published Literature》[9]一文中的數據(表 1)為例,演示rmeta程序包如何實現二分類數據的Meta分析。

將表 1的數據采用Excel 2007命名為“1.xlsx”存儲在E盤的R文件夾中。隨后就可以進行加載了。數據加載前還需安裝及加載xlsx程序包,因此整體命令為:
install.packages("xlsx")
library(xlsx)
bcg<-read.xlsx("E:/R/1.xlsx",2)
bcg
命令運行后,數據就加載成功了。第三行命令中的“2”是指Excel 2007中的“Sheet 2”表格。
3 數據分析及圖形繪制
數據加載完成后即可執行數據分析。rmeta程序包在進行二分類資料的數據分析時,可根據實際情況選擇使用程序包提供的“meta.MH()”函數或“meta.DSL()”函數進行,兩種函數的具體命令及參數涵義見表 2。其中“meta.MH()”函數是基于Manthel-Haenszel法實現的,適用于納入研究間不存在異質性采用固定效應模型進行Meta分析的情況,相反則需選用基于Dersimonian-Laird法的“meta.DSL()”函數采用隨機效應模型進行。rmeta程序包中關于適用于固定效應模型計算的Mantel-Haensel法和Peto法兩種計算方法的表述如下:對于二分類資料,至少有兩種方法適用于固定效應模型。Peto法近似Mantel-Haenszel方法,計算更加簡便;但當任一組中事件發生數小于5時,Mantel-Haenszel方法具有優越性。

筆者建議一般情況下,先行選擇隨機效應模型,若無異質性或異質性可接受,再改用固定效應模型。本例使用隨機效應模型的數據分析命令如下:
BCG<-meta.DSL(a+b,c+d,a,c,names=paste(authors,year,sep="--"),data=bcg,statistic="RR")
summary(BCG)
命令運行后,結果自動出現(表 3)。根據χ2及P值判斷,提示納入研究間存在異質性(χ2=12及P<0.001),故本Meta分析采用隨機效應模型的分析結果。結果顯示,使用BCG可以使結核的病死率風險降低51%[RR=0.49,95%CI(0.34,0.7)]。

在數據分析的基礎上,可進行圖形繪制。首先,使用“meta.DSL”函數的“plot”命令實現,命令為:
plot(BCG,summlabel="SummaryRR",colors=meta.colors(summary="red",lines="black",box="black"))
plot
命令運行后生成的圖形見圖 1。該圖非常簡單,若要得到更為詳細的森林圖,則采用rmeta程序包的“forestplot”函數實現;漏斗圖則通過“funnelplot”函數實現,詳見后述。

4 累積Meta分析
rmeta程序包中的“cummeta()”函數提供了累積Meta分析的計算。“cummeta()”函數的具體命令及參數與meta.MH()函數等相同或相似,此處不再贅述,讀者可通過“help()”函數獲得更多信息。現仍以表 1數據為例,演示cummeta()函數實現累積Meta分析的過程及結果的解讀。因該函數當前只能基于固定效應模型進行圖形的繪制,故需選擇固定效應模型進行分析,具體函數命令如下:
bcg<-read.xlsx(“E:/R/1.xlsx”,2)
BCG<-cummeta(a+b,c+d,a,c,names=authors,data=bcg,statistic="RR",method="meta.MH")
summary(BCG)
plot(BCG)
結果見表 4和圖 2,其中表 4給出了單個研究的RR值及其95%CI;圖 2是plot()函數生成的累積Meta分析圖形。


在使用rmeta程序包實現累積Meta分析的過程中需要注意兩點:在使用cummeta()函數進行累計Meta分析之前,需要先進行異質性檢驗,以便對method參數進行正確的選取;cummeta()函數實現累積Meta分析,并未給出每次累積Meta分析的Z值及P值,讀者如有需要,可以使用metafor()等程序包。
5 森林圖與漏斗圖的繪制
rmeta程序包通過“forestplot()函數”和“funnelplot()函數”繪制森林圖和漏斗圖,函數具體參數格式詳見表 5。

以表 1中的數據為例,演示“forestplot()”函數及“funnelplot()”函數制作森林圖和漏斗圖的方法。
5.1 “forestplot()”函數
使用者可根據需求及愛好修改函數參數來繪制出更加精美的圖形。該函數當前只能基于固定效應模型進行圖形的繪制,因先前分析使用的是隨機效應模型,故需要先行使用固定效應模型進行分析,之后再定義labeltext參數,然后再使用函數繪制。本例具體命令如下:
BCG<-meta.MH(a+b,c+d,a,c,names=paste(authors,year,sep="--"),data=bcg,statistic="RR")labeltext<-cbind(c("","Study",BCG$names,NA,"Summary RR"),c("死亡","(BCG組)",bcg$a,NA,NA),c("死亡","(對照組)",bcg$c,NA,NA),c("","RR",format(exp(BCG$logRR),digits=2) ,NA,format(exp(BCG$logMH),digits=2) ))
m<- c(NA,NA,BCG$logRR,NA,BCG$logMH)
l<- m-c(NA,NA,BCG$selogRR,NA,BCG$selogMH)*2
u<- m+c(NA,NA,BCG$selogRR,NA,BCG$selogMH)*2
forestplot(labeltext,m,l,u,zero=0,is.summary=c(TRUE,TRUE,rep(FALSE,8) ,TRUE),clip=c(log(0.1) ,log(10) ),xlog=TRUE,boxsize=0.75,col=meta.colors(box="royalblue",line="black",summary="red"))
命令運行后,森林圖見圖 3。

5.2 “forestplot()”函數
同樣,通過定義funnelplot()的參數,可以繪制出更加定制化的圖形。但該函數當前只能實現基于固定效應模型且統計量為“OR”時漏斗圖的繪制,因先前分析使用的是隨機效應模型,故需要先行使用固定效應模型進行分析,之后再定義x參數,然后再使用函數繪制。本例具體命令如下:
BCG<-meta.MH(a+b,c+d,a,c,n ames=paste
(authors,year,sep="--"),data=bcg,statistic="OR")
funnelplot(BCG$logOR,BCG$selogOR)
funnelplot(BCG$logOR,BCG$selogOR,plot.conf=TRUE,summ=BCG$logMH,
mirror=TRUE)
funnelplot(BCG,plot.conf=TRUE)
命令運行后,生成的漏斗圖見圖 4。

6 結語
目前,R軟件中能夠實現Meta分析的程序包有很多,囊括了幾乎所有的Meta分析類型,如傳統的頭對頭比較的Meta分析[4, 6]、間接比較與網狀Meta分析[10, 11]、單組率的Meta分析[12]、診斷準確性試驗的Meta分析[13-15]、劑量-反應關系的Meta分析[16]等。這些既有的程序包均在不斷地發展與完善中,新的程序包也在不斷地被研發出來,rmeta程序包只是其中之一。通過本文的演示可以看出當前rmeta程序包具有以下特點:① 功能簡單,主要應用于對二分類變量的Meta分析;② R軟件強大的繪圖功能在rmeta程序包中體現,用戶可根據實際需要和喜好定義參數,繪制個性化圖形;③ 與meta程序包[4]、metafor程序包[6]相比,在異質性處理和繪制森林圖等功能上,rmeta程序包存在局限性。
R軟件功能強大,在行Meta分析時,盡管rmeta程序包缺乏相關的功能,但可通過其他程序包聯合實現。對于使用者而言,只要具備了Meta分析的方法學基礎,掌握R命令的編寫,即可得心應手地使用R軟件得到需要的分析和圖形。此外,rmeta程序包具有其自身的特點與優勢,相信隨著后期的完善,其功能必將日益增強。與RevMan軟件相比,R為編程軟件,功能更加強大與靈活,更便于調整圖形的架構,適用于更多的Meta分析類型[17, 18]。與Stata相比,兩者皆為編程軟件,但在很多新型的Meta分析類型上,R的功能更為強大,且R對圖形的編輯更為靈活、容易[19]。在具體使用各款軟件時,建議使用者結合自己的愛好與涉及的Meta分析類型進行選用。