用R语言进行连续型变量的网状meta分析--详细教程

最近在后台有不少读者留言想要了解一下网状meta分析,而我恰好前两天帮一位医生朋友处理了一次连续型变量的网状meta分析,那么本文我将以其中的部分数据为例,向大家详细展示一下此需求是如何用R软件实现的。需要本教程的原始数据及完整程序命令的可在公,众号(全哥的学习生涯)内回,复“网状meta”。

1. 网状meta分析的理论基础

网状meta分析是传统meta分析的拓展,可同时比较三个或三个以上干预措施的疗效,其主要包括调整间接比较和混合治疗分析。间接比较是指通过干预措施A vs C和干预措施B vs C的结果,间接得出A vs B的相对效果的一种方法。目前认为,Meta分析中进行间接比较的原因有二:一是无直接比较的原始研究;二是有直接比较的原始研究但这些研究数量较少或质量较低;混合治疗分析是在直接比较的基础上合并间接比较的证据,从而提高分析结果的精确性,但是这种方法主要是应用于干预措施可以形成具有闭合环路( loop)时。

网状meta分析的最大优势就是可以对治疗同类疾病的不同干预措施进行量化比较,并按照某一结果指标效果好坏进行排序,进而选择最优治疗方案。网状meta分析的基本假设包括同质性假设、相似性假设及一致性假设。其统计方法主要包括频率学法和贝叶斯方法。

2. 准备工作

2.1 安装与加载

本教程使用的R软件版本为3.6.2,RStudio版本为1.2.1335,需要软件的读者可在公,众号(全哥的学习生涯)内回,复“R”,”RS”自取。同时,我们还需要安装一款基于马尔科夫链-蒙特卡罗(Markov Chain Monte Carlo,MCMC)法的软件:JAGS,以完成对数据的建模、迭代运算等,需要本软件的伙伴可以在以下地址中下载:

https://nchc.dl.sourceforge.net/project/mcmcjags/JAGS/4.x/Windows/JAGS-4.3.0.exe

若下载缓慢,可直接在公,众号(全哥的学习生涯)内回,,复“JAGS”获取本软件。

同时,我们需要安装“gemtc”包,及加载此包。代码如下:

install.packages(“gemtc”)

library(gemtc)

2.2 数据处理

在本教程中,我们的目的是运用网状meta分析的方法对联用B药物与其他西药(包括A,C,D,E,F,G,H,L,M等药物)的疗效进行系统评价,以确定最优干预措施为单用Flunarizine或是联用其他药物。输入以下命令将数据录入进R中:

setwd(dir="C:/Users/Desktop") #可更改为自己的工作目录

data <- read.csv("data.csv",header = T)

原数据的前20行如图1所示:

图 1

在本数据中,每一行代表研究的一个臂(在本教程中选取的都是双臂实验,故一项研究拆分成两行),study代表研究,treatment代表干预名称,mean代表连续变量的均值,std.dev代表连续变量的标准差,sampleSize代表每一个研究中每一个臂的样本量。特别需要注意的是,由于分析软件基于文本识别系统,以上英文单词必须按以上描述所示,大小写都要一致,否则将出现运行错误。

2.3 生成gemtc格式数据

R软件还具有另一项功能,就是可以为那些数据录入繁琐的软件生成相关格式数据存储文件,从而为这些软件的数据录入提供方便。输入命令:

network <- mtc.network(data)

3. 实现分析

gemtc 程序包自身并没有运算程序功能,需要model 进行相关设置及需要相关指令调用JAGS分析软件来进行相关的迭代运算。

3.1 生成网状图

键入命令:

plot(network,mode="circle",displaylabels=TRUE,boxed.label=FALSE)

生成的网状图如图2所示:

图 2

可使用如下命令查看其内部联系:

summary(network)

如图3所示,从图中可以看出,双臂实验有48个。

图 3

3.2设置network model

在选取具有网状meta 分析功能软件之前,我们需要对model 进行相关设置,需要“mtc.model()”命令,具体命令如下:

model <- mtc.model(network,type = "consistency",n.chain = 4,likelihood=”normal”,link=”identity”,linearModel=”random”)

其中,network 为network 数据,type 为是否选取一致性模型,n.chain 为迭代运算中链的条数(马尔科夫蒙特卡洛MCMC链条),一般取2-4。非一致性模型(inconsistency model)可将type调整为“ume”或“use”。likelihood=”normal”,link=”identity”,定性为连续变量。linearModel=”random”指选取的模型为随机效应模型,若填fixed则为固定效应模型。

3.3软件选取及迭代

gemtc 程序包提供了3 种软件的调用方式,依次为JAGS、OpenBUGS 及WinBUGS 软件,通过“mtc.run()”命令选取并执行。对于调用软件的选取可通过设置参数“sampler”值来实现,当取值“rjags”为调用JAGS软件,计算机将自动完成建模、数据加载及初始化等过程。具体命令如下:

results <- mtc.run(model,sampler = "rjags",n.adapt=20000,n.iter = 5000,thin=1)

其中,model是我们上一步建立的模型名称,n.adapt为退火次数,n.iter为迭代次数。这个时候我们耐心等待,RStudio界面如图4所示:

图 4

查看结果的命令为:

summary(results)

可看到图5及图6所示结果:

图 5

图 6

4.图形绘制与结果展示

4.1 森林图绘制

敲入命令:

forest(relative.effect(results,"Flunarizine"))

可以看到每个干预相对于B药物的森林图(图7):

图 7

4.2 收敛诊断图

收敛诊断(convergence diagnostics)图绘制的命令为“gelman.plot(results)”,即可绘制图形。

图 8

此处应该有12 个gelman plot(图8),可以采用如下命令进行全部显示:

par(mfrow=c(3,4))

gelman.plot(results,auto.layout =F)

4.3轨迹和密度图

轨迹(trace)和密度(density)图的绘制的命令为“plot(results)”,如图9、图10。此处需要说明的是,若要在此窗口上显示全部图形,可通过将字体调小的方式实现。更多meta分析及数据分析知识,请关注公,众号:全哥的学习生涯。

图 9

图 10

4.4 排序图

进行排序,如图11:

图 11

ranks <- rank.probability(results)

sucra(ranks)

堆积排序图,如图12:

plot(ranks)

图 12

单个排序等级图,如图13:

plot(ranks,beside=TRUE)

图 13

4.5制作联赛表

输入命令:

a <- relative.effect.table(results)

write.csv(a,"1111111.csv")

可在工作路径下生成1111111的联赛表,如图14:

图 14

4.6 异质性检验

键入命令:

resultanohe <- mtc.anohe(network,n.adapt=20000,n.iter=50000,thin=1,n.chain=4,likelihood="normal",link="identity",linearModel="random")

c <- summary(resultanohe)

plot(c)

生成的敏感性分析森林图如图15、16所示(仅展示部分图片)

图 15

图 16

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342

推荐阅读更多精彩内容