生存分析(Survival analysis)实战演练! 内附全部R代码!
生存分析(Survival analysis)是研究生存时间和危险因素之间关系的一种统计方法,被广泛应用于多种研究类型中,如临床试验,前瞻性与回顾性的观察性研究,以及动物研究等。
马上进入实战部分!

1. 如何准备符合生存分析要求的数据形式
想要做生存分析,第一个让人头疼问题很可能就是:数据乱糟糟,不知道如何清理数据以符合生存分析的要求。小编可以拍着胸脯保证,只要数据清理的好,分析和作图都是分分钟的事!
生存分析中的模范数据应该长这样(小编亲手制作):
上述表格应该说是简易版本,但也足够用来说明一些重要的概念。表格中的每行代表一个病例,每列代表一个变量,表格中共有五个变量(本表数值为虚构)。其中:
ID:指病人的编号。
survtime: 生存时间,指从进入研究到事件发生(如死亡)或者失访或者一直存活到研究结束的这一段时间。
status: “1”指的是发生了某个事件(如死亡);“0”指的是删失(censored)。这里插一句,censored是生存分析中非常重要的一个概念。比如说,一个病人在整个研究期间没有死亡,或者在研究的过程中失访了,这样的情况就称作为“censored”,研究者这时候会在数据库中记录此病人的状态为“0”。
age: 年龄。
gender: 性别,比如“1”代表男,“2”代表女。你也可以反过来,但我们的“潜规则”是1男2女。
2. R包的安装
安装和载入两个在生存分析领域中非常热门的R包:
# 安装R包
install.packages("survminer")
# 载入
library(survival) # R自带,无需安装
library(survminer)
其中,{survival}主要用于分析,{survminer}主要用于作图。
3. lung数据集简介
str(lung)
?lung
4. 制作生存曲线
# 拟合模型
surv_model <- survfit(Surv(time, status) ~ sex, data = lung)
# 制作生存曲线
ggsurvplot(surv_model, data = lung)
ggsurvplot(surv_model, fun = "pct" ,data = lung) # “pct” 即百分比
ggsurvplot(surv_model, data = lung,
conf.int = TRUE, # 添加置信区间
pval = TRUE, # 添加p值
fun = "pct", # 将y轴转变为百分比的格式
size = 1, # 修饰线条的粗细
linetype = "strata", # 改变两条线条的类型
palette = c("lightseagreen", "goldenrod1"), # 改变两条曲线的颜色
legend = c(0.8, 0.85), # 改变legend的位置
legend.title = "Gender", # 改变legend的题目
legend.labs = c("Male", "Female"), # 改变legend的标签
surv.median.line = "hv") # 添加中位生存时间
p1 <- ggsurvplot(surv_model, data = lung,
conf.int = TRUE, # 添加置信区间
pval = TRUE, # 添加p值
fun = "pct", # 将y轴转变为百分比的格式
size = 1, # 修饰线条的粗细
linetype = "strata", # 改变两条线条的类型
palette = c("lightseagreen", "goldenrod1"), # 改变两条曲线的颜色
legend = c(0.8, 0.85), # 改变legend的位置
legend.title = "Gender", # 改变legend的题目
legend.labs = c("Male", "Female"), # 改变legend的标签
surv.median.line = "hv")
p1$plot +
annotate("text", x = 750, y = 70, # 注明x和y轴的位置
label = "Chisq = 10.3 on 1 degrees of freedom") # 添加文本信息
5. Cox回归以及森林图
现在建立一个Cox回归,以研究sex对生存时间的影响,并且校正ph.ecog,那么可以这么做:
cox_model <- coxph(Surv(time, status) ~ sex + ph.ecog, data = lung)
cox_model
为了更加美观地展示上述结果,森林图是一个不错的选择:
ggforest(cox_model)
从上图可知,sex(女性相比较于男性)的风险比(hazard ratio)为0.58,95%置信区间为0.41-0.8,区间的两头都在1(虚线)的左侧,提示女性的风险更低(可能是保护因素),并且具有统计学意义(p < 0.001)。同理,ph.ecog的风险比为1.63, 提示是一个危险因素。
好啦,今天的内容就到这里。如果有帮助,记得分享给需要的人!
[1] https://github.com/kassambara/survminer
[2] https://cran.r-project.org/web/packages/survival/index.html
[3]《Applied Survival Analysis Using R》by Dirk F. Moore