C值是大家最为熟知的评价模型好坏的指标,它可以反映模型“算命”能力准不准,即区分患病/无病,有效/无效和死亡/存活结果的预测能力。
我们前期的推文曾经介绍了生存数据的C值C值|手把手教你如何算生存资料的C值,所采用的方法是survival包COX回归模型中的一致性指数和rms包中的cph函数和validate函数。
实际上,可用于计算C值的方法有很多种,除了上述方法,还可以用survcomp包、Hmisc包中的rcorr.cens函数等。
这些方法都能计算C值,计算结果虽略有不同,但也大同小异。
在看了网络上琳琅满目的示范代码和教程后,意粉不禁有些迷惑,到底哪种方法能用于正式发表的paper中呢?
首先我们先了解一下文献中对于C值的描述,以Circulation杂志发表的关于10年腹主动脉瘤风险的研究为例:(1),其方法学部分对于C值的描述如下:
其中的关键信息包括
①计算的是Harrell’s C-index
②模型拟合之后还在验证集中计算了Harrell’s C-index
③使用Bootstrap自助法计算置信区间
Harrell’s C-index
首先我们要了解的是这里提到的Harrell’s C-index是什么。
意粉查阅了文献才知道,原来Harrell’s C-index是由Harrell老先生在1982年在JAMA杂志上提出的用于计算模型区分能力的方法(2),也是目前高分预测模型文章中应用最多的计算方法。
Harrell老先生同时还开发了R包Hmisc package用于计算Harrell’s C-index,目前是相对公认和经典的R包,已经被各大期刊的文献广泛引用。
接下来我们看看如何在R中使用Hmisc包计算Harrell’s C-index。
这里我们使用两个数据集:训练集TRAIN和测试集TEST。数据中包括的是死亡事件(Death),随访时间(Time)和预测因子(X1-X7)
首先我们拟合模型fit:
查看拟合的模型:
接下来使用rcorr.cens函数计算C-index为0.7011:
计算验证数据的C-index
当使用拟合的模型计算验证数据的C-index时有个误区,网上有的教程直接使用相同的预测因子在验证数据中用cph()函数拟合新模型来得到C-index,这种做法其实相当于重新构建了新的模型,给各个预测因子赋予了新的系数,并不是基于训练数据拟合的模型的验证。
那应当怎么计算呢?
其实很简单,因为我们已经拟合好了对象fit,其中每个预测因子都获得了训练数据中的权重,此时只要把代码中的数据集TRAIN换成TEST即可,示范数据中验证的C-index为0.7031,与训练数据接近。
如何使用Bootstrap自助法计算Harrell’s C-index的置信区间?
Bootstrap通过对给定数据集进行有放回的重抽样以创建多个模拟数据集,从而生成一系列待检验统计量的经验分布,从而计算置信区间。
这里示范用R包‘boot’执行bootstrap的过程。
首先要自定义计算C-index的函数如下,后续抽样计算便是基于以下的函数进行的:
接下来我们加载boot包,在boot函数中,我们要提供的是数据集TRAIN, 需要计算的统计量为之前定义的CINDEX, R为重抽样的次数,我们设定为200次。
输出计算结果如下,在训练集TRAIN中的C-index为0.7011, 95%置信区间为0.6636-0.7365,不同方法计算的结果存在一定差别。
总结一下,到这里我们实现了在Harrell’s C-index的计算,包括在验证数据中的计算和自助法计算置信区间,希望对大家有所帮助。
最后提一个问题,在验证数据中用自助法计算置信区间,你会了吗?
参考文献
1. Welsh P, et al. Derivation and Validation of a 10-Year Risk Score for Symptomatic Abdominal Aortic Aneurysm: Cohort Study of Nearly 500 000 Individuals. Circulation. 2021 Aug 24;144(8):604-614.
2.Harrell FE Jr, et al. Evaluating the yield of medical tests. JAMA. 1982 May 14;247(18):2543-6.
转自:双鸭山科研小黑屋
如有侵权,请联系本站删除!