打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
什么!竟然有比ROC曲线还要好的模型评估方法?
userphoto

2020.07.12

关注

作者:西红柿

编辑:馋猫

背景
Background


在以往的推文中,我们已经探索了C统计量(即,AUC,ROC曲线下的面积),它评估预测模型的区分性。但是它足够好吗?答案是:没有最好的,只有更好的。例如,无论选择哪个值作为分界值,通过连续指标预测患者是否生病都有一定的假阳性和假阴性概率。由于这两种情况都无法避免,我们将从构建预测模型的最初动机出发,试图找到一个预测最大净收益的模型。但是,我们如何计算这一预测的净效益呢?

2006年,安德鲁·维克斯(Andrew Vickers)等人为纪念斯隆-凯特琳癌症中心工作的世卫组织发明了一种新的计算方法,称为决策分析曲线(DCA)。与二次大战时的ROC分析相比,DCA显然“稚嫩”,但“青出于蓝而胜于蓝”,许多顶级医学期刊,如Ann Intern Med、JAMA、BMJ、J Clin Oncol等,都鼓励使用DCA决策曲线分析法。那么如何绘制吸引人的决策分析曲线呢?

确实,统计学家总是首先想到使用R来实现新的算法。他们首先公布了基于R语言的DCA算法,然后是基于SAA和STATA的DCA算法。Kerr等人还创建了一个名为DecisionCurve的R包用于实现决策曲线方法,它无法在CRAN官网下载。原始DecisionCurve包的所有功能都已集成到rmda包中。因此,当您需要绘制决策曲线时,您只需在R中安装rmda包。在互联网上最新版本的R软件中安装DecisionCurve包的教程是不恰当的。正确的方法是直接安装rmda包。下面我们将重点介绍DCA曲线的绘制方法,不会解释太多复杂的统计原理。


案例研究
Case Study
  • 【案例1】

我们使用的数据是NHLBI(国家心肺和血液研究所)著名的弗雷明翰心脏研究数据集的子集,包含4699个样本和10个变量。自变量包括性别(Sex)、SBP、舒张压(DBP)、血清胆固醇(SCL)、年龄(Age)、体重指数(BMI)等,因变量为冠心病相关死亡事件(CHDFATE)。在这种情况下,因变量是一个二类变量,在随访期间死亡为1,没有死亡为0。数据结构如下表所示。我们整理并将其命名为‘Framingham.csv’,可以找客服领取。

我们将使用数据集CHD相关死亡事件(CHDFATE)为结果变量建立两个Logistic回归模型来演示DCA曲线方法。一种是以SCL为预测因子的简单Logistic回归模型(simple),其结果为冠心病相关死亡(结果);另一种是多因素Logistic回归模型(complex),其中性别、年龄、BMI、SCL、SBP为预测因素,舒张压和冠心病相关死亡事件为预后(结果)。

加载rmda包(需要提前安装),然后加载数据。

构建DCA模型。我们首先使用Decision_curve()函数构建一个简单的模型,名为simple。

R代码解读

在Decision_Curve()函数中,family=binomial(link=‘logit’)使用Logistic回归来拟合模型。阈值设置横坐标阈值概率的阈值,一般是0-1;但如果有特定情况,大家都认为阈值概率高于某个值,比如40%,那么必须采取干预措施,这样0.4之后的研究就没有意义了,可以设为0-0.4。By是每隔一段距离计算一次数据点。“Study.design”可以设置研究的类型,也就是是“队列”还是“病例对照”。当研究类型为“病例对照”时,应增加“人群患病率”参数。因为在病例对照研究中,不能计算患病率,需要事先提供患病率。

然后,我们使用Decision_curve()函数构建复杂的Logistic回归模型,并将其命名为complex。语法和简单模型构造基本相同,只是在原有简单模型的基础上增加了自变量sbp dbp age bmi sex 。

我们将拟合的简单模型和复杂模型组合成单个模型,并将其命名为List。

