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))

R语言实现计算净重新分类指数(NRI)和综合判别改善指数(IDI)_第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)

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

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

 

你可能感兴趣的:(模型评价,r语言,数据挖掘)