一个出色的临床预测模型需要具备高度的区分能力校准性

区分能力反映了模型区别不同结果能力的效果,其核心评价指标包括ROC曲线下面积(AUC)和C指数,校准性则指模型预测的准确度,它通过比较预测结果和实际发生情况之间的吻合程度来衡量。这种一致性反映了模型对于绝对风险预测的精确性,通常采用Hosmer-Lemeshow拟合优度测试来评价。

校准曲线是将Hosmer-Lemeshow测试结果可视化的方法,通过对比不同分位数上的预测概率与观察概率,来作为评估预测概率准确性的图形工具,实际上展现的是预测概率与发生概率的对比散点图。

一、通过rms包的val.prob函数绘制校准曲线(logistic回归)

library(rms)    #加载R语言中的rms包。rms包是一个用于回归模型策略和其他统计学方法的包
f1 <- glm(l ~ a1 + h123 + L097 + M_V + wc111 + p1495, data = Train, family = binomial(link = "logit"))   #这个模型预测变量l(通常代表二元结果,比如是/否)作为因变量,a1、h123、L097、M_V、wc111和p1495作为自变量。这里使用的是binomial分布(二项分布),链接函数为logit,代表是一个逻辑回归模型。这个模型是用Train数据集来拟合的。
P1 <- predict(f1, type = "response")
val.prob(P1, Train$l)

如何用r语言做logistic回归 r语言lrm logistic_拟合

生成的校准曲线和返回值中还提供了其他一些统计指标:

Dxy(预测概率与观测值的秩相关大小,等于2C-0.5);

C(ROC)即C指数,也就是ROC曲线下面积,等于1+Dxy/2;

R2为模型的复相关系数(Nagelkerke-Cox-Snell-Maddala-Magee R-squared index);

D为区分指数(Discrimination index),等于 (Logistic model LR χ2 - 1)/n,值越大越好;LR χ2 及P值;

U为不可靠指数(Unreliability index),越小越好;U指数检验χ2和P值 (H0: intercept=0,slope=1));

Q为品质指数(Quality index),值越大越好;

Brier是预测值和真实值的均方误差,值越小越好;

Intercept为截距;

Slope为斜率;

Emax为预测值和实际值的最大绝对差值;

Eavg为预测值和实际值的平均差值;

E90为预测值和真实值差值的90%分位数;

S:z和S:p是Spiegelhalter Z-test的Z值和P值,要求P>0.05,说明无差异,说明拟合的线与标准参考线吻合度高

二、通过rms包的calibrate函数绘制校准曲线(logistic回归)

library(rms)   # 加载rms包
Model <- lrm(ods ~ com + preo + defi + timem + CD34, x = T, y = T, data = X7)    #构建模型
Model         #输出模型结果
cal<-calibrate(Model,data = X7)
plot(cal,
     xlim=c(0,1.0),ylim=c(0,1.0),
     xlab = "Predicted Probability",
     ylab = "Observed Probability"
)   #输出校准曲线图片

如何用r语言做logistic回归 r语言lrm logistic_加载_02

三、通过rms包的calibrate函数绘制校准曲线(Cox回归)

library(survival)
library(rms)   #加载survival和rms包
head(lung)  #lung是survival包中的一个示例数据集,通常用于演示生存分析。
lung <- na.omit(lung) #删除缺失值
str(lung) #查看数据结构
lung$sex<-factor(lung$sex,levels=c(1,2),labels=c('male','female'))    #将性别变量sex从数值类型转换为因子类型,并指定1和2分别代表male(男性)和female(女性)。
lung$status[lung$status==1] <- 0
lung$status[lung$status==2] <- 1   #转换生存状态status的编码,将1(原本可能表示存活)转换为0,将2(原本可能表示死亡)转换为1,以适应生存分析的常规编码方式。
dd <- datadist(lung)
options(datadist = "dd")     #创建数据的分布对象dd,并将其设置为rms包的全局选项,这是进行校准分析前的准备步骤。
cox1 <- cph(Surv(time,status)~inst+age+sex+ph.ecog+ph.karno,x=TRUE,y=T,
            data=lung,surv=T,time.inc = 365)    #使用cph函数拟合Cox比例风险模型。模型以时间(time)和状态(status)构建生存对象,预测变量包括机构(inst)、年龄(age)、性别(sex)、东协癌症研究组织表现状态
cal1 <- calibrate(cox1,cmethod='KM',method='boot',
                  u=365,  #与建模中time.inc一致,即365
                  m=33, #m约等于样本量除以3左右
                  B=1000)  #使用calibrate函数对Cox模型进行校准。cmethod='KM'使用Kaplan-Meier方法,method='boot'指定使用bootstrap方法进行校准。u=365设置预测时间点为一年,m和B参数控制bootstrap的详细设置。
plot(cal1,lty = 1,lwd = 1.5,xlim = c(0,1),ylim = c(0,1),
     errbar.col = "blue", 
     xlab="Predicted Probability of 1-year OS",
     ylab="Actual 1-year OS",
     col="red", subtitles = F)     #通过line与abline调整图形
abline(0,1,lty=3,lwd=1,col="black")
lines(cal1[,c("mean.predicted","KM")],type="b",lwd=1.5,col="orange",pch=10)

如何用r语言做logistic回归 r语言lrm logistic_人工智能_03