R軟件pcnetmeta程序包是一款基于貝葉斯理論實現網狀Meta分析的程序包,其融合了JAGS軟件的優勢計算功能與R軟件特有的數據整合和強大的圖形繪制等功能。pcnetmeta程序包通過調用JAGS軟件來實現運算,提供了3種不同模型供操作者選取,每種模型均給出3種不同的效應量(RR、OR及RD)結果;同時可以繪制多種圖形,極大程度上滿足了使用者處理復雜網狀Meta分析的客觀需求。本文以實例方式展現該程序包的完整操作流程。
引用本文: 李勝, 張超, 杜亮, 張永剛, 孫鳳, 曾憲濤. 應用R軟件pcnetmeta程序包實現網狀Meta分析. 中國循證醫學雜志, 2015, 15(2): 230-235. doi: 10.7507/1672-2531.20150039 復制
JAGS(Just Another Gibbs Sampler)軟件是一款自身獨立擁有一套貝葉斯理論運算函數及公式的編程軟件,具有模型構建靈活和數據處理能力較強的特點,但其尚不完善的數據輸出與圖形繪制功能極大程度上限制了JAGS的使用與推廣 [1-4]。為完善這一不足,研發者們借助R軟件研發了R2jags、rjags及runjags等程序包 [4]以調用JAGS軟件來同時實現數據運算與圖形繪制。這些程序包雖具有操作簡單、命令簡潔、數據讀取和匯總及結果圖形繪制功能均較完善的特點,但對于網狀Meta分析 [5-10]依舊存在模型選擇困難、圖形功能不完善且操作繁瑣等缺陷 [4]。在這樣的需求背景下,一款專門針對處理網狀Meta分析數據的pcnetmeta程序包 [11]被研發出來。本文以實例展示該程序包的具體操作,詳細數據見《R軟件R2WinBUGS程序包在網狀Meta分析中的應用》一文 [12]。
1 程序包安裝與加載
本文使用R軟件版本為R-3.1.1,下載及安裝可參閱《R軟件Metafor程序包在Meta分析中的應用》一文 [13]。因pcnetmeta程序包內部數據運算是基于貝葉斯理論且依賴于JAGS軟件實現的,因此在安裝與加載pcnetmeta程序包的同時還需安裝與加載rjags程序包與JAGS軟件。本文使用的版本為JAGS-3.4.0,下載與安裝方式可參閱《R軟件調用JAGS軟件實現網狀Meta分析》一文 [4]。
R與JAGS安裝完成之后,再進行下續操作以安裝及加載相關的程序包:
① pcnetmeta程序包的具體安裝與加載代碼如下:
install.packages(“pcnetmeta”)
library(“pcnetmeta”)
② rjags程序包的具體安裝與加載代碼如下:
install.packages(“rjags”)
library(“rjags”)
2 數據預處理與加載
pcnetmeta程序包在數據的加載上與其他程序包一致 [4, 12, 13],但數據的排列格式有所不同,需要先行處理。處理后的數據見表 1。
接著,運行下述命令加載表 1的數據:
data<-read.table(“C:/Users/Administrator/Desktop/Rwork/pcnetmetadata.txt”,header=TRUE,sep=””,na.strings=”NA”,dec=”.”,strip.white=TRUE)

