Logistic回归模型在临床应用十分广泛,可以用于预测、诊断等。上次我们说了COX回归使用C-index进行外部验证,今天我们来说说Logistic回归使用AUC进行外部验证。Logistic回归模型同样也要进行校准度和区分度的评价,关于校准度和区分度的概念就不说了,自行百度把。
首先我们得选出两个相同指标的数据集,一个用于建模,一个用于验证,我发现R语言的survival数据集刚好自带了两个数据mgus,mgus2,有相同的参数,可以用于建模和验证。
先把数据导入
library(survival)
library(rms)
data(package=“survival”)
查看这两个数据集
dd<-mgus
de<-mgus2
我们发现在这两个数据集中结局指标death和变量指标creat、hgb、age相同,我们就拿他们来建模,性别也是可以的,懒得改了
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)
建立模型并验证
f1<- glm(death~creat+hgb+age,data=be,family = binomial)
hl <- hoslem.test(be$death,fitted(f1),g=10)
hl
P>0.05,所以说不能说明模型不良。
cbind(hl$ observed,hl$ expected)#得出预测和实际的差异
#生成Hosmer-Lemeshow检验列联表,
#y0代表未发生事件的次数,
#y1代表发生事件的次数,
#yhat0代表模型预测事件未发生的概率,
#yhat1代表模型预测事件发生概率
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
这里P明显<0.05,验证数据测试模型校准度不好,不过我们是演示,不管他。
导入R包PredictABEL,并生成预测校准图
library(PredictABEL)
plotCalibration(data = be,
cOutcome = 4,#结果在第几行就选几
predRisk = pr.e,
groups = 10,
rangeaxis = c(0,1))
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))
原数据集AUC为0.768
现在来做验证数据集的
验证集AUC0.934,就是说在验证集数据里,模型准确率93.4%,非常好。