01 研究背景

本章是基于Lasso回归筛选变量后,构建Cox回归临床预测模型,并绘制Nomogram图。Cox模型是一种半参数模型,该模型以生存结局和生存时间为因变量,分析多个因素对生存期的影响,常用RR来量化这种结果,绘制Nomogram列线图实现个体预测。有关Lasso回归可见公众号前文章介绍。

02 案例研究

本文数据收集了83例癌症患者的生存资料,包含患者年龄、性别、癌症分期等。研究目的探讨癌症患者生存情况的影响因素并构建预测模型。临床研究一般有提供多个危险因素,首先做单因素的筛选,具体筛选方法,见公众号之前的文章。本文采用Lasso回归筛选因素。

具体分析步骤是①筛选变量②基于这些变量构建模型③绘制Nomogram图,预测不同时间生存概率。③计算模型c_index(区分度)该步骤用神包rms一步实现。接下来直接上代码。

03 R代码及解读

##加载包 明确每个包的作用
library(glmnet) ##Lasso回归
library(rms)  ## 画列线图;
library(VIM) ## 包中aggr()函数,判断数据缺失情况
library(survival) ##  生存分析包
#读取数据集
dt <-read.csv("cancer.csv")
str(dt)  ##查看每个变量结构aggr(dt,prop=T,numbers=T) #判断数据缺失情况,红色表示有缺失。dt <- na.omit(dt) 按行删除缺失值

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

第一步,也是很重要的一步,数据整理。

#用for循环语句将数值型变量转为因子变量
for(i in names(dt)[c(4:9)]) {dt[,i] <- as.factor(dt[,i])}
##筛选变量前,首先将自变量数据(因子变量)转变成矩阵(matrix)
## Lasso要求的数据类型
x.factors <- modtel.matrix(~ dt$sex+dt$trt+dt$bui+dt$ch+dt$p+dt$stage,dt)[,-1]
#将矩阵的因子变量与其它定量边量合并成数据框,定义了自变量。
x <- as.matrix(dtata.frame(x.factors,dt[,3]))
#设置应变量,打包生存时间和生存状态(生存数据)
y <- data.matrix(Surv(dt$time,dt$censor))

第二步:Lasso回归筛选变量

#调用glmnet包中的glmnet函数,注意family那里一定要制定是“cox”,如果是做logistic需要换成"binomial"。
fit <-glmnet(x,y,family = "cox",alpha = 1)
plot(fit,label=T)
plot(fit,xvar="lambda",label=T)
#主要在做交叉验证,lasso
fitcv <- cv.glmnet(x,y,family="cox", alpha=1,nfolds=10)
plot(fitcv)
coef(fitcv, s="lambda.min")
##
#9 x 1 sparse Matrix of class "dgCMatrix"                1
##d.sex1    .
##d.trt1    .
##d.bui1    .
##d.ch2     .
##d.ch3     .
##d.ch4    -0.330676
##d.p1      .
##d.stage4  .
##d...3.    .

该图在之前文章提到,见如何进行高维变量筛选和特征选择(一)?Lasso回归,由上述代码以及图片完成变量筛选,这里只做演示,假设所有的变量都入选了,我们用这些入选的变量构建Cox回归模型。

第三步:构建Cox模型,并检验等比例风险

#拟合cox回归
coxm <- cph(Surv(time,censor==1)~age+sex+trt+bui+ch+p+stage,x=T,y=T,data=dt,surv=T)
cox.zph(coxm)#等比例风险假定
##       chisq df     p
##age    1.993  1 0.158
##sex    0.363  1 0.547
##trt    3.735  1 0.053
##bui    2.587  1 0.108
##ch     0.296  1 0.587
##p      0.307  1 0.579
##stage  0.395  1 0.530
##GLOBAL 9.802  7 0.200