3 數據運算
在完成數據加載后,即可進行數據的運算。
在執行運算代碼前,需將數據加載至內存中,以便下一步代碼直接使用,代碼為:
attach(data)
接著用下述代碼完成數據運算:
nma.ab(s.id = sid,t.id = tid,event.n = r,total.n = n,model = “het1”,f.name = “pcnetmeta_het1_”,n.iter = 10000,n.burnin = 5000,n.chains = 2,trtname = c(“Placebo”,”Bupropion”,”Citalopram”,”Desvenlafaxine”,”Duloxetine”,”Escitalopram”,”Fluoxetine”,”Fluvoxamine”,”Mirtazapine”,”Nefazodone”,”Paroxetine”,”Sertraline”,”Trazodone”,”Velafaxine”),trace = TRUE,postdens = TRUE)
上述執行數據運算代碼中,“s.id、t.id、r和n”均與data數據集(表 1)中的數據一一對應;“model”為模型的選擇,本處應有固定模型(hom)、隨機模型(het1)和Wishart分布倒方差-協方差隨機模型(het2)這3種簡易的JAGS軟件模型,此處選擇隨機效應模型(het1);“f.name”為生成結果文件的名稱;“n.iter、n.burnin和n.chains”依次為迭代次數、退火次數及運算鏈數;“trtname”為對應藥物的編號;“trace”為是否繪制軌跡圖;“postdens”為是否繪制單個干預的效應密度圖。值得注意的是,上述所有文本結果均會以“.stat”格式的文件儲存,圖形將以“.pdf”格式儲存。
4 結果匯總及讀取
運算完成后,即可一一展示相關結果。在上述計算中,該程序包可同時提供RR(relative risk)、OR(odds ratio)和RD(risk difference)這3種效應量,結果均儲存在“.stat”格式的文件內,可使用“read.table”命令以表格的形式讀取。代碼如下:
create.tab(summary.stat = read.table(“pcnetmeta_het1_Summary.stat”,compare = 6,header = TRUE),type = “CI”,f.name = “pcnetmeta_het1_”,trtname = c(“Placebo”,”Bupropion”,”Citalopram”,”Desvenlafaxine”,”Duloxetine”,”Escitalopram”,”Fluoxetine”,”Fluvoxamine”,”Mirtazapine”,”Nefazodone”,”Paroxetine”,”Sertraline”,”Trazodone”,”Velafaxine”))
上述代碼中:“pcnetmeta_het1_Summary.stat”為上一步生成的結果文件;“compare”為去提取效應量選擇,其取值為1~6,“1”代表上三角為RR值、下三角為RD值,“2”代表上三角為RD值、下三角為RR值,“3”代表上三角為RR值、下三角為OR值,“4”代表上三角為OR值、下三角為RR值,“5”代表上三角為RD值、下三角為OR值,“6”代表上三角為OR值、下三角為RD值,本處選擇“6”;“type”為提取結果文件中的可信區間;“trtname”為干預措施的命名。具體結果見表 2。

5 繪制圖形
pcnetmeta程序包自身可繪制相應的圖形,如常見的軌跡圖、單個研究的密度圖與效應圖、網狀關系圖 [14, 15]。
5.1 軌跡圖與密度圖
軌跡圖與單個研究的密度圖可以在數據運算部分直接生成,不需另外的命令進行繪制,生成的圖形見圖 1與圖 2。


5.2 單個研究效應圖
單個研究效應圖(圖 3)需要在數據運算完成后才能繪制,繪制命令如下:
ci.plot(summary.stat = read.table(“pcnetmeta_het1_Summary.stat”,header = TRUE),graphtitle = “CI plot of estimated event rate for network pcnetmeta”,trtname = c(“Placebo”,”Bupropion”,”Citalopram”,”Desvenlafaxine”,”Duloxetine”,”Escitalopram”,”Fluoxetine”,”Fluvoxamine”,”Mirtazapine”,”Nefazodone”,”Paroxetine”,”Sertraline”,”Trazodone”,”Velafaxine”))

5.3 網狀關系圖
pcnetmeta程序包具有兩種繪制網狀關系圖 [14]的方法。
方法1,代碼如下,繪制的為簡易網狀關系圖(圖 4):
t1<-c(1,1,2,1,1,2,1,1,2,1,1,1,1,1,1,4,1,1,1,1,1,5,1,1,5,1,1,5,1,1,5,1,1,1,7,1,1,7,1,1,7,1,1,1,1,1,1,1,1,1,1,2,2,2,3,3,5,5,5,6,6,6,6,7,7,7,7,7,7,7,11,7,7,7,7,7,7,7,7,9,9,10,10,11,12,12,12,12)
t2<-c(2,7,7,2,12,12,2,12,12,4,4,4,4,4,5,5,5,5,5,5,6,6,5,7,7,5,11,11,5,11,11,7,7,11,11,7,14,14,7,14,14,8,10,10,11,12,12,12,12,12,14,7,12,13,6,8,6,6,11,7,11,12,14,9,10,11,11,11,11,12,12,12,12,14,14,14,14,14,14,11,13,11,12,13,13,14,14,14)
nma.networkplot(c1 = t1,c2 = t2,percomparison = TRUE)
上述代碼,t1與t2分別表示配對的干預措施,編號與表 1下標識一致。

