rocauc:ROC曲线老了,快来围观新晋小生DCA曲线!

股票学习网 发布:2021-11-11 10:22:39 阅读:265次

| | | | |

作者:麦子

转载请注明:解螺旋·临床医生科研成长平台

我们都知道,评价一种诊断方法是否好用,一般是作ROC曲线,计算AUC。但是,ROC只是从该方法的特异性和敏感性考虑,追求的是准确。而临床上,准确就足够了吗?患者就一定受益吗?

比如我通过某个生物标志物预测患者是否患了某病,无论选取哪个值为临界值,都会遇到假阳性和假阴性的可能,有时候避免假阳性受益更大,有时候则更希望能避免假阴性。既然两种情况都无法避免,那我就想要找到一个净受益最大的办法。这是个临床效用问题。

2006年,纪念斯隆凯特琳癌症研究所的AndrewVickers博士(就是题图那位帅帅的小卷毛)等人研究出另一种评价方法,叫决策曲线分析法(Decision Curve Analysis,DCA)。相对于二战时期诞生的ROC曲线,DCA还很年轻,也一直在完善之中,不过2012-2016年间,Ann InternMed.、JAMA、BMJ、J Clin Oncol等杂志都已陆续发文,推荐使用决策曲线分析法。

Lancet. 2016 Jun 4;387(10035):2302-11.

这是一个来自Lancet的例子,研究者为了评价房颤患者口服抗凝药的出血风险,开发了一种新的评价方法,即基于生物标志物的ABC出血风险评分(Age,Biomarkers,Clinicalhisory),让它和传统的ORBIT及HAS-BLED法比较。这种类型的研究,咱们通常就是作ROC曲线。但他们没有,而是采用了决策曲线分析法。

这幅图的横坐标为阈概率(ThresholdProbability)。当各种评价方法达到某个值时,患者i的出血风险概率记为Pi;当Pi达某个阈值(记为Pt),就界定为阳性,采取某种干预措施(比如更改抗凝方案)。

那么改了抗凝方案,自然就改变了出血与血栓形成之间的利弊平衡,纵坐标就是利减去弊之后的净获益率(Net Benefit, NB)。

(Pi < Pt),所有人都没干预,净获益为0。斜的那条表示所有样本都是阳性,所有人都接受了干预,净获益是个斜率为负值的反斜线(原理见后文)。其它的曲线就与它们相比较。

从图中可以看出,HAS-BLED曲线和两条极端曲线很接近,也就是说它没什么应用价值。而在一个很大的Pt区间范围内,ABC法和ORBIT法的获益都比极端曲线高,所以它们可选的Pt范围都比较大,相对安全。而ABC又比ORBIT好一些。

绘制决策曲线

毕竟这是新的算法嘛,传统的统计软件好像还木有跟上,R语言倒是跟得挺快。2016年,Kerr等人专为决策曲线制作了个名为DecisionCurve的R语言包,现在连DCA的诞生地,纪念斯隆凯特琳癌症研究所的官网教程中,都还没更新到这个包的使用方法。好在它真的很简单。

这里有一份示例数据,是NHLBI(美国国家心肺血液研究所)的Framingham心脏研究专项数据集的一个子集,4000多个样本。

自变量分别为性别(sex)、收缩压(sbp)、舒张压(dbp)、血清胆固醇(scl)、年龄(age)、身体质量指数(bmi)等,因变量为冠心病相关死亡事件(chdfate)。因变量必须是二元变量,随访时间内死亡为1,未死亡为0。

下面建立两个模型,来演示怎样画出DCA曲线。一个是简单模型,以血清胆固醇值为预测方法(predictor),死亡事件为结果(outcome);另一个是复合模型,联合性别、年龄、BMI、血清胆固醇、收缩压、舒张压为预测方法,死亡事件为结果。

准备工作

library(DecisionCurve)

setwd('D:DCA')

Data<- read.csv('2.20.Framingham.csv',sep = ',')

DCA运算

