7.评价预测模型——C指数,NRI,IDI计算

本文主要介绍了R语言中C指数、净重新分类指数(NRI)和综合判别改善指数(IDI)在二分类资料和生存资料中的应用。阐述了C指数的概念、评价标准及计算方法,分析了C指数用于模型比较的缺点,还介绍了NRI和IDI的原理、计算方法及结果解读,并通过具体案例展示了它们在不同资料中的应用。

目录

基本知识

1. C指数

2. NRI、IDI

二分类资料

1. C指数

C指数计算

比较两个模型C指数

2. NRI

3. IDI

生存资料

1. rms包拟合的生存曲线

C指数

比较两个模型的C指数

2. survival包拟合的生存曲线

C指数

NRI计算

IDI


基本知识

1. C指数

C指数:

C指数,又称为一致性指数,可评价模型的预测能力,尤其是评估COX回归模型的判别能力。C指数是指所有病人对子中,预测结果与实际结果一致的对子数占总子数的比例,表示预测结果与实际结果相一致的概率。

C指数的评价:

C指数的范围为0.5-1,若C指数为0.5,为完全随机,说明该模型没有预测作用;C指数为1,说明完全一致。C指数在0.5-0.7之间的精度较低,C指数在0.71-0.90之间为中等准确度,C指数在0.90以上为高准确度。

C-index与AUC的关系:

对于二元logistic回归模型,C指数可以简化为:预测患有某种疾病的患者出现疾病的概率大于预测该疾病本身的概率。结果表明,二元Logistic回归的C指数等价于AUC。AUC主要反映二元Logistic回归模型的预测能力,而C-index可以评价各种模型预测结果的准确性。

Cox模型的C指数计算概述:

(1)方法一:直接运用生存包中的coxph()函数输出结果。95%CI可以通过C加减1.96*Se得到。

(2)方法二:在rms包中cph()函数和validate()函数,非调整的偏置调整的C-index都能得到。

2. NRI、IDI

净重新分类指数 NRI,综合判别改善指数 IDI可用于不同预测模型的比较。

C指数进行模型比较的缺点:

  • C指数不够敏感,在旧模型中增加新变量,C指数提升程度有限;
  • 从临床角度,C指数不易被理解。

净重新分类改善指数(Net Reclassification Index,NRI)

原理:首先将研究对象按照金标准分为患病和未患病组,然后分别在这两组中,新、旧模型对研究对象进行分类,整理成两个四格表。最后根据患病组和未患病组中在新、旧模型下的差别来计算净重新分类指数NRI。

在table3中,c1是原来模型没有预测对,新模型预测对的,同样的道理,b1是原来模型预测对,但新模型给预测错的,于是(c1 − b1)/N1便是疾病组或者event组增加的重分类的正确比。

同样我们可以得到非疾病组中(table 4)中增加的重分类正确比为(b2 − c2)/N2。

NRI = (c1 − b1)/N1 + (b2 − c2)/N2

结果解读:NRI表示的是重分类的正确个案占比的增加量,所以若NRI>0,则为正改善,说明新模型比旧模型的预测能力有所改善;若NRI<0,则为负改善,新模型预测能力下降;若NRI=0,则认为新模型没有改善

计算方法:预测模型NRI计算首选nricens包

综合判别改善指数IDI(Integrated discrimination improvement, IDI)

原理:在疾病组,模型预测阳性的概率要尽可能大,在非疾病组模型预测阳性的概率要尽可能小,通过模型的预测概率差值依然可以得到一个评价指数。如果新模型比原模型:在阳性组,预测阳性的概率比旧模型的大;在阴性组,预测阳性的概率比旧模型的小。那么就可以说明新模型比旧模型好。

IDI = (Pnew,events–Pold,events) – (Pnew,non-events – Pold,non-events)

Pnew,events表示在疾病组新模型的预测阳性概率,Pold,non-events表示在非疾病组旧模型的预测阳性概率。

IDI就等于疾病组新旧模型的预测阳性概率的差值减去非疾病组新旧模型预测阳性概率的差值(因为对于非疾病组模型预测阳性的概率应该是越小越好,所以中间是减号)

结果解读IDI越大越说明新模型比旧模型预测效果更好。若IDI>0,则为正改善,说明新模型比旧模型的预测能力有所改善,若IDI<0,则为负改善,新模型预测能力下降,若IDI=0,则认为新模型没有改善。

二分类资料

案例:预测肺动脉栓塞风险

library(readxl)
data <- read_excel("data.xlsx")
data<-na.omit(data)
data<-as.data.frame(data)

 创建Logistic预测模型

#建立模型公式
form.bestglm<-as.formula(group~age+BMI+ToS+CA153+CDU+transfusion+stage)
form.all<-as.formula(group~.)
#打包
library(rms)
dd=datadist(data)
options(datadist="dd")
#Logistic模型拟合
fit.glm<- lrm(formula=form.bestglm,data=data,x=TRUE,y=TRUE)  
#计算预测值
data$predvalue<-predict(fit.glm)

1. C指数

C指数计算

因为C指数在logistic回归二分类中等价于ROC,所以:

方法一:ROC计算

library(pROC)
modelROC <- roc(data$group,data$predvalue)
auc(modelROC)
ci(auc(modelROC))

提取出fit.glm中的预测值,然后利用roc()函数进行ROC拟合。auc()提取模型的ROC值,ci()提取ROC的95%CI。

输出的结果可以显示AUC为0.8063,95%CI为0.7582-0.8544。所以模型的C指数为0.8063。

方法二:Hmisc包中somers2()函数

library(Hmisc)
somers2(data$predvalue, data$group)

注意:区别于roc()函数的顺序,roc()函数中输入的是实际值,预测值;在somers2中输入的是预测值,后是实际值。

以上两者方法计算的C指数都是非校正的C指数

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值