圖 4中各節點為該節點干預措施比較數目,線條為配對比較的數量,“treat.1-14”與表 1中的藥物一一對應。
目前該程序包自身無法實現調整及節點藥物標識。為了更好詮釋網狀數據間的關系及對圖形的修整,該程序包也提供另一種繪制方法來實現,具體命令與圖形(圖 5)如下:
nma.networkplot(c1 = sid,c2 = tid,percomparison = FALSE,weight = TRUE,graphtitle = “Network Plot”,trtname = c(“Placebo”,”Bupropion”,”Citalopram”,”Desvenlafaxine”,”Duloxetine”,”Escitalopram”,”Fluoxetine”,”Fluvoxamine”,”Mirtazapine”,”Nefazodone”,”Paroxetine”,”Sertraline”,”Trazodone”,”Velafaxine”))

圖 5除了標注各節點的藥物外,還標注各線條間配對比較的研究數目,其他與圖 4中各節點信息相一致;操作者可通過VAR1變量來設置各節點信息。圖 5較圖 4呈現了更加詳細的數據信息且各節點所承載的信息量更加豐富、完善。
6 結語
R軟件pcnetmeta程序包采用簡潔代碼輸入的方式、通過調用JAGS軟件來實現數據運算。這充分結合了JAGS軟件的優勢計算功能、R軟件特有的數據整合與強大的圖形繪制等功能,從而實現了結果便利輸出與配套優質結果圖的繪制。
在計算方面,該程序包提供了3種不同模型供操作者選取,每種模型均給出3種不同的效應量(RR、OR及RD)結果。在圖形繪制方面,軌跡圖與單個干預措施密度圖均可在計算當中自動生成,較為簡便;單個干預效應圖與網狀關系圖則需使用代碼完成,其中網狀關系圖繪制的自由度與開放性更高,對于操作者而言顯得更加靈活。
盡管該程序包功能較為齊全且部分較為開放,但其在數據運算模型選取上仍相對封閉 [15]。再者,其運算是使用R調用JAGS軟件來實現的,這無疑會受限于兩種軟件對內存的消耗,特別是在迭代次數過多時,計算機可能出現內存緊張,甚至無法分配的問題,從而導致死機等現象。第三,圖形繪制功能仍需進一步擴充與完善,方能滿足操作者的需求。相信這些局限性將會隨著方法學的不斷進展與實踐的深入而得到解決。
JAGS(Just Another Gibbs Sampler)軟件是一款自身獨立擁有一套貝葉斯理論運算函數及公式的編程軟件,具有模型構建靈活和數據處理能力較強的特點,但其尚不完善的數據輸出與圖形繪制功能極大程度上限制了JAGS的使用與推廣 [1-4]。為完善這一不足,研發者們借助R軟件研發了R2jags、rjags及runjags等程序包 [4]以調用JAGS軟件來同時實現數據運算與圖形繪制。這些程序包雖具有操作簡單、命令簡潔、數據讀取和匯總及結果圖形繪制功能均較完善的特點,但對于網狀Meta分析 [5-10]依舊存在模型選擇困難、圖形功能不完善且操作繁瑣等缺陷 [4]。在這樣的需求背景下,一款專門針對處理網狀Meta分析數據的pcnetmeta程序包 [11]被研發出來。本文以實例展示該程序包的具體操作,詳細數據見《R軟件R2WinBUGS程序包在網狀Meta分析中的應用》一文 [12]。
1 程序包安裝與加載
本文使用R軟件版本為R-3.1.1,下載及安裝可參閱《R軟件Metafor程序包在Meta分析中的應用》一文 [13]。因pcnetmeta程序包內部數據運算是基于貝葉斯理論且依賴于JAGS軟件實現的,因此在安裝與加載pcnetmeta程序包的同時還需安裝與加載rjags程序包與JAGS軟件。本文使用的版本為JAGS-3.4.0,下載與安裝方式可參閱《R軟件調用JAGS軟件實現網狀Meta分析》一文 [4]。
R與JAGS安裝完成之后,再進行下續操作以安裝及加載相關的程序包:
① pcnetmeta程序包的具體安裝與加載代碼如下:
install.packages(“pcnetmeta”)
library(“pcnetmeta”)
② rjags程序包的具體安裝與加載代碼如下:
install.packages(“rjags”)
library(“rjags”)
2 數據預處理與加載
pcnetmeta程序包在數據的加載上與其他程序包一致 [4, 12, 13],但數據的排列格式有所不同,需要先行處理。處理后的數據見表 1。
接著,運行下述命令加載表 1的數據:
data<-read.table(“C:/Users/Administrator/Desktop/Rwork/pcnetmetadata.txt”,header=TRUE,sep=””,na.strings=”NA”,dec=”.”,strip.white=TRUE)

