首页 > 技术文章 > DecisionCurve决策曲线分析法

qiniqnyang 2017-06-13 15:24 原文

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

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

一个是简单模型,以血清胆固醇值为预测方法(predictor),死亡事件为结果(outcome);另一个是复合模型,联合性别、年龄、BMI、血清胆固醇、收缩压、舒张压为预测方法,死亡事件为结果。

#安装软件
install.packages("DecisionCurve")
#导入软件
library(DecisionCurve)
#设置路径
setwd("~/Desktop/cancerlab/file")
#导入文件
Data<- read.csv('2.20.Framingham.csv',sep = ',')
#使用函数建立模型
simple<- decision_curve(chdfate~scl,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)
#decision_curve()函数中,family =binomial(link = ‘logit’)是使用logistic回归来拟合模型。threshold设置横坐标阈概率的范围,一般是0 ~ 1;但如果有某种具体情况,大家一致认为Pt达到某个值以上,比如40%,则必须采取干预措施,那么0.4以后的研究就没什么意义了,可以设为0 ~ 0.4。by是指每隔多少距离计算一个数据点。

 

可见,在Pt约为0.1~0.5范围内,复合评价模型的净受益率都比简单模型高。
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)
summary(complex)
List<- list(simple,complex)

plot_decision_curve(List,curve.names= c('simple','complex'),cost.benefit.axis =FALSE,col = c('red','blue'),confidence.intervals =FALSE,standardize = FALSE)

 

# 使用simple模型预测1000人的风险分层,显示“损失:受益”坐标轴,赋以8个刻度,显示置信区间,得到下图:
plot_clinical_impact(simple,population.size = 1000,cost.benefit.axis = T, n.cost.benefits= 8,col = c('red','blue'), confidence.intervals= T)


#红色曲线(Numberhigh risk)表示,在各个阈概率下,被simple模型划分为阳性(高风险)的人数;蓝色曲线(Number high risk with outcome)为各个阈概率下真阳性的人数。

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

推荐阅读