转自个人微信公粽号【易学统计】的统计学习笔记:R软件绘制患者中位生存时间列线图
研究背景
前两章分享的是绘制1年、3年和5年生存时间的列线图,本章主要是绘制中位生存期的列线图。生存期和生存率都是临床上评价肿瘤治疗的重要指标。生存期一般分为总生存期(OS)、中位生存期(MST)、无进展生存期(PFS),每个指标都有不同的意义,而生存率也有3年生存率、5年生存率,10年生存率等。
5年生存率是指某种肿瘤经综合治疗后,生存5年以上的比例。5年生存率表达具有一定的科学性。
中位生存期(MST)又称半数生存期,表示有且只有50%的个体活过这个时间。比如1000个人参加临床试验,将每个人的生存时间按照从小到大排名,第501人的生存时间为18个月,即表明该临床试验的中位生存期为18个月。如果是评估某个癌种的中位生存期,一般从发现该肿瘤开始计算;如果是评估某项临床试验的中位生存期,一般从给药或随机开始。
案例研究
本文数据依旧采用R自带的lung数据集,一个晚期肺癌数据集,收集了228例癌症患者的生存资料,包含患者年龄、性别、生存时间、生存状态等10个变量。本文利用年龄、性别和体重减轻三个变量构建模型,绘制中位生存期列线图。
临床研究一般提供多个危险因素,首先做单因素的筛选,具体筛选方法,见公众号之前的文章,本章详细说明中位生存期列线图和自定义存活比例患者列线图的绘制。
R代码及解读
##加载包 明确每个包的作用
library(rms) ##绘制列线图
library(survival) ##生存分析包
##调用数据,数据格式与普通的spss中格式一样,一行代表一条观测,
##一列代表一个变量;
data(lung)
d <- lung
#aggr(d,prop=T,numbers=T) #判断数据缺失情况,红色表示有缺失。
d <- na.omit(d) #按行删除缺失值
第一步,数据整理。
###添加变量标签,在列线图上展示分类标签
d$sex <- factor(d$sex,levels = c(1,2),labels = c('male','female'))
##结局变量转换
d$status <- ifelse(d$status==2,1,0)
str(d)##可以查看数据结构
第二步:构建模型并绘制中位生存时间列线图
#Cox模型多因素分析-进行比例风险假设检验
y<-Surv(d$time,d$status==1,type="right")
mod<-coxph(y~age+sex+wt.loss, data=d)
temp <- cox.zph(mod,transform="rank",global=T) ##等比例检验
temp
#####结果展示
## chisq df p
## age 0.647 1 0.42
## sex 1.064 1 0.30
## wt.loss 0.376 1 0.54
## GLOBAL 1.974 3 0.58
dd<-datadist(d) #设置工作环境变量,将数据整合
options(datadist='dd') #设置工作环境变量,将数据整合
units(d$time) <- "Day" ## 设定时间单位
##
coxm <- cph(Surv(time,status)~age+sex+ph.ecog,x=T,y=T,data=d,surv=T)
med <- Quantile(coxm)
###绘制cox回归生存概率的nomogram图
## 构建Nomo图的对象只能是rms包中cph()函数
nom1 <- nomogram(coxm, fun=function(x) med(lp=x), ## lp 绘制线形图,即图中totalpoints那根线
funlabel="Median Survival Time",
lp=F)
par(mar=c(4,5,3,2),cex=0.8) ## 设置画布
plot(nom1)
自定义存活比例列线图的绘制:比如现在想知道25%的人能存活的时间,此时在原函数中添加q=0.25就行,如果想看75%的人能存活的时间,则q=0.75。
第三步:绘制列线图
nom2<- nomogram(fcox,fun=list(function(x) med(lp=x,q=0.5),
function(x) med(lp=x,q=0.25)),
funlabel=c("Median Survival Time","1Q Survival Time"),
lp=F)
### 以下是将列线图输出保存方法
road<- paste('C:\\文件夹\\','Nomo.jpeg',sep='',collapse = "")
jpeg(file=road,width = 1000, height = 600) ##定义输出图片的长度和宽度
plot(nom2,cex.axis=1.4, ## 坐标轴刻度文字的缩放倍数
xfrac=.25, ## 左侧标签与 刻度的距离
cex.lab=1.6, ##坐标轴标签(名称)的缩放倍数
col.grid=c("red","green")) ## 画网格不同颜色标注
dev.off() ## 这个函数可以将画出的图保存到road这个路径
右下角的图看不清,局部放大看下:
绘制列线图的参数说明:
1.等比例风险检验:能采用cox回归模型有一个前提条件,危险因素对死亡风险的作用的作用强度随着时间的变化时一致的。如果搭建模型,发现有些变量随时间变化而变化,不满足等比例条件,需要处理,这个在之后的文章会介绍,敬请关注。本例中返回的结果可以看到,最后面的GLOBAL是整体看,P值大于0.05,全模型整体都是满足的。对于每一个分类来说P值大于0.05,也是满足的。
- 相比于1年,2年生存期,求中位生存时间,采用的函数是Quantile()函数,通过调整其中参数q自定义需要的存活比例。以上第二个图的最后一行表示的是:25%的人存活的时间在370到380天,倒数第二行则表示50%的人也就是中位生存期是250到550天,这个只是演示下,一般情况下中位生存期区间比较紧凑。
3.在绘制列线图上,本章增加了一点新元素,绘制出彩色网格,可以更方便找到对应的得分值。
以上就是中位生存时间列线图所有内容了。后面还有更多高分统计方法分享,请持续关注哦~
如果您觉得有用,请点赞,转发哦~
更多统计小知识,请关看 公粽号 易学统计
更多阅读
R语言|Cox模型校准度曲线绘制
基于Lasso回归筛选变量构建Cox模型并绘制Nomogram
R语言Logistic回归模型验证及Nomogram绘制
如何进行高维变量筛选和特征选择(一)?Lasso回归