3 數據運算
在完成數據加載后,即可進行數據的運算。
在執行運算代碼前,需將數據加載至內存中,以便下一步代碼直接使用,代碼為:
attach(data)
接著用下述代碼完成數據運算:
nma.ab(s.id = sid,t.id = tid,event.n = r,total.n = n,model = “het1”,f.name = “pcnetmeta_het1_”,n.iter = 10000,n.burnin = 5000,n.chains = 2,trtname = c(“Placebo”,”Bupropion”,”Citalopram”,”Desvenlafaxine”,”Duloxetine”,”Escitalopram”,”Fluoxetine”,”Fluvoxamine”,”Mirtazapine”,”Nefazodone”,”Paroxetine”,”Sertraline”,”Trazodone”,”Velafaxine”),trace = TRUE,postdens = TRUE)
上述執行數據運算代碼中,“s.id、t.id、r和n”均與data數據集(表 1)中的數據一一對應;“model”為模型的選擇,本處應有固定模型(hom)、隨機模型(het1)和Wishart分布倒方差-協方差隨機模型(het2)這3種簡易的JAGS軟件模型,此處選擇隨機效應模型(het1);“f.name”為生成結果文件的名稱;“n.iter、n.burnin和n.chains”依次為迭代次數、退火次數及運算鏈數;“trtname”為對應藥物的編號;“trace”為是否繪制軌跡圖;“postdens”為是否繪制單個干預的效應密度圖。值得注意的是,上述所有文本結果均會以“.stat”格式的文件儲存,圖形將以“.pdf”格式儲存。
4 結果匯總及讀取
運算完成后,即可一一展示相關結果。在上述計算中,該程序包可同時提供RR(relative risk)、OR(odds ratio)和RD(risk difference)這3種效應量,結果均儲存在“.stat”格式的文件內,可使用“read.table”命令以表格的形式讀取。代碼如下:
create.tab(summary.stat = read.table(“pcnetmeta_het1_Summary.stat”,compare = 6,header = TRUE),type = “CI”,f.name = “pcnetmeta_het1_”,trtname = c(“Placebo”,”Bupropion”,”Citalopram”,”Desvenlafaxine”,”Duloxetine”,”Escitalopram”,”Fluoxetine”,”Fluvoxamine”,”Mirtazapine”,”Nefazodone”,”Paroxetine”,”Sertraline”,”Trazodone”,”Velafaxine”))
上述代碼中:“pcnetmeta_het1_Summary.stat”為上一步生成的結果文件;“compare”為去提取效應量選擇,其取值為1~6,“1”代表上三角為RR值、下三角為RD值,“2”代表上三角為RD值、下三角為RR值,“3”代表上三角為RR值、下三角為OR值,“4”代表上三角為OR值、下三角為RR值,“5”代表上三角為RD值、下三角為OR值,“6”代表上三角為OR值、下三角為RD值,本處選擇“6”;“type”為提取結果文件中的可信區間;“trtname”為干預措施的命名。具體結果見表 2。

5 繪制圖形
pcnetmeta程序包自身可繪制相應的圖形,如常見的軌跡圖、單個研究的密度圖與效應圖、網狀關系圖 [14, 15]。
5.1 軌跡圖與密度圖
軌跡圖與單個研究的密度圖可以在數據運算部分直接生成,不需另外的命令進行繪制,生成的圖形見圖 1與圖 2。