simple<- decision_curve(chdfate~scl,data = Data, family = binomial(link ='logit'),

表1:研究队列的临床病理特征

表2:16个候选蛋白标志物预测DM,BCR及GG的AUC值

图1:SOC变量+蛋白组合预测模型的ROC曲线

表3:DM蛋白标志物的cut-point

表4:BCR蛋白标志物的cut-point

图2:DM蛋白标志物高低表达组的DM-free survival生存曲线

在此不对具体计算公式和逻辑进行解释,大家可以理解成,WOE和IV都是使用样本好坏比例的数据转换成的指标。对详细方法感兴趣的朋友可戳这篇:http://blog.csdn.net/jiabiao1602/article/details/77869524。

2.ROC/AUC

ROC(receiver operating characteristic curve),中文叫"接受者操作特性曲线"。

这里需要补充的基础知识是关于经典的混淆矩阵(confusion matrix)的内容。这个分析的经典之处在于,它超出了我们以往理解"正确率"的限制,使得我们有更多的维度去评价一个模型的预测能力。(哇喔我们已经不知不觉的涉及到了机器学习的内容)

以下的表格就是混淆矩阵的内容。怎么来理解呢?在使用一个模型去判断一个样本是"正样本"还是"负样本"的时候,模型会输出"正"或者"负"两种预测,叫做预测值;而实际上这个样本会有正样本或者负样本两种情况,称为实际值(类似我们利用模型预测"好人"及"坏人")。预测值和实际值各有两种情况,这两种情况的交叉组合就形成了以下的混淆矩阵。

通过上面的矩阵,可以衍生出几个重要的评价指标:

"准确率(Accuracy Rate):(TP+TN)/N。

"召回率(TPR,True Positive Rate):TP/(TP+FN)。在所有实际是正样本中有多少被正确识别为正样本。

"误报率(FPR,False Positive Rate):FP/(FP+TN)。在所有实际为负样本中有多少被错误识别为正样本。

"查准率(Precision Rate):TP/(TP+FP)。被识别成正样本的样本中有多少是真的正样本。

(更多关于混淆矩阵的评价指标:混淆矩阵(Confusion Matrix)分析)

回到ROC的话题上来。以混淆矩阵中的FPR为横坐标,以TPR为纵坐标,就可以画出风控界知名的ROC曲线,而曲线下方的面积就是AUC(Area Under Curve)。

ROC曲线是怎么画出来的,这里有一个非常棒的解释:ROC和AUC介绍以及如何计算AUC。但简单一点去理解的话,可以先尝试理解图像上的一点,比如图中的A点。A点对应的是,给定一个划分好人坏人的分数线(比如600分以上是好人),然后使用这个模型进行预测。预测的结果是,实际上为坏人且预测结果是坏人的概率是0.8,而实际是坏人却被预测为好人的概率是0.1。由于我们可以设定不同的分数线,因此通过这种方式可以产生不同的点,这些点也就连成了ROC曲线。

按照上面的理解,那我们肯定希望被准确预测为坏人的概率越高越好,而被误判为好人的概率越低越好,所以一个越好的分类模型,ROC曲线越接近左上方,AUC也越来越接近1;反之,如果这个分类模型得出的结果基本上相当于随机猜测,那么画出的图像就很接近于左下角和右上角的对角线(即图中标注的"random chance"),那么这个模型也就没什么意义了。

3.K-S

作为一个模型,我们当然希望这个模型能够帮我们挑选到最多的好客户,同时不要放进来那么多坏客户。K-S值就是一个这样思路的指标。比如,在完成一个模型后,将测试模型的样本平均分成10组,以好样本占比降序从左到右进行排列,其中第一组的好样本占比最大,坏样本占比最小。这些组别的好坏样本占比进行累加后得到每一组对应的累计的占比。好坏样本的累计占比随着样本的累计而变化(图中Good/Bad两条曲线),而两者差异最大时就是我们要求的K-S值(图中比较长的直线箭头的那个位置)。

KS值的取值范围是[0,1]。通常来说,值越大,表明正负样本区分的程度越好。一般,KS值>0.2就可认为模型有比较好的预测准确性。

4.GINI系数

还记得经济学中那个著名的基尼系数吗?下图应该可以让你回忆起来。将一个国家所有的人口按最贫穷到最富有进行排列,随着人数的累计,这些人口所拥有的财富的比例也逐渐增加到100%,按这个方法得到图中的曲线,称为洛伦兹曲线。基尼系数就是图中A/B的比例。可以看到,假如这个国家最富有的那群人占据了越多的财富,贫富差距越大,那么洛伦茨曲线就会越弯曲,基尼系数就越大。

同样的,假设我们把100个人的信用评分按照从高到低进行排序,以横轴为累计人数比例,纵轴作为累计坏样本比例,随着累计人数比例的上升,累计坏样本的比例也在上升。如果这个评分的区分能力比较好,那么越大比例的坏样本会集中在越低的分数区间,整个图像形成一个凹下去的形状。所以洛伦兹曲线的弧度越大,基尼系数越大,这个模型区分好坏样本的能力就越强。

rocauc:ROC曲线老了,快来围观新晋小生DCA曲线!所属专题: roc曲线专题   本文《rocauc:ROC曲线老了,快来围观新晋小生DCA曲线!》链接:http://www.gzhwuliu.cn/31566/
回顶部