Topic 2. 生存分析之 Kaplan-Meier

**关于生存分析,这个大家都非常熟悉,也是临床研究的最最常用的方法,但是在使用过程中,无论是医生还是分析人员对它都有点迷糊,下面我整理的最全的关于生存分析方法的方方面面的知识点,并结合实际的TCGA数据库结果来展示用法,希望能够帮助大家理解其使用的方法和技巧。**  

图片

  • 生存分析基本概念

在医学或者公共卫生研究中,慢性疾病的发生、发展、预后一般不适用于治愈率、病死率等指标来考核,因为其无法在短时间内明确判断预后情况,为此,只能对患者进行长期随访,统计一定时期后的生存或死亡情况以判断诊疗效果;这样的研究往往会产生带有结局的生存时间资料,英文是 time-to-event 资料。在分析方法上,需要采用生存分析方法。生存数据不仅仅指的是生命是生、是死的数据;广义而言,生存结局指的是研究对象是否出现我们研究者感兴趣的阳性终点事件;更广泛来说,生存结局是某一现象是否出现失效(failure)事件。

**起始事件(initial event):**反应生存时间起始特征的事件,如疾病确诊、某种疾病治疗开始等。
失效事件(failure event):在生存分析随访研究过程中,一部分研究对象可观察到死亡,可以得到准确的生存时间,它提供的信息是完全的,这种事件称为失效事件,也称之为死亡事件、终点事件。

终点事件和起始事件是相对而言的,它们都由研究目的决定,须在设计时明确规定,并在研究期间严格遵守,不能随意改变。

下图说明了临床试验的组成部分。每次试验可能不同;然而,所有这些都需要一个开始期,一个累积期和一个试验结束期。

图片

下图显示了受试者在不同的时间进入和结束试验。“S”、“M” 和“L” 表示短时间、中时间和长时间序列。实圆代表事件发生,开圆代表审查。

图片

  • 生存分析时间的分类

根据上述的起始事件和终止事件的分类,可将生存期分三类,如下:

  1. 总生存期 (OS)

    总生存期指的是临床试验中患者从随机化分组至因任何原因引起的死亡时间。OS被认为是肿瘤临床试验中最佳的疗效终点,当患者的生存期能充分评估时,它是首选终点。最大的优点是记录方便,最大的缺点是在大型临床试验中随访时间较长。所以临床上常使用5年生存率,即某一种肿瘤经过综合治疗后,生存期超过5年的患者比例。

  2. 无进展生存期 (PFS)

    无进展生存期指从随机化临床试验开始到肿瘤发生(任何方面)进展或因任何原因导致死亡的时间。简单说,就是在药物控制下肿瘤重新生长所需要的时间。只要“疾病未进展”或“未死亡”,那么此抗癌药就是一直有效的。

  3. 无病生存期 (DFS)

    无病生存期指从随机化开始至第一次肿瘤复发/转移或由于任何原因导致受试者死亡的时间(失访患者为最后一次随访时间;研究结束时仍然存活患者,为随访结束日)。通常作为根治术后的主要疗效指标。目前对 DFS 存在不同定义和解释,不同研究者之间在判断疾病复发或进展时容易产生偏倚。

  • 生存分析目的

针对生存数据,核心目标便是评价一个群体的“死亡速度”,具体比较的是生存时间长短;此外,我们还可以分析由“死亡速度”产生的另外一个里程概念,“死亡”率或者“生存”率。(再次提醒,这里的生存与死亡不是狭义上的概念,而是是否出现阳性事件)。死亡”率或者“生存”率很容易理解,一个群体在规定时间内,“死亡速度”越快,则“死亡”率越高或者“生存”率越低,同时,该生存时间越短。因此,死亡速度、死亡率、生存时间是一事三表,以不同方式展现了研究对象生存状况。生存分析的主要目的就是研究与分析死亡速度、生存率(死亡率)、生存时间。通过可视化展示生存的状况,如下:

  • Kaplan-Meier 生存评估

1958年,爱德华·l·卡普兰 (Edward L. Kaplan) 和保罗·迈耶 (Paul Meier) 合作发表了一篇关于如何处理不完全观测的开创性论文。随后,Kaplan-Meier 曲线和生存数据估计已成为处理不同生存时间(时间到事件)的常见方法,特别是当并非所有受试者都继续研究时。生存时间不一定与实际生存有关,因为死亡是事件;事件可以是任何感兴趣的事件。Kaplan-Meier 分析也用于非医学学科。本文的目的是解释如何生成和分析 Kaplan-Meier 曲线。在这篇文章中,我们将讨论在相关事件发生前的生存情况下的 Kaplan-Meier (K-M) 估计。为了让读者清楚地了解这个过程是如何工作的,本文使用了两组假设数据作为示例。这些例子也说明了至关重要的一点,即比较分析依赖于整个曲线,而不是孤立的点。

  • Kaplan-Meier 估计的比较