5.2 單個研究效應圖
單個研究效應圖(圖 3)需要在數據運算完成后才能繪制,繪制命令如下:
ci.plot(summary.stat = read.table(“pcnetmeta_het1_Summary.stat”,header = TRUE),graphtitle = “CI plot of estimated event rate for network pcnetmeta”,trtname = c(“Placebo”,”Bupropion”,”Citalopram”,”Desvenlafaxine”,”Duloxetine”,”Escitalopram”,”Fluoxetine”,”Fluvoxamine”,”Mirtazapine”,”Nefazodone”,”Paroxetine”,”Sertraline”,”Trazodone”,”Velafaxine”))

5.3 網狀關系圖
pcnetmeta程序包具有兩種繪制網狀關系圖 [14]的方法。
方法1,代碼如下,繪制的為簡易網狀關系圖(圖 4):
t1<-c(1,1,2,1,1,2,1,1,2,1,1,1,1,1,1,4,1,1,1,1,1,5,1,1,5,1,1,5,1,1,5,1,1,1,7,1,1,7,1,1,7,1,1,1,1,1,1,1,1,1,1,2,2,2,3,3,5,5,5,6,6,6,6,7,7,7,7,7,7,7,11,7,7,7,7,7,7,7,7,9,9,10,10,11,12,12,12,12)
t2<-c(2,7,7,2,12,12,2,12,12,4,4,4,4,4,5,5,5,5,5,5,6,6,5,7,7,5,11,11,5,11,11,7,7,11,11,7,14,14,7,14,14,8,10,10,11,12,12,12,12,12,14,7,12,13,6,8,6,6,11,7,11,12,14,9,10,11,11,11,11,12,12,12,12,14,14,14,14,14,14,11,13,11,12,13,13,14,14,14)
nma.networkplot(c1 = t1,c2 = t2,percomparison = TRUE)
上述代碼,t1與t2分別表示配對的干預措施,編號與表 1下標識一致。

圖 4中各節點為該節點干預措施比較數目,線條為配對比較的數量,“treat.1-14”與表 1中的藥物一一對應。
目前該程序包自身無法實現調整及節點藥物標識。為了更好詮釋網狀數據間的關系及對圖形的修整,該程序包也提供另一種繪制方法來實現,具體命令與圖形(圖 5)如下:
nma.networkplot(c1 = sid,c2 = tid,percomparison = FALSE,weight = TRUE,graphtitle = “Network Plot”,trtname = c(“Placebo”,”Bupropion”,”Citalopram”,”Desvenlafaxine”,”Duloxetine”,”Escitalopram”,”Fluoxetine”,”Fluvoxamine”,”Mirtazapine”,”Nefazodone”,”Paroxetine”,”Sertraline”,”Trazodone”,”Velafaxine”))

圖 5除了標注各節點的藥物外,還標注各線條間配對比較的研究數目,其他與圖 4中各節點信息相一致;操作者可通過VAR1變量來設置各節點信息。圖 5較圖 4呈現了更加詳細的數據信息且各節點所承載的信息量更加豐富、完善。
6 結語
R軟件pcnetmeta程序包采用簡潔代碼輸入的方式、通過調用JAGS軟件來實現數據運算。這充分結合了JAGS軟件的優勢計算功能、R軟件特有的數據整合與強大的圖形繪制等功能,從而實現了結果便利輸出與配套優質結果圖的繪制。
在計算方面,該程序包提供了3種不同模型供操作者選取,每種模型均給出3種不同的效應量(RR、OR及RD)結果。在圖形繪制方面,軌跡圖與單個干預措施密度圖均可在計算當中自動生成,較為簡便;單個干預效應圖與網狀關系圖則需使用代碼完成,其中網狀關系圖繪制的自由度與開放性更高,對于操作者而言顯得更加靈活。
盡管該程序包功能較為齊全且部分較為開放,但其在數據運算模型選取上仍相對封閉 [15]。再者,其運算是使用R調用JAGS軟件來實現的,這無疑會受限于兩種軟件對內存的消耗,特別是在迭代次數過多時,計算機可能出現內存緊張,甚至無法分配的問題,從而導致死機等現象。第三,圖形繪制功能仍需進一步擴充與完善,方能滿足操作者的需求。相信這些局限性將會隨著方法學的不斷進展與實踐的深入而得到解決。