今天的教程主要是使用gemtc程序包实现连续型变量的贝叶斯网状meta分析,数据来源于《A systematic review and mixed treatment comparison of pharmacological interventions for the treatment of obesity》。
公众号后台回复nmacon获取训练数据。
1.程序包加载及数据导入
#install.packages("gemtc")
#install.packages("rjags")
#install.packages("coda")
library(gemtc)
data <- read.csv("diabetes.csv", sep=",", header=T)
2. 网络证据图绘制
network <-mtc.network(data)
summary(network)
plot(network,edge.color="black",vertex.color="steelblue",vertex.label.dist=2.5)
3. 模型构建
model<-mtc.model(network,
type="consistency",
n.chain=3,
likelihood="normal",
link="identity",
linearModel="random",
dic = TRUE)
results<- mtc.run(model,
n.adapt = 2000,
n.iter = 10000,
thin = 3)
4. 模型收敛度诊断
gelman.diag(results)#诊断结果
Potential scale reduction factors:
Point est. Upper C.I.
d.Metformin.Orlistat 1.00 1.01
d.Metformin.Placebo 1.00 1.01
d.Metformin.Rimonbant 1.00 1.00
d.Metformin.Sibutramine 1.01 1.01
d.Orlistat.OrliSibut 1.00 1.00
sd.d 1.00 1.00
Multivariate psrf
1
gelman.plot(results)## 诊断图
plot(results)
5. 森林图绘制
forest(relative.effect(results, "Placebo"))
6 . 异质性检验
result.anohe<-mtc.anohe(network,n.adapt = 2000, n.iter = 10000)
summary.anohe=summary(result.anohe)
summary.anohe
Analysis of heterogeneity
=========================
Per-comparison I-squared:
-------------------------
t1 t2 i2.pair i2.cons incons.p
1 Metformin Orlistat NA 75.95795 0.07919085
2 Metformin Placebo NA 0.00000 0.37703011
3 Metformin Rimonbant NA NA NA
4 Metformin Sibutramine NA 34.94588 0.24997324
5 OrliSibut Orlistat NA 54.95407 0.18717601
6 OrliSibut Placebo 81.94884 83.58646 NA
7 OrliSibut Sibutramine NA 0.00000 0.62915475
8 Orlistat Placebo 47.79664 44.49184 0.50275971
9 Orlistat Sibutramine 0.00000 0.00000 0.61098135
10 Placebo Sibutramine 41.77298 43.30047 NA
Global I-squared:
-------------------------
i2.pair i2.cons
1 43.66205 41.52727
7. 节点分割法
nodesplit <- mtc.nodesplit(network,
linearModel = "random",
n.adapt = 2000,
n.iter = 10000,
thin = 3)
summary(nodesplit)
plot(summary(nodesplit))
Node-splitting analysis of inconsistency
========================================
comparison p.value CrI
1 d.Metformin.Orlistat 0.12091209
2 -> direct 1.4 (0.29, 2.4)
3 -> indirect -0.15 (-1.9, 1.6)
4 -> network 0.95 (-0.055, 1.8)
5 d.Metformin.Placebo 0.15781578
6 -> direct 1.1 (-0.58, 2.8)
7 -> indirect 2.6 (1.4, 3.7)
8 -> network 2.0 (1.0, 2.9)
9 d.Metformin.Sibutramine 0.11956196
10 -> direct -0.67 (-2.3, 1.0)
11 -> indirect 0.93 (-0.26, 2.1)
12 -> network 0.40 (-0.62, 1.3)
13 d.OrliSibut.Orlistat 0.02265227
14 -> direct 1.5 (0.38, 2.6)
15 -> indirect -1.3 (-3.3, 0.80)
16 -> network 0.95 (0.0028, 1.8)
17 d.OrliSibut.Sibutramine 0.03930393
18 -> direct 0.72 (-0.40, 1.8)
19 -> indirect -1.8 (-3.7, 0.28)
20 -> network 0.40 (-0.54, 1.3)
21 d.Orlistat.Placebo 0.87428743
22 -> direct 1.2 (0.63, 1.7)
23 -> indirect 1.1 (-0.070, 2.2)
24 -> network 1.1 (0.67, 1.5)
25 d.Orlistat.Sibutramine 0.55820582
26 -> direct -0.44 (-1.1, 0.25)
27 -> indirect -0.73 (-1.5, 0.024)
28 -> network -0.55 (-0.98, -0.12)
29 d.Placebo.Sibutramine 0.22832283
30 -> direct -1.7 (-2.0, -1.3)
31 -> indirect -0.79 (-2.2, 0.67)
32 -> network -1.6 (-1.9, -1.3)
8. 两两比较赛联表
league<-relative.effect.table(results)
league1<-round(exp(league),2)
league1
9. 排序图及累计排序图
rank <- rank.probability(results, preferredDirection = -1)
print(rank)
plot(rank, beside=TRUE, cex.names=0.5)
print(sucra(rank))
plot(rank)
- END -