主讲老师第五十九课:临床预测模型的评价
当然,预测模型构建好了,我们还需要一些指标来进行评价,注意了,前面的四大模型和现在讲的Nomogram 临床预测模型别弄混了,将新指标与临床病理特征相结合,通过建立 Nomogram 图来可视化地展示患者的预后情况。但是,当临床预测模型成功建立,就会面临一个问题,如何去评价模型的质量?模型的评价一般是通过比较人群的模型预测结果与实际观测结果,来评价预测模型的效果,对于模型的评价指标,我们往往分成三种:
1.区分度评价指标:包括 C 指数(C-Index)、重新分类指数(Net reclassification index,NRI)。
2.一致性评价指标:即校正曲线(Calibration plot)。
3.临床有效性评价指标:决策分析曲线(Decision Curve Analysis,DCA)。
下面我们分别来讲讲如何评价前期建立的临床预测模型。
一、Cox 回归模型的评价
1.建立预测模型
1.1 引用 R 包
1.2 读取文件
1.3 构建 Cox 回归模型
首先,对数据的相关参数进行整理与设置。
接着,将所有变量纳入模型中,构建 Cox 回归模型。
2.C 指数的计算
到此,所有的操作和前面 Nomogram 图的一致。接下来,我们先来看一下第一个评价指标,c 指数。
将构建好的模型纳入 validate()函数中,并重复计算 1000 次。
在此模型中,C-index 为 0.664,即 1-0.336=0.664。在一定程度上,c 指数的含义和我们使用的 ROC曲线的曲线下面积是类似的,但是之前的 ROC 曲线下面积的结局指标都是单一的 0 和 1,这里则结合来生存时间和生存状态。当然,根据 C 指数而言,该模型的预测区分度并不是太高,一般而言,我们将 0.51-0.7 认为是低可信度、0.71-0.9 为中等可信度、> 0.9 为高可信度,这与 ROC 曲线的 AUC 值分类是基本一致的。
3.Calibration plot 的绘制
首先,绘制三年生存率的校准曲线。
一般将患者分成 3 组,即 m 约等于患者总数/3,且重复模拟 1000 次,然后获得使用模型后患者可能的生存状态。
同理,绘制五年生存率的校准曲线。
简单解释一下这张图,3 组对应图中的三个点,他是随机分组,当然分成 4 组 5 组也是有的,对于Calibration plot,横坐标为模型预测得到的患者生存率,纵坐标为患者实际观察得到的生存率。理论上来讲,预测与实际两者应该是实际和预测的一致,也就是这条对角线,但是,实际应该过程中和理论还是有差距的,三点之间的联系与虚线之间越相近,越能说明模型良好的一致性,结果是随机重复 1000 次的,有所区别也是没关系的,主要观察几个点之间的连线和对角线之间的吻合度,从而来评价模型的好坏
4.DCA 曲线的绘制
关于 DCA 曲线的绘制,和我们之前讲过的 CIBERSORT 比较类似,一部分函数包装在了一个 R 文件里(stdca.R),将 stdca.R 放在之前设定的工作目录中,并进行引用随后,分别计算患者的三年和五年生存率,根据患者的生存情况,分别绘制 3 年和 5年的 DCA 曲线解释一下结果图形的含义,在图中,横着的实线表示什么都不干预时候都获益率,为 0,而在另外两条线之间的和 None 相交的部分表示进行干预和不干预的情况,两者之间的范围表示使用该模型进行干预下患者可能的获益情况。DCA 曲线一般在文章中的训练集和验证集中都要放,这样,三个常用的指标就介绍好了。一般而言,如果文章使用了 Nomo 图,这三个评价指标是紧接使用的标配结果,后面介绍的指标一般用的相对比较少
5.NRI 指数的计算
对于 NRI 指数的计算,有 2 个专门的 R 包,分别为 nricens 和 PredictABEL,其中,nricens计算出来的是绝对的 NRI,PredictABEL 则为相对的 NRI,一般在使用过程中选择其中之一即可。
随后,分别构建两个不同的模型,以进行比较。
当想判断一个指标的作用时,如 risk,分别构建两个不同的模型,一个包含所有的指标,一个剔除了risk 后的所有指标,然后计算 NRI 指标。接着,计算 NRI 指数。
这里分别提供连续的 NRI 和分类变量计算的 NRI 两种方法,对于 NRI 的计算,其主要是比较新旧两个模型之间存在区分度,其中,参数 updown 主要定义了一个样本的风险是否变动的方式,category 是指分类值,即我们熟悉的低、中、高风险,另有一种 diff,为连续值,Cut 是判断风险高低的临界值,当 updown 为 diff 时,cut 只需设置 1 个值,比如 0.05,认为当预测的风险在新旧模型中相差 5%时,即被认为是重新分类了,当 updown 为 category时,可以对 cut 设置两个不同的值,比如 cut = c(0.3,0.6),表示 0~29%为低风险,30%~59%为中风险,60%~100%为高风险。下面,我们来看下计算的结果,当 updown 为 diff 时:
3 年和 5 年的 NRI 值分别为 0.26 和 0.53,均大于 5%,可以认为预测的风险在新旧模型中发生了重新分类,同时,由于做了 200 次重复取样,相当于有 200 个 NRI,于是 NRI 就有了标准误和 95%的置信区间
结果 1:3 年生存率 NRI 的 95%可信区间
结果 2:5 年生存率 NRI 的 95%可信区间
同样的,我们也可以得到当 updown 为 category 时的 NRI 值,基本上,对于模型的评价,目前主要使用这几个指标来进行,一张 Nomogram 图展示预测模型,然后通过 c 指数,校正曲线,DCA 曲线,以及 NRI 指数,最终对模型的好坏进行评估。接下来,看一下另外一个模型的评价方法。
二、Logistic 回归模型的评价
1.建立 Logstic 预测模型
1.1 引用 R 包
1.2 读取文件
可以发现,该数据集主要包括 5 个不同的变量和 1 个结局变量,在此,我们主要通过构建临床诊断模型,来预测结局 Status
1.3 构建 Logstic 模型
首先,对数据集中的相关参数进行设置。
随后,使用 glm()函数构建 Logstic 模型,在 R 中 glm()函数可以拟合广义线性模型,其中包括 Logstic回归模型。
其中,我们必须使用 family=binomial 这个参数来告诉 R 运行 Logstic 回归模型,而不是其他的广义线性模型。
通过 summary()函数,我们可以查看各个预测变量的系数及其 P 值。
可以看到,只有两个特征的 P 值小于 0.05(BMI 和 Education)。
2.计算 C 指数及绘制 ROC 曲线
2.1 C-Index 的计算
通过这种方式,我们也可以获得该模型的 C-Index 为 0.718,标准差为 0.061。
2.2 ROC 曲线的绘制
接下来,我们一起来看下如何绘制预测模型的 ROC 曲线通过 predict(fit)输入 roc()函数中构建 ROC 模型该模型 ROC 曲线的曲线下面积(AUC 值)为 0.718,对于 AUC 值,其含义与 C-Index较为类似,同时,该模型的最佳截断值(即 cut-off 值)为 0.011,也就是说当以 0.011 进行分组时,两组之间具有最佳的区分度。
3.绘制 Calibration plot
如图所示,X 轴为模型预测得到的结局可能性,而 Y 轴为实际观察得到的值,并重复计算 1000 次,其中 Bias-corrected 为校正曲线,而对角线 Ideal 为理想的曲线,校正曲线与理想曲线之间越相近,说明模型的预测能力越好,在该结果中,模型具有良好的校准能力。
4.绘制 DCA 曲线
评估完模型的准确性,同时还需要进一步评估模型的获益率,因此,我们通过 DCA 曲线,来展示患者的净获益率。
蓝色的曲线为模型预测的获益情况,灰色的曲线为所有患者都接受干预的获益率,横线为所有病人都不接受干预的获益率,取蓝色曲线与 All 的交点为起点,与 None 的交点为结束,在此范围内所对应的患者可以获益
5.计算 NRI 指数
在此,我们对比一下 BMI 的纳入对模型的质量是否会产生影响,首先,构建两个不同的预测模型接着,我们分别使用了两种不同的方式,进一步对两个模型进行了比较计算连续的 NRI,取值为 5%时就定义为重分类。
结果显示:两个模型之间比较的 NRI 值为 0.419(95%CI:0.247-0.671),可以认为预测的风险在新旧模型中发生了重新分类。
计算分类变量计算的 NRI,只有概率超过 0.011 就定义为重分组了,其中 0.011 是根据之前模型 B 的
ROC 分析确定的切点
两个模型之间比较的 NRI 值为 0.005(95%CI:0-0.021),可以认为预测的风险在新旧模型中并没有发生重新分类,两种方法任取一种来解释即可。到这里,整个故事也基本可以串联起来了,故事从一个目标基因出发,或者将一系列基因使用三大模型得到一个结果值开始,然后,差异分析,差异结果可视化展示,三大功能富集分析(Go,KEGG,GSEA),接着,三大调控网络,PPI 网络,ceRNA 网络,转录调控网络,结合一下免疫浸润评估,使用个estimate 整体评估,或者 CIBERSORT 和 ssGSEA 分类评估,继续来,做个生存分析,做个ROC 曲线,最后,将该分子或者预测模型,结合临床指标,做个临床预测模型,使用Nomogram 可视化,使用 c 指数,校正曲线,DCA 曲线,NRI 指数来评价,整个文章的故事,到此结束。基本上,主线的框架已经基本都讲完了,运用好这部分课程,发个 5 分左右的文章基本没问题。