Logistic回归模型在临床应用十分广泛,可以用于预测、诊断等。上次我们说了COX回归使用C-index进行外部验证,今天我们来说说Logistic回归使用AUC进行外部验证。Logistic回归模型同样也要进行校准度和区分度的评价,关于校准度和区分度的概念就不说了,自行百度把。

首先我们得选出两个相同指标的数据集,一个用于建模,一个用于验证,我发现R语言的survival数据集刚好自带了两个数据mgus,mgus2,有相同的参数,可以用于建模和验证。

先把数据导入

library(survival)
 library(rms)
 data(package=“survival”)

LOGISTIC r语言 r语言logistic回归模型检验_数据库


查看这两个数据集

dd<-mgus
 de<-mgus2

LOGISTIC r语言 r语言logistic回归模型检验_数据集_02


我们发现在这两个数据集中结局指标death和变量指标creat、hgb、age相同,我们就拿他们来建模,性别也是可以的,懒得改了

LOGISTIC r语言 r语言logistic回归模型检验_建模_03


1.校准度评价

我们要使用R语言中的ResourceSelection包,hoslem.test()来进行Hosmer-Lemeshow拟合优度检验,通常我们用这个R包来评价Logistic模型的校准度。

首先要导入ResourceSelection这个R包

然后对这两个数据集取需要变量,删除缺失值,这一步很重要,不然等下R会说变量长度不一报错

be<-de[c(2,5,6,11)]
 bd<-dd[c(2,8,10,11)]
 be<-na.omit(be)
 bd<-na.omit(bd)

LOGISTIC r语言 r语言logistic回归模型检验_数据库_04


建立模型并验证

f1<- glm(death~creat+hgb+age,data=be,family = binomial)
 hl <- hoslem.test(be$death,fitted(f1),g=10)
 hl

LOGISTIC r语言 r语言logistic回归模型检验_建模_05

P>0.05,所以说不能说明模型不良。

cbind(hl$ observed,hl$ expected)#得出预测和实际的差异

#生成Hosmer-Lemeshow检验列联表,

#y0代表未发生事件的次数,

#y1代表发生事件的次数,

#yhat0代表模型预测事件未发生的概率,

#yhat1代表模型预测事件发生概率

LOGISTIC r语言 r语言logistic回归模型检验_LOGISTIC r语言_06


pr.e <- predict(f1,bd,type = c(“response”))#得出预测概率

用预测概率在验证数据集检验模型

pr.e <- predict(f1,bd,type = c(“response”))
 h2 <- hoslem.test(bd$death,pr.e,g=10)
 h2

LOGISTIC r语言 r语言logistic回归模型检验_建模_07


这里P明显<0.05,验证数据测试模型校准度不好,不过我们是演示,不管他。

导入R包PredictABEL,并生成预测校准图

library(PredictABEL)
 plotCalibration(data = be,
 cOutcome = 4,#结果在第几行就选几
 predRisk = pr.e,
 groups = 10,
 rangeaxis = c(0,1))

LOGISTIC r语言 r语言logistic回归模型检验_数据集_08


2.现在来做区分度

先做原数据集的

library(pROC)
 pr <- predict(f1,newdata= bd,type = c(“response”))
 pr2<-predict(f1,data=be,type=c(‘response’))
 roccurve1 <- roc(be$death ~ pr2)
 auc(roccurve1)
 plot.roc(roccurve1,xlim = c(1,0),ylim=c(0,1))

LOGISTIC r语言 r语言logistic回归模型检验_建模_09


LOGISTIC r语言 r语言logistic回归模型检验_建模_10


原数据集AUC为0.768

现在来做验证数据集的

LOGISTIC r语言 r语言logistic回归模型检验_LOGISTIC r语言_11


LOGISTIC r语言 r语言logistic回归模型检验_数据集_12


验证集AUC0.934,就是说在验证集数据里,模型准确率93.4%,非常好。