注意chp()函数的写法,其中因变量需要用Surv()先打包。后面写法同LR。
等比例风险检验:最后面的GLOBAL是整体看,P值大于0.05,全模型整体都是满足的。对于每一个分类来说P值大于0.05,也是满足的。

第四步:绘制nomogram图,注意该函数里面的参数设置。

###开始cox nomo graph
surv <- Survival(coxm) # 建立生存函数surv1 <- function(x)surv(1*3,lp=x) # 定义time.inc,3月OS
surv2 <- function(x)surv(1*6,lp=x) # 定义time.inc,6月OS
surv3 <- function(x)surv(1*12,lp=x) # 定义time.inc,1年OSdd<-datadist(dt) #设置工作环境变量,将数据整合
options(datadist='dd') #设置工作环境变量,将数据整合plot(nomogram(coxm,fun=list(surv1,surv2,surv3),lp= F,funlabel=c('3-Month Survival','6-Month survival','12-Month survival'),maxscale=100,fun.at=c('0.9','0.85','0.80','0.70','0.6','0.5','0.4','0.3','0.2','0.1')),xfrac=.45)
#maxscale 参数指定最高分数,一般设置为100或者10分
#fun.at 设置生存率的刻度
#xfrac 设置数值轴与最左边标签的距离,可以调节下数值观察下图片变化情况
plot(nomogram)

该图的使用,本质上是将Cox回归模型可视化展示,方便临床快速判断。假设有个病人性别为女,trt为0,P期为1,Nomogram用法是在sex变量上找到其值为1的刻度,然后画垂线投影到最上方的points刻度尺上,找到对应的分值为75分,同理找到trt为0的分值约为50分,P为1的对应分值为100,将这三个因素的points值加起来总分225。下一步在下面的Total Points刻度尺上找到225分,向下方的3个轴做垂线,6-Month-survival对应的值在0.6和0.7之间,约为0.65,说明该患者6个月的生存概率值为65%,其他以此类推。

第三步:利用rms包计算模型区分度。

##模型验证
#Concordance index
f<-coxph(Surv(time,censor==1)~age+sex+trt+bui+ch+p+stage,data=d)
sum.surv<-summary(f)
c_index<-sum.surv$concordance
c_index  ##
##C      se(C)
##0.55396619 0.07664425