研究一系列的时间点是很诱人的,但正确地比较这两条曲线需要考虑整个死亡率曲线的分析技术。在临床试验中,比较生存曲线尤为重要。虽然很容易将两个生存曲线之间的差异可视化,但为了评估统计意义,差异必须量化,绘制置信区间可以使差异可视化。

  1. log-rank test 是最常用的方法:log-rank 测试为每组的每个事件时间计算卡方,并将结果相加。将每组的求和结果相加,得出最终卡方,以比较每组的完整曲线;

  2. hazard ratio 危险比:它给出了组内的相对事件率。再次采用相同的累积过程,计算每个事件时间的卡方,并对结果求和,给出完整 K-M 曲线的最终观测值和预期值,就像在_log-rank_ 检验中执行的那样;因此,危险比指的是全曲线的结果。

  • 关于数据需求及格式

这里使用肺癌的生存数据做一个例子,讲解利用各种 R 包实现生存分析,准备生存数据time-to-event 三列数据框,必须含有 time, status 和一个二项分类的条件,如下:

  inst time status age sex ph.ecog ph.karno pat.karno meal.cal wt.loss
1    3  306      2  74   1       1       90       100     1175      NA
2    3  455      2  68   1       0       90        90     1225      15
3    3 1010      1  56   1       0       90        90       NA      15
4    5  210      2  57   1       1       90        60     1150      11
5    1  883      2  60   1       0      100        90       NA       0
6   12 1022      1  74   1       1       50        80      513       0
  • 实例 1. 肺癌生存分析曲线

R 软件包安装,如下:

install.packages(c("survival","survminer"))

R 软件包 survival 里面给出来的例子,比较不同性别的患癌肺癌的生存分析,1表示男性,2表示女性,P=0.0013 表示男女患肺癌的生存周期有很大差异,代码如下:

library("survminer") 
library("survival") 
#1. 导入内置数据集
data(lung) # 加载lung数据集
View(lung)
#2. 拟合生存曲线
fit <- survfit(Surv(time,status) ~ sex,  data = lung) 
fit
Call: survfit(formula = Surv(time, status) ~ sex, data = lung)

        n events median 0.95LCL 0.95UCL
sex=1 138    112    270     212     310
sex=2  90     53    426     348     550
summary(fit)
#3. 绘制基础曲线
#可选调色板有 "grey","npg","aaas","lancet","jco", "ucscgb","uchicago","simpsons"和"rickandmorty".
ggsurvplot(fit, # 创建的拟合对象
           data = lung,  # 指定变量数据来源
           conf.int = TRUE, # 显示置信区间
           pval = TRUE, # 添加P值
           risk.table = TRUE, # 绘制累计风险曲线
           surv.median.line = "hv", # 添加中位生存时间线
           add.all = TRUE, # 添加总患者生存曲线
palette = "hue")  # 自定义调色板

图片

  • 实例 2. 肺癌累积性危险生存曲线

累积性危险是常用来估计危险概率,生存函数(S(t)=Pr(T>t))是一个阶梯函数,说明随着时间的推移累计生存概率。但有时候研究者更加关注的是随着时间推移事件发生累计概率(顾名思义就是1-S(t))。曲线是反过来的,但是仔细看纵坐标不是0-1,原来”cumhaz” 绘制的是随时间推移事件发生的累计风险(HR),如下:

ggsurvplot(fit, # 创建的拟合对象
           data = lung,  # 指定变量数据来源
           fun ='cumhaz', #累积生存曲线
           conf.int = TRUE, # 显示置信区间
           pval = TRUE, # 添加P值
           risk.table = TRUE, # 绘制累计风险曲线
           surv.median.line = "hv", # 添加中位生存时间线
           add.all = TRUE, # 添加总患者生存曲线
           palette = "hue")  # 自定义调色板

图片

  • 实例 3. 肠癌适合复杂的生存曲线

多个因素的组合计算生存曲线。利用ggsurvplot()的输出结合因素,利用colon数据分析性别变量根据rx&adhere的值生存的曲线比较,如下:

data(colon)
head(colon)
 id study      rx sex age obstruct perfor adhere nodes status differ extent surg node4 time etype
1  1     1 Lev+5FU   1  43        0      0      0     5      1      2      3    0     1 1521     2
2  1     1 Lev+5FU   1  43        0      0      0     5      1      2      3    0     1  968     1
3  2     1 Lev+5FU   1  63        0      0      0     1      0      2      3    0     0 3087     2
4  2     1 Lev+5FU   1  63        0      0      0     1      0      2      3    0     0 3087     1
5  3     1     Obs   0  71        0      0      1     7      1      2      2    0     1  963     2
6  3     1     Obs   0  71        0      0      1     7      1      2      2    0     1  542     1

fit<-survfit(Surv(time,status)~sex+rx+adhere,data=colon)
ggsurv<-ggsurvplot(fit,fun="event",conf.int=TRUE,ggtheme=theme_bw())
ggsurv$plot+theme_bw()+
theme(legend.position="right")+
facet_grid(rx~adhere)

图片

统计程序可以在几秒钟内完成这些计算, 然而,理解他们在做什么是有帮助的。

关注公众号,每日有更新!
在这里插入图片描述

Reference:

Rich JT, Neely JG, Paniello RC, Voelker CC, Nussenbaum B, Wang EW. A practical guide to understanding Kaplan-Meier curves. Otolaryngol Head Neck Surg. 2010;143(3):331-336. doi:10.1016/j.otohns.2010.05.007

  • 1
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值