vlambda博客
学习文章列表

基于R语言实现Cox回归生存分析

简介

生存分析(Surivival analysis)指的是依据通过调查或试验所获取的数据对生物或人的生存时间展开分析和推断,研究生存时间、结局与各种影响因素之间的关系的方法。在众多的生存分析方法中,Cox回归模型以生存时间与生存结局为因变量,以待分析的多种影响因素为自变量,是在医学随访研究中得到广泛应用的多因素生存分析方法。本文将基于R语言构建Cox回归模型,并通过森林图与生存分布图对Cox回归模型进行可视化。

构建Cox回归模型

在Cox回归模型的构建和可视化过程中,需要使用到survival和survminer两个包,其中survival用于提供数据和cox回归模型相关内容的构建,survminer则用于cox回归模型的可视化。如果在之前的使用中没有使用过这两个包,需要在RStudio的控制台(console)中分别输入:
install.packages("survival")
install.packages("survminer")

library(survival)
library(survminer)

# 构建cox回归模型
fit_cox <- coxph(Surv(time, status)~age+sex, data = lung)
# 构建生存分布图
fit_sur <- survfit(fit_cox)

survival包中提供了一个有关肺癌患者生存率的数据集,数据集包括以下10个字段:

字段 含义
inst Institution code
time

Survival time in days

status

censoring status 1=censored, 2=dead

age

Age in years

sex

Male=1 Female=2

ph.ecog

ECOG performance score as rated by the physician. 0=asymptomatic, 1= symptomatic but completely ambulatory, 2= in bed <50% of the day, 3= in bed > 50% of the day but not bedbound, 4 = bedbound

ph.karno

Karnofsky performance score (bad=0-good=100) rated by physician

pat.karno

Karnofsky performance score as rated by patient

meal.cal

Calories consumed at meals

wt.loss

Weight loss in last six months

在cox回归模型的构建过程中,本文以time和status作为因变量,age和sex作为自变量构建cox回归模型。

Cox回归模型的可视化

survminer是一个专门用于生存分析方法可视化的R语言包,本文利用其分别绘制了森林图与生存分布图。

森林图

森林图绘制比较容易,只需要将构建的cox回归模型fit_cox传入gggforest函数即可。

# 绘制森林图
ggforest(fit_cox,main="hazard ratio",cpositions=c(0.02,0.22,0.4),fontsize=0.8,refLabel="reference",noDigits=2)

绘制的结果如下:

生存分布图

本文在研究了当前互联网上的众多教程之后发现虽然许多教程上写的是绘制cox回归模型的生存曲线,但实际上绘制的均为KM法的生存曲线。故需要提醒大家的是下面这种形式绘制的是KM法的生存曲线:

# KM
fit<- survfit(Surv(time, status) ~ sex, data = lung)

在绘制生存曲线的过程中,本文首先利用survival包提供的plot函数进行绘制

# survival
plot(fit_sur)

绘制结果如下:

其次利用survminer包提供的ggsurvplot函数进行绘制

# survminer
ggsurvplot(survfit(coxph(Surv(time, status)~age+sex, data = lung)),data = lung)

其实在上述代码中,理应写成

# survminer
ggsurvplot(fit_sur, data = lung)

就可以生成相应的生存曲线,但是本文尝试多次之后均未成功。本文在联系了survminer包的开发者之后发现此问题在2020年1月份因为版本更新的原因造成,目前尚未解决。通过survminer生成的生存曲线如下:

相较于survival绘制的图,survminer绘制的结果要更为美观一些,如果需要进一步丰富与美化,可在CRAN上参照survminer的说明文档进行参数设置。