基于Lasso回归筛选变量构建Cox模型并绘制Nomogram
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相关推荐
- R语言survival包Surv函数创建生存对象、建立Cox回归模型(包含所有协变量)比较不同治疗方法生存率的差异、drop1函数计算cox回归模型自变量似然比检验值、删除冗余变量重新构建cox模型
R语言使用survival包的Surv函数创建生存对象.建立Cox回归模型(包含所有协变量)比较不同治疗方法生存率的差异.使用drop1函数计算cox回归模型自变量似然比检验结果.删除冗余变量重新构建 ...
- sklearn使用投票回归VotingRegressor算法构建多模型融合的投票回归模型、并自定义子回归器的权重(weights)、评估多模型融合的回归模型、评估R2、mse、rmse、mape
sklearn使用投票回归VotingRegressor算法构建多模型融合的投票回归模型.并自定义子回归器的权重(weights).评估多模型融合的回归模型.评估R2.mse.rmse.mape 目录
- 使用R构建Xgboost模型并绘制ROC曲线
使用R构建Xgboost模型并绘制ROC曲线 xgboost算法论文全称为<XGBoost: A Scalable Tree Boosting System>,由陈天奇于2016年发表的, ...
- (六十二)基于logistic回归的信用评级和分类模型评估
案例数据介绍 本案例中的企业从事个人汽车金融服务,向购车的个人提供信用贷款.该公司的风控部门根据贷款申请者的基本属性.信贷历史.历史信用情况.贷款标的物的情况等信息构建贷款违约顶测模型,其中是否违约b ...
- Nature | 基于66种癌症类型训练机器学习模型,绘制癌症基因潜在驱动突变图谱...
随着医疗技术的进步,人类的健康水平获得了极大提升.但面对给人类健康带来巨大威胁的癌症,尚没有十分有效的治疗手段.据世界卫生组织统计报告,2012年全世界估计约1410万人被检测出癌症,并造成820万人 ...
- 语言nomogram校准曲线图_R语言实现Cox模型校准度曲线绘制
01 研究背景 这是关于cox模型的第二篇文章,上一篇文章分享了运用Lasso回归如何筛选变量,将筛选后的变量绘制Nomogram图,本章分享构建模型后,如何绘制校准曲线. cox模型的验证不同于Lo ...
- 基于Python的岭回归与LASSO回归模型介绍及实践
基于Python的岭回归与LASSO回归模型介绍及实践 这是一篇学习的总结笔记 参考自<从零开始学数据分析与挖掘> [中]刘顺祥 著 完整代码及实践所用数据集等资料放置于:Github 岭 ...
- 机器学习第20篇 - 基于Boruta选择的特征变量构建随机森林
前面机器学习第18篇 - Boruta特征变量筛选(2)已经完成了特征变量筛选,下面看下基于筛选的特征变量构建的模型准确性怎样? 定义一个函数生成一些列用来测试的mtry (一系列不大于总变量数的数值 ...
- 如何基于数据快速构建用户模型(Persona)?
用户模型(Persona)是Alan Cooper在<About Face:交互设计精髓>一书中提到的研究用户的系统化方法.它是产品经理.交互设计师了解用户目标和需求.与开发团队及相关人交 ...
- 【机器学习之线性回归】多元线性回归模型的搭建+Lasso回归的特征提取
文章目录 前言 一.多元线性回归 1.原理介绍 2.sklearn代码实现 二.Lasso回归 1.原理介绍 2.sklearn代码实现 三.总结 前言 回归是监督学习的一个重要问题,回归用于预测输入 ...
最新文章
- I2C从驱动到应用(中篇)
- Flink分布式standalone部署方式(第一种方式)
- 苹果iOS 10.3.1修复博通Wi-Fi芯片重大安全漏洞
- SpringBoot集成Editor.md 流程详细
- c语言中 字母对应的数值,C语言编程:求下式中每个字母所代表的数字
- 【算法】—— 相邻两数的最大差值
- Oracle dataGuard专题:Rman通过duplicate创建standby
- DNS服务系列之二:DNS区域传送漏洞的安全案例
- 探索处理数据新方法,8 个重点搞懂云数据库 DBaaS 到底是什么!
- MPEG4 笔记3(TRAK,TKHD, MVHD)
- PLSQL Developer 13安装教程
- 泛微oa系统什么框架_泛微OA系统表结构说明文档
- [渝粤教育] 中国地质大学 国际贸易实务 复习题
- 一个北京妞儿写的经典的话,太现实了!
- JS web localStorage传值 coolie传值
- 我的世界python——方块朋友(方块设置移动路径getline)
- decimals数据格式化
- 小学计算机听课总评,小学听课评课评语大全
- 原创 使用docker 安装CVAT并使用
- Excel 快速合并多行数据为一行