R语言实现计算净重新分类指数(NRI)和综合判别改善指数(IDI)

两个模型比较,与第一个模型相比,NRI=(重新分对的 - 重新分错的)/总人数。IDI=(新模型患者平均预测概率-旧模型患者平均预测概率)-(新模型非患者平均预测概率-旧模型非患者平均预测概率)。NRI=0无改善,>0新模型优于旧模型。IDI正值且越大越好。

1、非生存资料:广义线性模型

library(PredictABEL)
#数据集
data1<-data.frame(a=rnorm(n=1000,mean=6,sd=5),
                  b=rnorm(1000,30,9),
                  c=rnorm(1000,17,8),
                  cOutcome=sample(c(0,1),1000,replace=T))
#建模
model_1<-glm(cOutcome~.,data1,family="binomial")
model_2<-glm(cOutcome~a+c,data1,family="binomial")
#计算NRI和IDI
pre1<-predRisk(model_1)
pre2<-predRisk(model_2)#=model_2$fitted.values
reclassification(data = data1, cOutcome = 4, 
                 predrisk1 = pre1, predrisk2 = pre2, cutoff = c(0,0.6,1))

NRI<0,第二个模型较第一个模型差,降低了0.23%(IDI),但是均为统计学意义。

2、生存资料

#生存资料:CoIDI_NRI回归
library(survival)
data(cancer)
colnames(lung)
lung<-na.omit(lung)
coIDI_NRI1<- coIDI_NRIph(Surv(time, status) ~age+ph.ecog,
           data=lung,IDI_NRI=T)
coIDI_NRI2 <- coIDI_NRIph(Surv(time, status) ~.,
            data=lung,IDI_NRI=T)
#install.packages("nricens")
#1 利用nricens包
library(nricens)
nricens(mdl.std = coIDI_NRI1, 
        mdl.new = coIDI_NRI2, 
        t0 = 100,
        cut = c(0.2, 0.4),
        niter = 10)
#2 利用survIDINRI包
#install.packages("survIDINRI")
library(survIDINRI)
help(package="survIDINRI")
data_2 <- lung[,c("time","status")]
covs0 <- lung[,c("age","sex")]
covs1 <- lung[,c("age","sex","ph.ecog","ph.karno")]
IDI_NRI<-IDI.INF(data_2,covs0 = as.matrix(covs0),
           covs1=as.matrix(covs1), 
           t0=500, 
           npert=10)
IDI.INF.OUT(IDI_NRI)

 

 

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值