我们使用plot_decision_curve()函数绘制DCA曲线,如下面的图所示。

代码解读:plot_decision_curve()函数的对象是前面定义的列表。如果只画一条曲线,可以直接将列表替换为simple或complex。curve.names是绘制绘图时图例上每条曲线的名称。写入顺序与上面合成列表时的顺序相同。cost.benefit.axis是横坐标的附加轴,loss-to-return的默认值为TRUE。当您不需要它时,请记住将其设置为false。col设置颜色。confidence.intervals设置是否绘制曲线的置信区间,标准化设置是否使用流行率校正净获益率(NB)。DCA曲线如下面的图所示。

曲线解读:可以看出,门槛在0.1-0.5的范围内,复杂模型的净获益率高于简单模型。

你可以通过下面的命令查看复杂模型曲线上的数据点,其中NB也可以更改为SNB,表示标准患病率。

绘制临床影响曲线,我们使用plot_clinical_impact()函数绘制简单模型的临床影响曲线。使用单因素模型预测1,000人的风险分层,显示“损失:收益”轴,赋予8个刻度,显示置信区间,得到如图所示的结果。

使用复杂模型预测1,000人的风险分层,显示“损失:收益”轴,赋予8个刻度,显示置信区间,得到如图所示。

曲线解释:红色曲线(高危人数)表示在每个阈值概率下,由单因素模型或多因素模型划分为阳性(高危人数)的人数; 蓝色曲线是在每个阈值概率下真阳性的人数。


  • 【案例2】

黑色素瘤数据框包含丹麦205例恶性黑色素瘤患者的数据。该数据框包含以下列:

(I)时间:以天为单位的生存时间,可能经过审查;

(II)状况:1名死于黑色素瘤,2活着,3死于其他原因;

(III)性别:1 =男性,0 =女性;

(IV)年龄:岁;

(V)手术年份;(VI)厚度:以毫米为单位的肿瘤厚度;

(VII)溃疡:1 =存在,0 =不存在.

R代码及其解释

目前,对于结果是生存数据的资料,CRAN当前已经没有关于DCA分析的相应软件包。我们可以采用自定义功能,或使用其他研究人员编写的函数。stdca.R文件是其他研究人员编写的函数源代码,您可以直接使用。我们首先加载stdca.R的源代码,可以找我们的客服领取。

加载MASS包并将Melanoma命名为data.set

定义生存结局

使用上一步中定义的stdca()函数执行决策曲线分析。

生存数据的DCA曲线解释原理与二进制数据的DCA曲线相似。

 

小结
Tips


决策曲线分析法是目前临床应用评价的一种预测方法。两种资料结局的处理方法相对成熟,但生存数据结局的处理比较棘手,因此还需要对该方法进行进一步的改进和更新。然而,我们应该理解这个事实:DCA分析不是评估预测模型临床实用性的唯一方法,也不是一个完美的方法。事实上,之前教程中已经提到了我们最常用的方法。对于两种分类结果的预测,要看预测模型是否具有更好的敏感性和特异性;对于生存结果的预测,一般要看基于预测模型能否将患者分为预后良好和预后不良,比如用nomogram计算每个受试者的评分,按照一个分界值对患者进行治疗,并将其分为预后良好和预后不良,然后绘制Kaplan-Meier生存曲线。

本期干货

- DCA决策分析曲线绘制代码 -

·

关注“科研猫”公众号

公众号主页点击“更多信息”-“联系客服”领取干货

更多科研新鲜资讯、文献精读和生物信息技

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
在外部验证集绘制 ROC、Calibration 校准曲线和 DCA 曲线的 R 源代码
ROC曲线老了,快来围观新晋小生DCA曲线!
临床预测模型文章解读第十期:人工智能结合大数据预测前列腺癌淋巴结转移
临床预测模型评价,不只有ROC,这个指标你遗漏了吗?
一文搞懂临床预测模型的评价!
临床预测模型 | 第18期. 明明白白决策曲线(DCA)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服