來自于
Stata是一款非常強大的統計和作圖軟件,本文中用的版本是Stata14.2。網上目前存在的教程多半是用mvmeta包來做網狀Meta,但mvmeta相對繁瑣,需要打不少的代碼去轉換數據格式,Network包本質上是mvmeta,不過對用戶更加友好,隻需要執行簡單的代碼就可以數據處理。本文将介紹用Stata的Network包實現連續性變量的網狀Meta分析。
1. 假設我們已經安裝好了Stata,在命令欄敲入:net from ,然後點擊network_graphs,下載network包。
2. 将要處理的數據在Excel中整理成下圖所示:
其中id代表研究,t代表治療,r是反應數(本例中是每組因副作用脫落的數目),n是樣本量;注意每一行代表一個研究的一個臂(組),如果一個研究有三臂,那麼就占三行。分析時需将id以數字來依次編号Study。同樣,依次以數字來編号t。特别注意的是,同一研究中從上到下,治療的編碼隻能增大,不能降低。一般來說,将安慰劑編碼為1。
3. 點擊Stata菜單欄Data->Data Editor-> Data Editor(Edit),将整理好的數據直接拷貝到裡面,注意拷貝的時候選擇首行為變量名;Excel中第1列Study不用拷貝;如下圖所示:
4. 返回Stata的首界面,在命令欄敲入:
network setup r n, studyvar(id) trtvar(t) format(augment) or
以上代碼效應量為OR,如果是用RR作為效應量,則敲入:
network setup r n, studyvar(id) trtvar(t) format(augment) rr
結果如下圖所示:
繼續點擊Stata菜單欄Data->Data Editor-> Data Editor(Edit),發現數據變成如下模樣:
右邊還有很長,實在截圖不下了。
現在我們的數據就準備成可以進行網狀Meta分析的格式了。
5. 制作網狀圖,在命令欄敲入:
network map
就會跳出如下圖形:
或者敲入:
network map, improve
線條以及節點的顔色、比例、以及将數字換成治療名稱,均可以在圖形上點擊右鍵,開啟start graph editor後進一步編輯;或者以命令行的形式編輯;留給讀者探索,在此不再贅述。
6. 首先用不一緻性模型進行檢驗,在命令欄敲入:
network meta i
成功的話會看到:
前面一堆東西不重要,主要是看紅色方框裡面的P值是否大于0.05;若小于0.05,則不一緻性模型顯著;對于這批數據不能直接用接下來的一緻性模型分析。在本例中不一緻性檢驗不顯著,說明可以使用一緻性模型進行分析。
7. 用一緻性模型進行分析,在命令欄敲入:
network meta c
結果如下所示:
B,C,D,E,F,G分别對應編碼為2,3,4,5,6,7的幹預,Coef就是這些幹預與1(安慰劑)對比的效應量,最後三列是P值以及95%可信區間。
8. 至此,一緻性模型與不一緻性模型的結果均已算出,在命令欄敲入:
network forest
出現如下所示的森林圖,最底部是不一緻性檢驗:
9. 上面進行的不一緻性檢驗是Global inconsistency;對于網狀Meta,光做Global是不夠的,還有Local inconsistency;為了做局部不一緻檢驗,我們通常使用節點劈裂法(node-splitting method);在命令欄敲入如下代碼:
network sidesplit all, tau
結果如下所示:
若P小于0.05,則認為局部存在不一緻性。
10. 在這一步,命令欄敲入clear;然後重複第3、4、7步;為了計算每個幹預的SUCRA,在命令欄敲入以下代碼:
network rank min, all zero reps(5000) gen(prob)
注意,在本例中MD越小說明排名越靠前,所以這裡用min,如果效應量越大排名越靠前,那麼代碼應該改成“network rank max, all zero reps(5000) gen(prob)”。出現如下結果:
這個圖表示每個治療排行第幾的概率。如編碼為1的治療(安慰劑)排行第2的概率最大(35.1%),以此類推。
接下來計算我們通常比較關心的SUCRA,以及順便把編碼還原為我們的治療名稱,敲入以下代碼:
sucra prob*, lab(Placebo Aripiprazole Risperidone Quetiapine Olanzapine Haloperidol Paliperidone)
這裡lab是label(标簽)的意思,括号裡按照1234567編碼的順序把治療名稱寫出,以空格相隔。結果如下所示:
SUCRA值越高的排名越靠前,同時可以跳出SUCRA的圖:
11. 制作文獻中常見的聯賽表,敲入以下代碼:
netleague, lab(Placebo Aripiprazole Risperidone Quetiapine Olanzapine Haloperidol Paliperidone) sort(Placebo Haloperidol Risperidone Aripiprazole Olanzapine Quetiapine Paliperidone) export ("D:\network.xlsx") eform
其中lab還是按照1234567的順序依次寫上治療的名稱;sort是按照SUCRA的大小排序,排行第一的寫在最前面;export可要可不要,它的作用是将聯賽表導出到指定的路徑。eform很重要,因STATA默認對分類變量的輸出為對數形式,eform的作用就是把它還原為OR或者RR。
注意如果沒有export的話,這個聯賽表是個臨時文件,必須再次複制保存;最後一句話提示聯賽表在數據視圖的最末尾,也就是最右邊。即點擊Stata菜單欄Data->Data Editor-> Data Editor(Edit),将下面的滾動條拉至最右邊,就可以看到蜷縮在角落裡瑟瑟發抖的聯賽表。
将結果複制到Excel裡面,盡情美化吧騷年!
12. 制作兩兩比較的森林圖,在命令欄敲入以下代碼:
intervalplot, null(1) lab(PLA ARI RIS QUE OLA HAL PAL) eform
eform很重要;其中,null(1)設置無效線為1,還可以加入pred可以輸出預測區間,留給讀者自行嘗試;本例跳出如下森林圖:
13. 制作漏鬥圖,首先将數據格式轉換,敲入如下代碼:
network convert pairs
可将數據轉換成如下格式(瞬間感覺清爽了許多)
然後敲入如下代碼:
netfunnel _y _stderr _t1 _t2 , random bycomp add(lfit _stderr _ES_CEN) noalpha
結果如圖所示:
其實不用敲入這麼多代碼,你隻敲入“netfunnel _y _stderr _t1 _t2”一樣可以出結果;Stata裡DIY的地方很多,讀者可以敲入“help netfunnel”自行查閱幫助文檔;對于其他的任何命令,都可以help一下。
14. 環不一緻性檢測(loop inconsistency),所謂的環就是指治療與治療之間構成了封閉的環形。運行以下命令同樣需要先将數據格式轉換為清爽的格式(network convert pairs):
ifplot _y _stderr _t1 _t2 id, tau2(loop)
結果如下所示:
如果可信區間包括0,說明環不一緻性不顯著,但如果IF很大,說明直接比較結果和間接比較結果相差有點大……結果解釋需謹慎,或者做亞組分析和回歸分析找異質性來源,或者做敏感性分析等等。
15. 貢獻圖(即觀察直接比較與間接比較對最終估計結果的貢獻)的制作,在命令欄敲入以下命令(需要清爽格式):
netweight _y _stderr _t1 _t2
結果如圖所示:
祝大家數據處理順利。
私信作者可獲得本例中所使用數據的Excel文件。
有話要說...