R数据分析:网状meta分析的理解与实操
meta分析之前有给大家写过,但是meta分析只能比较两个方法。经常是被用来证明在现有研究中显示矛盾结果的干预方法到底有没有效的时候使用,通过证据综合得到某种干预到底有没有用的结论。但是如果我要证明好几种方法到底哪个最优,这个时候meta分析就不行了,我们得使用网状meta。
The conventional meta-analysis approach is useful, but is limited in that it can only compare two interventions at a time, and only those evaluated directly in head-to-head trials
网状meta的原理和meta没有区别,精髓在于其利用了间接证据,可以进行多个干预的同时分析。一个研究直接对A、B两种干预进行比较,这个叫做直接证据;所谓的间接证据的意思是,我们有研究比较了A和C、有研究比较了B和C,此时可以构建一个证据链(forming an A-B-C “loop” of evidence)进行AB之间的比较,这个就叫做间接证据。
在临床实践中,若有一系列的药物可以治疗某种疾病,但文献报道的RCT均是药物与安慰剂的对照,而药物互相之间的RCT都没有进行或很少,那么在这种情况下,想要进行药物间效应的比较就需要将间接比较和直接比较的证据进行合并,就可以用网状Meta分析。下面一张图就可以较为清楚地说明网状meta到底在干什么:
在最简单的适用网状meta的情况下给大家一个例子:我们要比较3种方法ABC的有效性,比如我们要比较BC,有研究比较了BA得到MD= -2.3,还有个研究比较了CA得到MD=-4,那么我们通过间接比较就可以得到BC相比的MD为-1.7如下图:
因为有了共同的比较对象A,所以能够间接得到BC的比较结果。能这么比是有一个显而易见的假设需要满足的:所提到的RCT的研究人群得来源于同一个总体,从而我们可以将BA和CA的关系推出BC,这个也叫transitivity。是网状meta可以站得住脚的基础。
The core tenet of the transitivity assumption is that we can combine direct evidence (e.g. from comparisons A −− B and C −− B) to create indirect evidence about a related comparison (e.g. A −− C)
这个假设保证了间接效应是可以成立的,但是研究的协变量不一致的情况下这个假设很容易不满足,所以我们做文献筛选的时候就要将人群尽可能相似的研究纳入,当然时候我们还可以比较直接效应和间接证据的一致性来反映这个假设是否成立。这个时候在统计上又叫做比较consistency或者Incoherence。可以看的统计指标包括I方,包括异质性检验的p值,包括图形热点等。
we can see that the heterogeneity/inconsistency in our network model is very high, with I2= 89.6%. This indicates that selecting a fixed-effect model was probably not appropriate (we will get back to this point later).
了解了这些之后我们给出网状meta的定义:
Network meta-analysis (NMA), also termed multiple treatment meta-analysis or mixed treatment comparisons, was developed as an extension of pairwise meta-analysis to allow comparisons of more than two interventions in a single, coherent analysis of all the relevant RCTs
网状meta最大优势就是可以对治疗同类疾病的不同干预措施进行量化比较,并按照某一结果指标效果进行排序。
The most interesting question we can answer in network meta-analysis is which treatment has the highest effects.
而且最终呈现的图片结果较一般 Meta 分析高端,目前应用越来越多。下表对传统meta分析的步骤进行了总结并且提出了网状meta在相应步骤上的注意事项。
总体来说网状meta要做好其实是非常不容易的,从立题到分析到文献筛选到数据提取到各种偏倚评估再到具体分析操作到最后结果报告都有很多要注意的地方,本文主要聚焦分析实操和结果报告,希望对大家有帮助。
网状meta的结果呈现
在网状meta的文章中都会出一张如下图所示的网叫做Network diagrams:
上面的图展示的各个干预措施的比较情况,哪些是直接比较哪些是间接比较。图中可以看出来Timolol是被比较最多的干预措施。上面这个线的粗细表示研究的数量,点的大小表示用药的人数(研究中的样本量),这些也可以根据需要映射别的指标,比如研究的精准度。
The network geometry shows which interventions have been compared directly in RCTs, and which can only be informed indirectly.
当然我们光看图,视觉上较为直观但是能获取到的信息较少,一般我们还会出一个表作为这个图的补充,这个表就叫做league table或者triangle table:
这个图展示了网状meta的结果,包括了所有可能的两两比较的结果,比如图中左上角的2.52就表示apraclonidine这个药相对于安慰剂来讲就能显著有利于结局。
不同干预方法相互比较的结果出来之后,要指导临床决策我们还需要报告到底哪种方法更好,这个时候我们可以给出一个排序图叫做rankograms,用这个图来展示各个方案成为第几优方案的概率的曲线,如下图:
其余的还有和传统meta分析一样的异质性检验的结果,森林图等。总结起来,一个网状meta的分析部分特别的就包括网状图Network diagrams,三角表league table,累计排序曲线cumulative ranking curve (SUCRA)。
在拟合网状meta的时候我们依然可以选择固定效应模型或者随机效应模型,这个主要从研究异质性考虑,可以看的统计指标包括I方,包括异质性检验的p值,包括图形热点,具体我们在实操中讲解:
A further assumption of NMA is consistency, the statistical agreement between the direct and indirect comparisons. Consistency is the statistical manifestation of transitivity to the data. The approaches for checking inconsistency can be classified in two categories: the global approaches and the local approaches.
For the global approaches, inconsistency is evaluated in the entire network by modifying the NMA model to account for potential inconsistency, whereas the local approaches detect potential “hot spots” of inconsistency in the network, such as by examining individual loops of evidence separately. It is generally recommended to use both types of methods for inconsistency.
实例操练
比如我现在从文献种收集了如下数据:
上面数据中第一列是研究的标签,TE为方法比较的效应值,seTE为对应的标准误,treat1和treat2为对比的组别。
有了上面的数据我们就可以适用netmeta函数做网状meta了,代码如下,需要注意sm为效应量可以为RD,OR,RR,HR,SMD,MD等,要根据实际选择:
m.netmeta <- netmeta(TE = TE,
seTE = seTE,
treat1 = treat1,
treat2 = treat2,
studlab = author,
data = mydta,
sm = "SMD",
fixed = TRUE,
random = FALSE,
reference.group = "cau",
details.chkmultiarm = TRUE,
sep.trts = " vs ")
summary(m.netmeta)
运行后得到对比的效应值及其置信区间和Q值,结果如下:
还有每个治疗和参考治疗对比的效应值以及I方:
上图显示我们的I方是很大的,用固定效应模型就不合适,需要用随机效应模型(从I方和异质性检验的结果都可以说明)。
我们也可用Net Heat Plot来查看到底异质性来源是哪一个:
netheat(m.netmeta)
上面图中灰色色块越大表示该效应越重要,有色色块表示横轴效应的异质性可以归因于纵轴效应的比例,色块越红比例越高,色块越蓝比例越低。
假设上面的结果做对了,我们可以接着往下出Network diagrams,简单代码示例如下,这个函数有很多参数可以调整的,可以把图做的非常漂亮,大家自己尝试:
netgraph(m.netmeta,
labels = long.labels)
从这个图中可以直观的看出比较的情况了,当然了我们还需要数值型的结果表达,我们可以做一个league table出来,代码和对应输出如下:
netleague <- netleague(m.netmeta,
bracket = "(", # use round brackets
digits=2)
最能体现网状meta的优势的地方就是各个干预方法的比较了,通过干预方法排序,回答哪种干预最优,通过下面代码得到每种干预的排序:
netrank(m.netmeta, small.values = "good")
运行结果中会输出一个p值,表示的是该方法比其余方法好的概率,这个值越大越好,当然光看p值也不行我们要考虑稳定性,还得看置信区间,这个时候我们可以做一个森林图来展示各个干预相对于参考方案的效应分布。
forest(m.netmeta,
reference.group = "cau",
sortvar = TE,
xlim = c(-1.3, 0.5),
smlab = paste("Therapy Formats vs. Care As Usual \n",
"(Depressive Symptoms)"),
drop.reference.group = TRUE,
label.left = "Favors Intervention",
label.right = "Favors Care As Usual",
labels = long.labels)
从上面结果可以看出,相对于参考组,ind的效果是最好的。对于这个结果排序,我们也可以用下面代码出排序曲线:
plot(rankogram(m.netmeta, nsim = 100),type = "line")
依然可以得到ind排在第一。
到这儿网状meta分析涉及的网状图Network diagrams,三角表league table,累计排序曲线cumulative ranking curve (SUCRA)就都介绍完了。
R数据分析:网状meta分析的理解与实操的更多相关文章
- R数据分析:生存分析的列线图的理解与绘制详细教程
列线图作为一个非常简单明了的临床辅助决策工具,在临床中用的(发文章的)还是比较多的,尤其是肿瘤预后: Nomograms are widely used for cancer prognosis, p ...
- R数据分析:纵向分类结局的分析-马尔可夫多态模型的理解与实操
今天要给大家分享的统计方法是马尔可夫多态模型,思路来源是下面这篇文章: Ward DD, Wallace LMK, Rockwood K Cumulative health deficits, APO ...
- R数据分析:生存分析与有竞争事件的生存分析的做法和解释
今天被粉丝发的文章给难住了,又偷偷去学习了一下竞争风险模型,想起之前写的关于竞争风险模型的做法,真的都是皮毛哟,大家见笑了.想着就顺便把所有的生存分析的知识和R语言的做法和论文报告方法都给大家梳理一遍 ...
- R数据分析:二分类因变量的混合效应,多水平logistics模型介绍
今天给大家写广义混合效应模型Generalised Linear Random Intercept Model的第一部分 ,混合效应logistics回归模型,这个和线性混合效应模型一样也有好几个叫法 ...
- R数据分析:潜类别轨迹模型LCTM的做法,实例解析
最近看了好多潜类别轨迹latent class trajectory models的文章,发现这个方法和我之前常用的横断面数据的潜类别和潜剖面分析完全不是一个东西,做纵向轨迹的正宗流派还是这个方法,当 ...
- R语言重要数据集分析研究——需要整理分析阐明理念
1.R语言重要数据集分析研究需要整理分析阐明理念? 上一节讲了R语言作图,本节来讲讲当你拿到一个数据集的时候如何下手分析,数据分析的第一步,探索性数据分析. 统计量,即统计学里面关注的数据集的几个指标 ...
- R数据分析:跟随top期刊手把手教你做一个临床预测模型
临床预测模型也是大家比较感兴趣的,今天就带着大家看一篇临床预测模型的文章,并且用一个例子给大家过一遍做法. 这篇文章来自护理领域顶级期刊的文章,文章名在下面 Ballesta-Castillejos ...
- R数据分析:如何简洁高效地展示统计结果
之前给大家写过一篇数据清洗的文章,解决的问题是你拿到原始数据后如何快速地对数据进行处理,处理到你基本上可以拿来分析的地步,其中介绍了如何选变量如何筛选个案,变量重新编码,如何去重,如何替换缺失值,如何 ...
- R数据分析:临床预测模型中校准曲线和DCA曲线的意义与做法
之前给大家写过一个临床预测模型:R数据分析:跟随top期刊手把手教你做一个临床预测模型,里面其实都是比较基础的模型判别能力discrimination的一些指标,那么今天就再进一步,给大家分享一些和临 ...
- R数据分析:孟德尔随机化实操
好多同学询问孟德尔随机化的问题,我再来尝试着梳理一遍,希望对大家有所帮助,首先看下图1分钟,盯着看将下图印在脑海中: 上图是工具变量(不知道工具变量请翻之前的文章)的模式图,明确一个点:我们做孟德尔的 ...
随机推荐
- WebRTC 初探
背景 我正在实现一个 FC 游戏网站, PC 用户仅需要配置键盘便能实现小伙伴们一起玩, 但是手机用户就比较麻烦了 传统的网页游戏都是通过 HTTP/WS 的方式实现联机, 对于服务器的负担还是比较重 ...
- 《Vue.js 设计与实现》读书笔记 - 第6章、原始值的响应式方案 & 响应式总结
第6章.原始值的响应式方案 6.1 引入 ref 的概念 既然原始值无法使用 Proxy 我们就只能把原始值包裹起来. function ref(val) { const wrapper = { va ...
- 进程管理中的active_mm是做什么的?
在Linux内核中,进程管理涉及到许多复杂的数据结构和机制,其中active_mm是与内存管理相关的一个关键概念.理解active_mm需要先了解与之相关的一些基本内核结构和概念. 基本概念 mm_s ...
- linux cpufreq framework(5)_ARM big Little driver
1. 前言 也许大家会觉得奇怪:为什么Linux kernel把对ARM big·Lttile的支持放到了cpufreq的框架中? 众所周知,ARM的big·Little架构,也称作HMP(具体可参考 ...
- v-model 语法糖-在父子组件传值 的简写形式
props的变量名字 必须是 value ,this.$emit('input',数据值) 的自定义事件必须是 input : v-model 是 vue 中进行数据双向绑定的指令,在内部实际上是通 ...
- 云原生周刊:GitOps 的 4 条核心原则
日前在温哥华举行的 cdCON + GitOpsCon 上,分享内容以 GitOps 原则为特色: GitOps 是声明式的: GitOps 应用程序是版本化的和不可变的: 自动拉取 GitOps 应 ...
- NOIP2024模拟赛13:拆开未来
NOIP2024模拟赛13:拆开未来 写在前面:进制哈希的P不要用998244353会被卡!用131.注意取模为负数的情况! C-重复 一句话题意:给定字符串 \(S\), 问 \(S\) 的所有子串 ...
- .NET开发者福音:JetBrains官方宣布 Rider 非商用免费开放!
前言 JetBrains官方前段时间宣布重磅消息,其两款知名IDE应用WebStorm和Rider现已面向社区开放,允许用户免费用于非商业用途.此举旨在支持学习.开源项目开发.内容创作及业余开发等活动 ...
- PXI板卡的封装和接口形式
PXI模块 PXI标准同时定义了3U和6U模块适用的机械尺寸与连接器形式.3U模块在模块底部安装有一个助拔手柄.在顶部和底部通过螺钉固定,底部的固定螺钉部分隐藏在助拔手柄中.占用超过一个槽位的模块可以 ...
- 前端性能优化:使用 Web Workers 实现轮询
// pollWorker.js import { Base64 } from 'js-base64'; import RsaAndAes from '~/composables/RsaAndAes' ...