语言nomogram校准曲线图_R语言实现Cox模型校准度曲线绘制

01

研究背景

       这是关于cox模型的第二篇文章,上一篇文章分享了运用Lasso回归如何筛选变量,将筛选后的变量绘制Nomogram图,本章分享构建模型后,如何绘制校准曲线。

      cox模型的验证不同于Logistic回归,cox的结局包括时间和状态,所以对于某个患者来说,他的结果是否准确,就要看模型在他随访的时间点,所预测的结局是否和真实的状态一致,两者一致说明拟合不错,模型准确。虽然大部分患者的患者的随访时间都不一样,但对于生存分析来说,我们更关注一段时间在群体中的效应,比如1年生存率、3年生存率和5年生存率,以及中位生存率。换句话说,在评价手术后或者药物治疗后的效果时,更关注某一段时间后的平均疗效。

02

案例研究

       本文数据采用R自带的lung数据集,一个晚期肺癌数据集,收集了228例癌症患者的生存资料,包含患者年龄、性别、生存时间、生存状态等10个变量。本文利用年龄、性别和ecog评分三个变量构建模型,绘制列线图并绘制指定时间点的校准曲线。

       临床研究一般有提供多个危险因素,首先做单因素的筛选,具体筛选方法,见公众号之前的文章。详细Nomogram图绘制见之前文章,本章详细说明校准曲线的绘制和参数说明,采用验证的方法是基于原始数据集的重抽样验证。

03

R代码及解读

##加载包 明确每个包的作用library(rms)  ##绘制列线图library(survival)  ##生存分析包##调用数据,数据格式与普通的spss中格式一样,一行代表一条观测,     ##一列代表一个变量;data(lung)d str(d)aggr(d,prop=T,numbers=T) #判断数据缺失情况,红色表示有缺失。d 
 str(dt)  ##查看每个变量结构 aggr(dt,prop=T,numbers=T) #判断数据缺失情况,红色表示有缺失。 d 

语言nomogram校准曲线图_R语言实现Cox模型校准度曲线绘制_第1张图片

      由图片可看到所有变量都为蓝色,没有缺失值,红色表示有缺失,并展示出缺失比例。如果用na.omit()函数按照行删除。

        第一步,数据整理。

###添加变量标签,在列线图上展示分类标签,作图用到d$sex ##########################################################################d[,6] ##结局变量转换d$status str(d)##可以查看数据结构

        第二步:构建模型并绘制列线图

ddoptions(datadist='dd') #设置工作环境变量,将数据整合##coxm ###绘制cox回归生存概率的nomogram图## 构建Nomo图的对象只能是rms保重d额cph()函数nom                               function(x)surv(2*365,x)), ##算出不同时间节点生存率值,显示在列线图上                funlabel = c('1-year probability',                             '2-year probability'),                             lp=F,                fun.at=c('0.9','0.85','0.80','0.70','0.6','0.5','0.4','0.3','0.2','0.1'))par(mar=c(2,5,3,2),cex=0.8)##mar 图形空白边界  cex 文本和符号大小plot(nom,xfrac=0.6)

语言nomogram校准曲线图_R语言实现Cox模型校准度曲线绘制_第2张图片

      该图为1年和2年生存率的列线图,性别的标签在图上展示出来了。接下来分别对1年生存率和2年生存率做验证曲线。

       第三步:绘制校准曲线

###这里演示,采用age sex 和ph.ecog 构建coxph模型##构建校准曲线##time.in 和 u 要是一样的,都是要评价的时间节点coxm_1 cal_1##绘制1年生存期校准曲线par(mar=c(7,4,4,3),cex=1.0)plot(cal_1,lwd=2,lty=1, ##设置线条形状和尺寸     errbar.col=c(rgb(0,118,192,maxColorValue = 255)), ##设置一个颜色     xlab='Nomogram-Predicted Probability of 1-year DFS',#便签     ylab='Actual 1-year DFS(proportion)',#标签     col=c(rgb(192,98,83,maxColorValue = 255)),#设置一个颜色     xlim = c(0,1),ylim = c(0,1)) ##x轴和y轴范围##绘制2年生存期校曲线##time.in 和 u 要是一样的,都是要评价的时间节点coxm_2 cal_2plot(cal_2,lwd=2,lty=1,  ##设置线条宽度和线条类型     errbar.col=c(rgb(0,118,192,maxColorValue = 255)), ##设置一个颜色     xlab='Nomogram-Predicted Probability of 1-year DFS',#便签     ylab='Actual 2-year DFS(proportion)',#标签     col=c(rgb(192,98,83,maxColorValue = 255)),#设置一个颜色     xlim = c(0,1),ylim = c(0,1)) ##x轴和y轴范围

语言nomogram校准曲线图_R语言实现Cox模型校准度曲线绘制_第3张图片

语言nomogram校准曲线图_R语言实现Cox模型校准度曲线绘制_第4张图片

       绘制校准曲线的参数说明:

    1.绘制校准曲线前需要在模型函数中添加参数x=T,y=T和time.inc 参数

    2.u需要和之前模型中定义好的time.inc一致,根据原数据,要以天为单位

即365或者365*2,u和time.inc其实是一个意思,表示要评价的时间节点。如果它俩不一样,表示你想要评价的时间点不一样,矫正的结果当然不同了。time.inc全称是       time increase 即时间增量。当surv=T时候,表示要计算surv .summary数组,此时time.inc用于计算数组内部不同时间点的数据(seq(0,maxtime,by=time.inc))。评价时间点不能小于最大时间的1/25,也不能超过最大随访时间,会超出评价评价限度,不能评价。如果time.inc省略,则会根据时间单位自动选择,这往往不是我们要的,所以还需要指定值。

    3.m要根据样本量来确定,由于校准曲线一般将所有的样本均分为5组(对应图中的5分节点),而m代表每组样本量数,因此m*5等于或者近似等于样本量

    4.b代表最大再抽样的样本量,一般b=1000,足够使用。

    5.由两个校准图可看,横坐标为预测的生存率,纵坐标为实际的生存率,对角线是预测概率等于实际概率,偏离对角线越远说明预测的误差越大。以上两个图中预测曲线基本和对角线重合,结果还行,这一点也可以通过计算C-index指数看出端倪。

##模型验证,采用surival包#Concordance indexf sum.survc_indexc_index##         C      se(C) ##0.64123438 0.03103835 

      该模型的区分度C-index为0.64,其本质同ROC曲线面积。结果显示,该模型的具有一定区分度。

04

参考文献

  1. 方积乾等. 卫生统计学. 人民卫生出版社。

  2. http://www.360doc.com/userhome.aspx?userid=46405145

  3. https://www.bilibili.com/read/cv5975714/

  4. http://www.360doc.com/content/19/0124/20/52645714_811083591.shtml

  5. http://blog.sina.com.cn/s/blog_13ea9a2450102wzf6.html

  6. https://blog.csdn.net/fjsd155/article/details/84669331

作者介绍:医疗大数据统计分析师,擅长R语言。

更多阅读:

如何进行高维变量筛选和特征选择(一)?Lasso回归

基于Lasso回归筛选变量构建Cox模型并绘制Nomogram

132fc26128a9754b7fa5ba1674256770.png

语言nomogram校准曲线图_R语言实现Cox模型校准度曲线绘制_第5张图片

你可能感兴趣的:(语言nomogram校准曲线图)