附详细的实操步骤:临床预测模型Meta分析(老歌新唱)

文摘   科学   2024-07-16 20:29   湖南  

大家好,我是北游。没想到预测模型的meta分析越来越热门了,以至于一直有网友通过微信私聊咨询我具体方法

其实,早在去年,我们就介绍了临床预测模型系统评价的基本思路与步骤,分享了具体的实现方法(R软件版)。当时笔者也隐约觉得这种类型会有一定的热度,但似乎还是低估了它。鉴于很多朋友不知道具体做法,在这里,我就把以前的帖子拿出来,送给今年才关注我们公众号的广大网友。在此之前,奉上以前写的相关知识的链接:

1、告别群魔乱舞的时代!首个预测模型系统评价的报告学清单新鲜出炉!

2、衷心建议收藏:预测模型系统评价的基本思路

3、临床预测模型的Meta分析方法

简单说明下:

第一篇绍了全球首个预测模型系统评价报告规范。

第二篇是笔者自己对预测模型系统评价的所见所闻,写在首个报告规范还没有出现之前,可能有些许错误或不完整的地方,仅供参考。

第三篇同样如此,属于理论层面的东西。

接下来,附上去年分享过预测模型meta分析步骤(注意:仅包含数据分析,即对AUC或C统计量以及校准指标的meta合并方法,其他系统评价流程请自己阅读报告清单)。

注意AUC的合并有一定的要求,请尽量采用验证集上的结果,不要用训练集的。


一、Meta分析工具与示例介绍

1、工具

我们需要通过R软件使用metamisc包,该包是学者Debray TP的团队开发的,在国际上应用颇受欢迎。

此包内置的valmeta函数是用于评价预测模型性能的meta分析函数,可以实现对C统计量以及校准度的合并,其中校准度的合并是通过汇总O:E比率进行估计(校准度指标无法获取)。

先安装此包,然后导入,打开帮助文档,看看valmeta函数的具体用法。

Usagevalmeta(  measure = "cstat",  cstat,  cstat.se,  cstat.cilb,  cstat.ciub,  cstat.cilv,  sd.LP,  OE,  OE.se,  OE.cilb,  OE.ciub,  OE.cilv,  citl,  citl.se,  N,  O,  E,  Po,  Po.se,  Pe,  data,  method = "REML",  test = "knha",  verbose = FALSE,  slab,  n.chains = 4,  pars,  ...)

这是做C统计量合并的用法,参数非常多,简单解释下:

cstat是C统计量(二分类预测模型中就是AUC值),cstat.se是C统计量的标准误差,cstat.cilb是C统计量的置信区间下界限,cstat.ciub是C统计量的置信区间上界限,cstat.cilv用于指定置信区间的水平,比如0.95=95%ci。

OE是实际观测到的事件数与预测事件数之比,OE.se是OE的标准误差,method是指定拟合模型是固定效应还是随机效应,默认为REML随机效应;slab是研究的文字标签,n.chains用于贝叶斯,其余也是类似的,就不一一解释了。

这么多参数,是不是意味着需要录入这么多数据?

不需要,我们不需要也无法收集到这么多的数据,实际上也没有几篇原始研究会报告这么多指标,有些预测模型甚至只会给出1个C统计量,其余全部缺失。

2、数据集

接下来,我们看下R包开发者示例用的数据集,进一步了解该如何录入数据。

该数据集包含对欧洲心脏手术风险评估系统(EuroSCORE,是一个预测模型 )在心脏手术患者中的预测性能的估计。结果是基于原始开发研究和Guida等人确定的22个验证,共23行数据。注意,这些验证研究都是基于EuroSCORE这同一个模型的。 

可以看到,这个数据集中一些指标有很多缺失值,可见很多数据无法从原始的预测模型研究获得的,所以就需要我们利用软件结合已有的数据去进行估计。

二、代码演示

提示:仅演示基于频率的二元结局模型的meta分析,基于生存资料的模型与贝叶斯方法暂不介绍。

1、对C统计量进行Meta分析

# 先安装并导入metamisc包library(metamisc)
#导入数据集data(EuroSCORE)
# 拟合数据fit <- valmeta(cstat=c.index, cstat.se=se.c.index, cstat.cilb=c.index.95CIl, cstat.ciub=c.index.95CIu, cstat.cilv=0.95, N=n, O=n.events, slab=Study, data=EuroSCORE)
# 绘制C统计量的森林图plot(fit)

由森林图可知,汇总C统计量为0.79[0.76,0.81],近似预测区间为0.79[0.68, 0.87],预测区间还是有些宽的。

当提取的数据不完整时,也没关系,可以尝试执行下面的代码进行估计。

valmeta(cstat=c.index,  N=n, O=n.events, slab=Study, data=EuroSCORE)

能拿到跟前面几乎一样的结果。

2、通过O:E对校准度进行合并

(1)前面的推文解释过,校准度一些参数很难获取,所以有学者建议采用O:E反映模型的校准情况。用法也比较简单:

# 试试看valmeta(measure="OE", O=n.events, E=e.events, N=n,         slab=Study, data=EuroSCORE)

可以看到,O:E=1.10, 意味着实际发生的事件比预测的高,表示该模型有点低估发生风险。预测的95%CI是[0.90, 1.36], 95%预测区间是[0.43, 2.86]。

(2)去掉总样本和研究的标签,照样可以正常计算汇总O:E,如下:

valmeta(measure="OE", O=n.events, E=e.events, data=EuroSCORE)

略微有些差异,但基本是一样的。

(3)当无法收集到事件数O与非事件数E的时候,可以通过对应的概率来估算。

valmeta(measure="OE", Po=Po, Pe=Pe, N=n, data=EuroSCORE)

此时就有明显差异了。总体来说,这个包的用法挺简单,很方便研究者分析数据,大家可以自由体验。


另外,本公众号定期分享一些护理科研与统计有关的新内容,如果大家有想要了解的知识,可以后台私信,也可以加交流群,我看到消息后会汇总需求。

最后,提醒下大家,本文仅供参考,不保证步骤完全正确,简单测试发现过年的代码今日仍可以跑起来,但我没有去认真验证原作者是否调整了R包,功能是否有变请各位注意甄别。

喜欢此文的朋友可以帮忙点个赞吗?谢谢

参考文献:

[1]Debray TP, Damen JA, Snell KI, Ensor J, Hooft L, Reitsma JB, Riley RD, Moons KG. A guide to systematic review and meta-analysis of prediction model performance. BMJ. 2017 Jan 5;356:i6460. doi: 10.1136/bmj.i6460. 

[2]Debray TP, Damen JA, Riley RD, Snell K, Reitsma JB, Hooft L, Collins GS, Moons KG. A framework for meta-analysis of prediction model studies with binary and time-to-event outcomes. Stat Methods Med Res. 2019 Sep;28(9):2768-2786. doi: 10.1177/0962280218785504. 

护理统计随笔
专注护理科研设计和统计分析。别人不会告诉你的干货,可以来这里找!
 最新文章