7.评价预测模型——Calibration校准曲线

低功耗蓝牙项目,需要一块懂省电的板

思澈 SF32LB52 芯片,BLE 协议栈深度优化,上手即开发

目录

二分类资料

1. 单一模型校准曲线

lrm()函数拟合的logistic模型

glm()函数拟合的logistic模型

a.Score()函数

B.val.prob()函数

2.多模型校准曲线

lrm()拟合的logistic回归

glm()拟合的logistic回归

生存资料

​编辑

单模型单时点校准曲线

rms包cph()函数拟合的生存模型

survival包coxph()函数拟合的生存模型

单模型多时点校准曲线

多模型同时点校准曲线

cph()函数

coxph()函数


Calibration校准曲线:就是将实际发生率和预测发生率绘制的散点图。是对Hosmer-Lemeshow拟合优度检验的结果可视化。

基本原理:

首先利用列线图预测每位研究对象的预测值,并将其按从低到高的顺序排列,根据四分位数将队列分为4组(或者根据其他分位数分组),然后分别计算每组研究对象的预测值和相应的实际值得均值,并将两者结合起来作图得到4个校准点,最后将这4个校准点连接起来得到预测校准曲线。

二分类资料

1. 单一模型校准曲线

lrm()函数拟合的logistic模型

使用rms包中的lrm()函数拟合logistic模型,然后使用calibrate()函数拟合校准曲线,并使用plot()绘图

案例:肺动脉栓塞模型

#载入数据

library(readxl)
data <- read_excel("data.xlsx")
data<-na.omit(data)
data<-as.data.frame(data)
#建立模型公式
form.bestglm<-as.formula(group~age+BMI+ToS+CA153+CDU+transfusion+stage)
form.all<-as.formula(group~.)
#打包
library(rms)
dd=datadist(data)
options(datadist="dd")
#建立logistic模型
fit.glm<- lrm(formula=form.bestglm,data=data,x=TRUE,y=TRUE)  

进行校准曲线拟合

cal.glm<-calibrate(fit.glm,method = "boot",B=1000)

method设置抽样的方法为bootstrap,B设置bootstrap的次数为1000。

绘制校准曲线

par(mar=c(5,5,2,1))
plot(cal.glm,
     xlim = c(0,1),
     ylim = c(0,1),
     xlab = "Predicted Probability",
     ylab="Observed  Probability",
     xaxs = "i",
     yaxs = "i",
     legend =FALSE,
     subtitles = FALSE,#不显示副标题
     cex=1.5,
     cex.axis=1.5,
     cex.lab=1.5)
abline(0,1,col="blue",lty=2,lwd=2) #绘制参考线
#调用cal.glm中的“calibrated.orig",即未校正的曲线,设置为实线,红色
lines(cal.glm[,c("predy","calibrated.orig")],type="l",lwd=2,col="red")
#调用cal.glm中的"calibrated.corrected",即校准的曲线,实线绿色
lines(cal.glm[,c("predy","calibrated.corrected")],type="l",lwd=2,col="green")
legend(x=0.55,y=0.35,
       legend=c("Ideal","Apparent","Bias-corrected"),
       lty = c(2,1,1),
       lwd = c(2,1,1),
       col = c("blue","red","green"),
       bty="n",
       cex=1.5)

横坐标为预测值,纵坐标为实际值,45°Ideal线为参考线,Apparent线表示预测值与实际值的拟合情况,Bias-corrected实线表示校正之后的预测值与实际值的拟合情况。

若Bias-corrected线或Apparent线越接近Ideal线,说明预测值与实际值的一致性越好。

glm()函数拟合的logistic模型

a.Score()函数

拟合logistic模型

library(riskRegression)

fit.glm = glm(formula=form.bestglm,data=data,family=binomial())

进行校准曲线拟合(跟ROC一样)

xb <-Score(object=list(fit.glm),

           formula=group~1,

           plots=c("calibration","ROC"),

           metrics = c("auc", "brier"),

           B=1000,M=50,

           data=data)

绘制校准曲线:

plotCalibration(x=xb,

                xlab="Predictd Risk",

                ylab = "Observed Frequency",

                col="black",

                brier.in.legend=FALSE,

                auc.in.legend=FALSE)

不显示brier的得分和AUC的值

横坐标为预测值,纵坐标为实际值,灰色斜线为参考线,黑色的曲线为预测值与实际值的拟合情况。若黑色线越靠近参考线,说明预测值与实际值的一致性好。

对X轴进行分段处理,绘制频率图

plotCalibration(x=xb,

                ylab = "Frequency",

                bars=TRUE,

                q=7,

                show.frequencies=TRUE)

bars表示绘制条图,q=7表示x轴的风险大小分成为7段;show=T表示显示频率

纵观七个频段风险,可以发现预测值与实际值之间较为接近,说明预测值和实际值的一致性好。

B.val.prob()函数
fit.glm = glm(formula=form.bestglm,data=data,family=binomial())

pred.logit<-predict(fit.glm)

phat <- 1/(1+exp(-pred.logit))

利用predict()函数预测模型fit.glm的线性预测值,然后将其转化为概率值phat。

绘制校准曲线

低功耗蓝牙项目,需要一块懂省电的板

思澈 SF32LB52 芯片,BLE 协议栈深度优化,上手即开发

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值