该模型的区分度C-index为0.554,其本质同ROC曲线面积。结果显示,该模型的区分度一般。根据前面变量筛选,考虑纳入更多的影响因素和样本。

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

  1. R语言survival包Surv函数创建生存对象、建立Cox回归模型(包含所有协变量)比较不同治疗方法生存率的差异、drop1函数计算cox回归模型自变量似然比检验值、删除冗余变量重新构建cox模型

    R语言使用survival包的Surv函数创建生存对象.建立Cox回归模型(包含所有协变量)比较不同治疗方法生存率的差异.使用drop1函数计算cox回归模型自变量似然比检验结果.删除冗余变量重新构建 ...

  2. sklearn使用投票回归VotingRegressor算法构建多模型融合的投票回归模型、并自定义子回归器的权重(weights)、评估多模型融合的回归模型、评估R2、mse、rmse、mape

    sklearn使用投票回归VotingRegressor算法构建多模型融合的投票回归模型.并自定义子回归器的权重(weights).评估多模型融合的回归模型.评估R2.mse.rmse.mape 目录

  3. 使用R构建Xgboost模型并绘制ROC曲线

    使用R构建Xgboost模型并绘制ROC曲线 xgboost算法论文全称为<XGBoost: A Scalable Tree Boosting System>,由陈天奇于2016年发表的, ...

  4. (六十二)基于logistic回归的信用评级和分类模型评估

    案例数据介绍 本案例中的企业从事个人汽车金融服务,向购车的个人提供信用贷款.该公司的风控部门根据贷款申请者的基本属性.信贷历史.历史信用情况.贷款标的物的情况等信息构建贷款违约顶测模型,其中是否违约b ...

  5. Nature | 基于66种癌症类型训练机器学习模型,绘制癌症基因潜在驱动突变图谱...

    随着医疗技术的进步,人类的健康水平获得了极大提升.但面对给人类健康带来巨大威胁的癌症,尚没有十分有效的治疗手段.据世界卫生组织统计报告,2012年全世界估计约1410万人被检测出癌症,并造成820万人 ...

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

    01 研究背景 这是关于cox模型的第二篇文章,上一篇文章分享了运用Lasso回归如何筛选变量,将筛选后的变量绘制Nomogram图,本章分享构建模型后,如何绘制校准曲线. cox模型的验证不同于Lo ...

  7. 基于Python的岭回归与LASSO回归模型介绍及实践

    基于Python的岭回归与LASSO回归模型介绍及实践 这是一篇学习的总结笔记 参考自<从零开始学数据分析与挖掘> [中]刘顺祥 著 完整代码及实践所用数据集等资料放置于:Github 岭 ...

  8. 机器学习第20篇 - 基于Boruta选择的特征变量构建随机森林

    前面机器学习第18篇 - Boruta特征变量筛选(2)已经完成了特征变量筛选,下面看下基于筛选的特征变量构建的模型准确性怎样? 定义一个函数生成一些列用来测试的mtry (一系列不大于总变量数的数值 ...

  9. 如何基于数据快速构建用户模型(Persona)?

    用户模型(Persona)是Alan Cooper在<About Face:交互设计精髓>一书中提到的研究用户的系统化方法.它是产品经理.交互设计师了解用户目标和需求.与开发团队及相关人交 ...

  10. 【机器学习之线性回归】多元线性回归模型的搭建+Lasso回归的特征提取

    文章目录 前言 一.多元线性回归 1.原理介绍 2.sklearn代码实现 二.Lasso回归 1.原理介绍 2.sklearn代码实现 三.总结 前言 回归是监督学习的一个重要问题,回归用于预测输入 ...

最新文章

  1. I2C从驱动到应用(中篇)
  2. Flink分布式standalone部署方式(第一种方式)
  3. 苹果iOS 10.3.1修复博通Wi-Fi芯片重大安全漏洞
  4. SpringBoot集成Editor.md 流程详细
  5. c语言中 字母对应的数值,C语言编程:求下式中每个字母所代表的数字
  6. 【算法】—— 相邻两数的最大差值
  7. Oracle dataGuard专题:Rman通过duplicate创建standby
  8. DNS服务系列之二:DNS区域传送漏洞的安全案例
  9. 探索处理数据新方法,8 个重点搞懂云数据库 DBaaS 到底是什么!
  10. MPEG4 笔记3(TRAK,TKHD, MVHD)
  11. PLSQL Developer 13安装教程
  12. 泛微oa系统什么框架_泛微OA系统表结构说明文档
  13. [渝粤教育] 中国地质大学 国际贸易实务 复习题
  14. 一个北京妞儿写的经典的话,太现实了!
  15. JS web localStorage传值 coolie传值
  16. 我的世界python——方块朋友(方块设置移动路径getline)
  17. decimals数据格式化
  18. 小学计算机听课总评,小学听课评课评语大全
  19. 原创 使用docker 安装CVAT并使用
  20. Excel 快速合并多行数据为一行

热门文章

  1. 一个简单的出货补货网页php
  2. Pytorch实现STN
  3. centos 网络流量监控方法总结
  4. MSOCache是什么?
  5. 音乐相册android studio,手机音乐相册制作软件哪个好用?2018音乐相册制作软件推荐...
  6. 用php搭建微信公众号淘客三合一系统
  7. 用matlab求带参数d积分,用MATLAB求定积分
  8. 奋斗路上若有你,弱水三千取一瓢——计算机操作系统以及python基本语法,第三天
  9. Spring blunder
  10. Nginx服务器上安装SSL证书