决策曲线DecisionCurve

决策曲线DecisionCurve
本⽂转⾃:
简介
评价⼀种诊断⽅法是否好⽤,⼀般是作ROC曲线,计算AUC。但是,ROC只是从该⽅法的特异性和敏感性考虑,追求的是准确。⽽临床上,准确就⾜够了吗?患者就⼀定受益吗?
⽐如我通过某个⽣物标志物预测患者是否患了某病,⽆论选取哪个值为临界值,都会遇到假阳性和假阴性的可能,有时候避免假阳性受益更⼤,有时候则更希望能避免假阴性。既然两种情况都⽆法避免,那我就想要到⼀个净受益最⼤的办法。
2006年,MSKCC(纪念斯隆凯特琳癌症研究所)的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语⾔包。
这⾥有⼀份⽰例数据,是NHLBI(美国国家⼼肺⾎液研究所)的Framingham⼼脏研究专项数据集的
⼀个⼦集,4000多个样本。
⾃变量分别为性别(sex)、收缩压(sbp)、舒张压(dbp)、⾎清胆固醇(scl)、年龄(age)、⾝体质量指数(bmi)等,因变量为冠⼼病相关死亡事件(chdfate)。因变量必须是⼆元变量,随访时间内死亡为1,未死亡为0。
下⾯建⽴两个模型,来演⽰怎样画出DCA曲线。⼀个是简单模型,以⾎清胆固醇值为预测⽅法(predictor),死亡事件为结果(outcome);另⼀个是复合模型,联合性别、年龄、BMI、⾎清胆固醇、收缩压、舒张压为预测⽅法,死亡事件为结果。
准备⼯作
/
/#library(DecisionCurve) # 注:DecisionCurve包已经不再维护,更名为rmda
library(rmda)
setwd('D:\\DCA')
1区212
Data<- read.csv('2.20.Framingham.csv',sep = ',')
DCA运算
simple<- decision_curve(chdfate~scl,data = Data, family = binomial(link ='logit'),
thresholds= seq(0,1, by = 0.01),lcu
confidence.intervals =0.95,study.design = 'case-control',
population.prevalence = 0.3)
#decision_curve()函数中,family =binomial(link = ‘logit’)是使⽤logistic回归来拟合模型。threshold设置横坐标阈概率的范围,⼀般是0 ~ 1;但如果有某种具体情况,⼤家⼀致认为Pt达到某个值以上,⽐如40%,则必须采取⼲预措施,那么0.4以后的研究就没什么意义了,可以设为0 ~ 0.4。by是指每隔多
少距离计算⼀个数据点。
# Study.design可设置研究类型,是cohort还是case-control,当研究类型为case-control时,还应加上患病率population.prevalance参数。
complex<- decision_curve(chdfate~scl+sbp+dbp+age+bmi+sex,data = Data,
family = binomial(link ='logit'), thresholds = seq(0,1, by = 0.01),
confidence.intervals= 0.95,study.design = 'case-control',
population.prevalence= 0.3)
# 基本和simple相同,就是那⼏个联合应⽤的变量之间⽤个+号连接起来。
List<- list(simple,complex)
#把刚才计算的simple和complex两个对象合成⼀个list,命名为List。
DCA曲线绘制
plot_decision_curve(List,curve.names= c('simple','complex'),东方轮船公司
cost.benefit.axis =FALSE,col = c('red','blue'),
confidence.intervals =FALSE,standardize = FALSE)
#plot_decision_curve()函数的对象就是刚才的List,如果只画⼀根曲线,就不需要合成的那步,直接把List替换成simple或complex就好了。
# curve.names是出图时,图例上每条曲线的名字,书写顺序要跟上⾯合成list时⼀致。cost.benefit.axis是另外附加的⼀条横坐标轴,损失收益⽐,默认值是TRUE,所在不需要时要记得设为FALSE。col就是颜⾊。confidence.intervals设置是否画出曲线的置信区
间,standardize设置是否对净受益率(NB)使⽤患病率进⾏校正。
好了,这样就得到如下曲线:
可见,在Pt约为0.1~0.5范围内,复合评价模型的净受益率都⽐简单模型⾼。
然后可⽤summary(complex,measure= 'NB')查看complex模型曲线上的各数据点,当然,NB也可以改成sNB,表⽰经过患病率的标准化:
接下来的⼀个函数,就是Kerr等⼈对DCA算法的进⼀步发展了,即绘制临床影响曲线(Clinical Impact Curve):
plot_clinical_impact(simple,population.size = 1000,cost.benefit.axis = T,
confidence.intervals= T)
# 使⽤simple模型预测1000⼈的风险分层,显⽰“损失:受益”坐标轴,赋以8个刻度,显⽰置信区间,得到下图:
红⾊曲线(Numberhigh risk)表⽰,在各个阈概率下,被simple模型划分为阳性(⾼风险)的⼈数;蓝⾊曲线(Number high risk with outcome)为各个阈概率下真阳性的⼈数。意义⼀⽬了然吧。
DCA算法的设计原理
其实了解到上⾯的也够了,再了解下⾯的就锦上添花啦~
它相当于在回归预测分析的基础上,引⼊了损失函数。先简单定义⼏个概念:
P:给真阳性患者施加⼲预的受益值(⽐如⽤某⽣化指标预测某患者有癌症,实际也有,予活检,达到了确诊的⽬的);
国家税务总局公告2017年第45号
L:给假阳性患者施加⼲预的损失值(⽐如预测有癌症,给做了活检,原来只是个增⽣,⽩⽩受了⼀⼑);
Pi:患者i有癌症的概率,当Pi > Pt时为阳性,给予⼲预。
所以较为合理的⼲预的时机是,当且仅当Pi × P >(1 – Pi) × L,即预期的受益⾼于预期的损失。推导⼀下可得,Pi > L / ( P + L )即为合理的⼲预时机,于是把L / ( P + L )定义为Pi的阈值,即Pt。
但对⼆元的预测指标来说,如果结果是阳性,则强制Pi=1,阴性则Pi = 0。这样,⼆元和其他类型的指标就有了可⽐性。
然后我们还可⽤这些参数来定义真阳性(A)、假阳性(B)、假阴性(C)、真阴性(D),即:
A:Pi ≥ Pt,实际患病;
B:Pi ≥ Pt,实际不患病;
C:Pi < Pt,实际患病;
D:Pi < Pt,实际不患病。
我们有⼀个随机抽样的样本,A、B、C、D分别为这四类个体在样本中的⽐例,则A+B+C+D = 1。那么,患病率(π)就是A + C了。
在这个样本中,如果所有Pi ≥ Pt 的⼈我们都给做了活检,那么就会有⼈确诊,有⼈⽩⽩被拉了⼀⼑,那么净受益率NB = A × P – B ×L。
但Vickers认为,知道P和L的确切值并没有什么实际意义,⼈们可能更关⼼L/P的⽐值,所以将上⾯的公式强⾏除以P,变成NB = A – B × L/P。根据Pt定义公式可推导出:NB = A – B × Pt / ( 1 – Pt )。以Pt为横坐标,U为纵坐标,画出来的曲线就是决策曲线。
若使⽤患病率进⾏校正,则U = A ×π– B ×(1 –π) × Pt / ( 1 – Pt )。
那么两个极端情况的曲线也很好推导了。当所有样本都是阴性(Pi < Pt),所有⼈都没⼲预,那么A = B = 0,所以NB = 0。当所有样本都是阳性,所有⼈都接受⼲预,那么C = D = 0,A = π,B = 1 –π(因为A+B+C+D=1),则NB = π– ( 1 –π )Pt / ( 1 – Pt ),所以它斜率为负值(
当然实际上,由这个表达式可知,阳性极端线不是直线,⽽是曲线)。
仙魔经纪人以上是分类模型中的决策曲线。⽣存模型也是有决策曲线的,具体请参考:
参考资料:
1.Decision curve analysis: anovel method for evaluating prediction models
平稳信号
2.Decision curve analysisrevisited: overall net benefit, relationships to ROC curve analysis, andapplication to case-control studies
3.Assessing the Clinical Impactof Risk Prediction Models With Decision Curves: Guidance for CorrectInterpretation and Appropriate Use

本文发布于:2024-09-23 05:19:08,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/406888.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:曲线   阳性   模型   患者   预测   受益
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议