> 文章列表 > 临床决策曲线分析如何影响预测模型的使用和评价

临床决策曲线分析如何影响预测模型的使用和评价

临床决策曲线分析如何影响预测模型的使用和评价

目前,临床决策曲线分析(clinical decision curve analysis, DCA)在业界已经被超过1500文献使用,也被多个主流的临床杂志所推荐,更被写进了临床预测模型撰写标准(TRIPOD)中,但是许多预测模型的文章却仅仅把它当做另外一个模型评价的指标,显然是没有完全了解DCA对于预测模型的作用和意义。概括来说,DCA不仅为预测模型向临床应用的转化提供了一个接口,更反过来规范了预测模型的使用和评价。本文在此阐述DCA对于预测模型的重要作用和意义进行阐述,以期加深对着对DCA的理解并恰当应用。

1.临床决策曲线给预测模型划了一个“框”

  • 这个“框”就是决策阈值范围。DCA开创性地提出了代价-收益比(cost:benefit radio)的概念并使其与预测模型的决策阈值相关联。临床上,施加一项临床诊断或者治疗措施都有相反的两方面作用, 一方面是获益,一方面是代价,比如常用来作为例子的活检, 活检的收益是确诊疾病,代价是有创。如果某位医生认为活检确诊某种疾病的作用大的,而有创是小的,且大约是10倍的关系,那活检的代价-收益比就是1:9,代表了这位医生可以接受10位接受活检的患者中,有1位通过活检确诊了疾病(是益处),另外9位患者是阴性(仅是感受了活检的有创性,是代价)。这个比值就可以作为预测模型的决策阈值,即0.1,因为不同的医生心目中活检的代价-收益比是不一样的,所以决策阈值是一个范围更加合理, 比如0.05~0.2。这个“框”不简单,预测模型的使用和评价都要在这个“框内”。

2.预测模型的使用要在这个“框”内

  • 决策阈值范围的确定与疾病和治疗或诊断的手段有关,是纯粹的临床考量,和预测模型的表现毫无关系,且要求高于这个阈值范围上限的患者就一定要接受诊断或者治疗措施,而低于这个阈值范围的患者就不需要进行诊断或者治疗措施,所以预测模型的使用范围就是在这个阈值范围之内。为了能精确地划定这个“框”,专家推荐在构建预测模型之前明确预测模型应用的目的,即明确预测模型后续的诊断或治疗手段,因为对于不同的疾病,不同的检测治疗手段,其代价-收益比是不一样的,比如同样是活检,对于恶性程度一般的疾病其比值为1:10,而对于恶性程度较高的肿瘤,其比值可能为1:20。

3.进行预测模型的评价和模型之间的比较,也要在这个“框”内

  • 因为预测模型仅在这个“框”内起作用,所以对于评价一个预测模型是否合格或者两个模型哪个更加优秀,也要局限在在这个“框”内,超出这个框框的评价,无论是好还是坏,对于模型的临床应用都没有影响,所以也就没有价值。笔者在实际的数据分析中遇到这样一个情况,使用一个甲状腺癌远处转移的不平衡数据构建了一个预测模型,因为甲状腺癌远处转移的发病率极低,导致整体的校准度总是达不到要求,按照目前的对模型整体评价这样一个体系,这样的模型是不能进入下一步评价的,但是在临床决策曲线所规定的阈值范围内,预测模型的局部校准度是符合进入临床要求的。
    目前预测模型的评价指标体系,ROC曲线和校准曲线都可以做到局部评价。虽然局部的区分度和校准度评价体系有待于进一步发展并得到业内的认可,相信在总体评价的基础上增加局部评价会是未来预测模型评价的一种趋势,这里尝试罗列一些可能的局部评价指标及其R语言的实现:
  • 局部区分度:局部AUC(partial AUC),首先确定决策阈值的范围,然后在R语言包pROC中指定决策阈值范围即可实现partial AUC 的绘制和计算,具体操作是在其roc 函数中指定决策阈值对应的X轴(specificity)的范围(图2)。
  • 局部校准度:使用经典的R语言val.pro函数可以简单实现局部校准度的绘制,指定参数“lim”的范围与决策阈值范围相同即可(图1)。
  • 加权曲线下净收益面积:这是2016年Talluri等在净收益基础上提出的一个指标,目前并未广泛应用,也没有专门的R包来实现相关的计算,但是可以根据作者公布的公式来进行计算,计算公式为:
    W A − N B C = ∫ p t N B C ( p t ) d p t WA-NBC= \\int_{pt}NBC(pt)dpt WANBC=ptNBC(pt)dpt
    公式是一个积分,下限是pt,上限无,其中NBC(pt)是特定模型的净收益曲线。实际计算中可以使用R包的integrate()函数来实现。
#NBC(pt),需要提供一个数据框df_pred,包含了df_pred$.pred_1是预测的概率,conf_mat是混淆矩阵函数,df_pred$outcome是实际标签。
NBC<-function(pt,df=df_pred){y_pred_label=df$.pred_1>pt#ture or falsedf$y_pred_label<-ifelse(y_pred_label=='FALSE',0,1)%>%factor(levels=c(0,1))cm<-conf_mat(df,outcome,y_pred_label)%>%tidy()tp=cm$value[4]fp=cm$value[3]n = length(df$outcome)net_benefit = (tp / n) - (fp / n) * (pt / (1 - pt))return (net_benefit)#这里计算的是演示的NB值,如果想计算标准化的NB值,需要除以发病率(prevalence)
}
#WA-NBC,使用的积分函数,下限0.01,上限0.3
WA_NBC=stats::integrate(NBC,0.01,0.3)
WA_NBC

总之,DCA对于临床预测模型的意义不仅仅是提供了一个评价的指标,而是划定了一个模型使用和评价的范围,从根本上更新了对预测模型使用和评价的传统认知。

图1
图2