R语言系列5:基于Cox回归的临床预测模型校准曲线绘制
上一篇文章,我们讲到。今天主要围绕模型验证部分进行讲解及示范操作,Calibration curve绘制
Calibration curve
横坐标:预测概率 predictive probability
纵坐标:实际发生概率 actual probability
即用于比较预测情况与实际情况拟合情况,评估模型校准、预测能力
如果预测值=实际值,则曲线与对角线完全重合
如果预测值>实际值,则曲线在对角线之上,代表高估风险
如果预测值<实际值,则曲线在对角线之下,代表低估风险
直接上数据,上代码
有关模型构建,前面已述,代码与之前重复
输入文件:dev.csv
模型构建:
dev<-read.csv("dev.csv")
head(dev)
library(rms)
library(foreign)
library(survival)
#将time变为num数字形式
dev$time<-as.numeric(dev$time)
#将其余变量转为factor并进行标注
dev$age<-factor(dev$age,labels=c('<50','50-59','60-69','70-79', '>=80'))
dev$sex<-factor(dev$sex,labels=c('Male','Female'))
dev$race<-factor(dev$race,labels=c('White','Black','Other'))
dev$marry<-factor(dev$marry,labels=c('Married','Unmarried','Divorced or Seperated','Widowed'))
dev$site<-factor(dev$site,labels=c('cecum','ascending colon','hepatic','transverse', 'splenic', 'descending', 'sigmoid'))
dev$size<-factor(dev$size,labels=c('<3','<4','<5', '<6', '<7', '<8', '>=8'))
dev$grade<-factor(dev$grade,labels=c('I','II','III', 'IV'))
#打包数据
ddist <- datadist(dev)
options(datadist='ddist')
#time单位是:月
units(dev$time) <- "Month"
fcox <- cph(Surv(dev$time,dev$os==1) ~ age + race+ size+marry+grade,surv=T,x=T, y=T,data=dev)
#画图
surv <- Survival(fcox)
nom <- nomogram(fcox, fun=list(function(x) surv(36, x),
function(x) surv(60, x)),
funlabel=c("3-years Survival Probability",
"5-years Survival Probability"),lp=F)
plot(nom)
Calibration curve绘制:
#计算三年生存率的标准曲线
fcox3 <- cph(Surv(dev$time,dev$os==1) ~ age + race+ size+marry+grade,surv=T,x=T, y=T,time.inc = 36,data=dev)
cal3 <- calibrate(fcox3, cmethod="KM", method="boot", u=36, m=1200, B=500)
plot(cal3)
#计算五年生存率的标准曲线
fcox5 <- cph(Surv(dev$time,dev$os==1) ~ age + race+ size+marry+grade,surv=T,x=T, y=T,time.inc = 60,data=dev)
cal5 <- calibrate(fcox5, cmethod="KM", method="boot", u=60, m=1200, B=500)
plot(cal5)
注:代码内 m=1200,是根据样本量n而定,一般m=n/4或n/5即可。
可以尝试更改,观察曲线改变
有关模型验证,在后续课程会陆续讲解C指数,NRI, IDI计算
后台回复 R05,获取演示数据及配套代码,交流为主~