语言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 

5bbcde9bb3a7600643a8d0effd574dab.png

      由图片可看到所有变量都为蓝色,没有缺失值,红色表示有缺失,并展示出缺失比例。如果用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)

5b2d89b7e689dcf74acd38912aed6973.png

      该图为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轴范围

3d51d5962860e65356f25e0f4b64064e.png

a50aac65a6b6ba0f8011e563923d0b76.png

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

    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

a1fb2bbf5665b815d76d556b1ee57770.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/441814.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

转成数组_JavaScript之数组扁平化

今天给大家分享一下JavaScript的数组扁平化。1. 扁平化数组的扁平化,就是将一个嵌套多层的数组 array (嵌套可以是任何层数)转换为只有一层的数组。举个例子,假设有个名为 flatten 的函数可以做到数组扁平化,效果就会如下:知道了效…

【POJ - 2676】Sudoku (经典深搜,dfs数独)

题干: Sudoku is a very simple task. A square table with 9 rows and 9 columns is divided to 9 smaller squares 3x3 as shown on the Figure. In some of the cells are written decimal digits from 1 to 9. The other cells are empty. The goal is to fill…

overleaf表格_latex 表格制作

在制作latex表格时遇到了以下问题:一、合并单元格包括多行合并、多列合并、多行多列同时合并。多行合并: \multirow{2}{*}{Multi-Row}多列合并: \multicolumn{2}{|c|}{Multi-Column}多行多列同时合并:\multicolumn{2}{|c|}{\multi…

【HihoCoder - 1268】九宫 (dfs,深搜)

题干: 小Hi最近在教邻居家的小朋友小学奥数,而最近正好讲述到了三阶幻方这个部分,三阶幻方指的是将1~9不重复的填入一个3*3的矩阵当中,使得每一行、每一列和每一条对角线的和都是相同的。 三阶幻方又被称作九宫格,在…

河北师范大学计算机应用技术分数线,2019年河北师范大学各专业录取分数线

高考总分达到或超过某一分数线的考生档案,才有资格被招生高校调阅并选择录取。各高校不同专业每一年的录取分数线有所区别,下文是小编给大家整理的2019年河北师范大学各省各专业高考录取分数线详情,供参考!2019河北师范大学各省各…

计算机英语反思总结,计算机在英语教学中辅助作用的反思

计算机在英语教学中辅助作用的反思 (3页)本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦!9.9 积分题目:计算机在英语教学中辅助作用的反思科目: SS 学校: 灵石第一职…

极限脱出 量子计算机,《极限脱出3:零时困境》难点解密攻略 剧情通关密码一览...

《极限脱出3:零时困境》这款解密游戏很多时候会卡住,如何通关呢?下面小编就给大家分享一下《极限脱出3:零时困境》中几个难点解密,需要过关密码的朋友可以收藏一下哦。游戏过程中经常会卡在三处:1.玩家发现…

mysql缓存淘汰机制_聊聊缓存淘汰算法-LRU 实现原理

前言我们常用缓存提升数据查询速度,由于缓存容量有限,当缓存容量到达上限,就需要删除部分数据挪出空间,这样新数据才可以添加进来。缓存数据不能随机删除,一般情况下我们需要根据某种算法删除缓存数据。常用淘汰算法有…

三个月计算机培训班,三个月复盘:学完两个设计软件,并开始学画画

从4月1日开始明确目标,到6月30日,整整三个月的时间,我一直在努力前行。其中有多次的调整,但整体方向不变。来梳理一下这三个月所做的事:4.1-5.26 完成PS学习(75课)5.27-6.26 完成CDR学习(65课)5.27 从零基础开始学习画…

pythonjson实例_python:JSON的两种常用编解码方式实例解析

概念JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,易于人阅读和编写。在日常的工作中,应用范围极其广泛。这里就介绍python下它的两种编解码方法:使用json函数使用 JSON 函数需要导入 json 库:import json。函数…

caxa计算机编程,CAXA软件编程实例1

课时:75节课时长:24.1小时课级:中级提高课程从基础讲起,仅贴实际生产实践,适合职业院校教师、企业技术员、学生学习,讲解细致、全面,带你学习带你飞、软件使用常见问题及解决方法和使用技巧详细…

python中常用的函数有哪些_Python 最常用的语句、函数有哪些?

一、常用语句1、条件语句:if else一句话概括该语句作用:非此即彼。python中的 if else 的语句功能更加强大、更加灵活。2、循环语句:for & while循环语句中,还有两个关键字至为重要:continue 与 break。这两个关键…

计算机函数select,select函数

学习目标了解select函数的各参数的作用,能够在程序设计中正确使用select函数使用select函数,编写一个简单socket服务器程序,可支持多客户端连接1、select函数机制select函数允许程序同时在等待多个底层文件描述符输入的到达,并且只…

【CodeForces - 833A】The Meaningless Game(思维题,数学,可用牛顿迭代法,知识点总结)

题干: Slastyona and her loyal dog Pushok are playing a meaningless game that is indeed very interesting. The game consists of multiple rounds. Its rules are very simple: in each round, a natural number k is chosen. Then, the one who says (or ba…

python创建变量并赋值_python怎么给变量赋值

在学习变量及赋值之前,我们要知道什么是变量! Python语言中,用等号【=】来表示赋值,Python赋值并不是直接将一个值赋值给一个变量,在Python中,对象是通过引用传递的;在传递时,不管这个对象是新创建的还是已经存在的,都是将该对象的引用赋值给变量。 举个例子,3 * 4 =…

正则表达式 python_Python正则表达式总结

之前我们讲解了 正则表达式 的起源、发展、流派、语法、引擎、优化等相关知识,今天我们主要来学习一下 正则表达式在 Python语言 中的应用!大多数编程语言的正则表达式设计都师从Perl,所以语法基本相似,不同的是每种语言都有自己的…

【HDU - 5912】Fraction (模拟)

题干: Mr. Frog recently studied how to add two fractions up, and he came up with an evil idea to trouble you by asking you to calculate the result of the formula below: As a talent, can you figure out the answer correctly? Input The first …

vue mysql webapp_基于Laravel+VueJS实战开发WebAPP

资源介绍【课程内容】1-git库与开发环境及工具软件介绍2-安装laravel框架3-安装laravel-ide-helper增强代码提示4-配置数据库与使用migrations创建表5-解决mysql5.7以下laravel不能执行数据迁移的问题6-合理的路由布局与分组路由7-远程开发环境服务器搭建与虚拟面板的使用8-使用…

计算机测试怎么提交,Win7电脑怎么测试上传速度?

做网站的人都知道上传速度是很重要的,因为太差的上传速度会影响工作的进度,所以他们经常要对上传速度进行测试,但是有一些新手不知道Win7电脑怎么测试上传速度?为此小编赶紧整理了以下教程,不知道的朋友赶紧来看看吧&a…

harmonyos消息服务器,第三方纯HarmonyOS应用太少,你还愿意升级吗?

部分纯鸿蒙 HarmonyOS 应用已上线:图标多了“HMOS”角标标识,而只有真正的鸿蒙系统应用才能真正体验到万能卡片等系列的功能,但是很明显目前真正属于鸿蒙系统的第三方应用太少……基本上都是华为自身的应用,那么如果应用太少你还愿…