【8.1】生存分析

生存分析是一大类方法,往往需要一本厚厚的书才能介绍完。后面几篇文章打算专门介绍一下生存分析,这是第一篇。作为入门,先了解一下什么是生存数据,生存分析的方法有哪些,等等。

一 生存数据

  • 生存数据跟其他数据不一样。比如,你要比较两组人群的舒张压有没有差异,那么舒张压就是因变量,这是连续变量;
  • 你要比较两组人群的糖尿病发生率有没有差异,那么是否发生糖尿病就是因变量,这是分类变量。
  • 然而生存分析中的结局却不是单一的连续变量或分类变量,而是包含了2个变量,一个是分类变量(是否发生),另一个是连续变量(发生时间)。

不少临床大夫都问我:我这个数据能做生存分析吗?那就记住,你想做生存分析的话,需要有两个必须的变量:

  1. 一个是你关心的结局是否发生(通常是二分类,发生或不发生)
  2. 一个是结局发生的时间。如果没有结局发生的时间,那就只有一个分类变量作为结局(如发生或不发生),那这时就考虑用卡方检验或logistic回归就行了。

二、生存分析的含义

生存分析,顾名思义,分析生存率、死亡率之类的。但这只是狭义的概念。事实上,并非所有领域都这么称呼,如社会学中经常会说事件史分析,在工业领域往往会说失效(failure)分析(所以你会发现很多软件中都是用failure和survival来标识死亡和生存)。其实都是一回事,只不过在医学中我们一般都叫做生存分析。

但是一定要注意,虽然名字叫生存分析,但并不是说只能分析生存、死亡的数据。所谓生存和死亡,是一个泛指。任何我们感兴趣的事件,只要有前面说的结局和结局发生时间,都可以用生存分析。下面是几个例子:

研究某病治疗后的复发情况,复发就是“死亡”,未复发就是“生存”。只要有复发的结局(是否复发)以及从治疗后到复发的时间,就可以用生存分析。

研究工作后升迁的因素有哪些,升迁就是“死亡”,未升迁就是“生存”。只要有升迁的结局(是否升迁)以及从开始工作到升迁的时间,就可以用生存分析。

研究戒烟后复吸的因素,复吸就是“死亡”,未复吸就是“生存”。只要有复吸的结局(是否复吸)以及从戒烟工作到复吸的时间,就可以用生存分析。

总的来说就是,只要你有一个感兴趣的结局(通常为发生和不发生),并能获得从某一时点到结局发生的时间长度,就可以用生存分析。

三、为什么要用生存分析?

试想一个情形:如果你要比较两种药物治疗后的疾病复发情况,假设你观察了10年,所有患者都复发了,那这时候,其实你只需要比较复发时间就行了。这就相当于两组定量资料的比较。

再试想另一个情形:如果你要比较两种药物治疗后的死亡情况,假设你观察了3年,计算两组人群的3年死亡率,这时候,你并没有观察到每个人的具体死亡时间,这就相当于两组率的比较。

上述两种方式其实都各有缺点,第一种情形过于理想,往往是很难实现的。尤其在你研究真正的死亡和生存的时候,不大可能观察一辈子,直至所有人死亡。甚至有可能观察人群还在,观察者先走了。

第二种情形其实损失了信息,比如A组3年死亡率是30%,B组是40%,看起来似乎A组更好,然而如果A组的死亡者大都是第一年死亡,而B组大都是第3年死亡,这时就很难说哪个好。因为毕竟B组的人多活了2年。这种情况下,跟你选择时间点就有很大关系。也许你分析1年死亡率,结果就发生逆转了。

比如图1,横坐标是月份,纵坐标是生存率。你可以发现,如果你观察1年死亡率,两组差别较大,可能会有统计学意义;而如果你观察2年死亡率,两组差别就小很多,可能就没有统计学意义。

图1 不同时点的生存率示意图

正因为如此,所以才用生存分析,把第二种情形的缺点弥补一下,不再考虑具体某一年的死亡率,而是观察整个研究期间的死亡率变化情况,这就可以观察到每一时期的死亡率。正如图1所示。

还有一个原因我们不得不用生存分析。那就是失访问题。

失访几乎是任何随访研究中必然发生的事情,所谓失访,顾名思义,失去了随访,也就再也联系不到这个人了,数据自然就缺失了。比如前面说的例子,观察3年死亡率,本来观察了100人,结果有10个人在第二年时候把你电话加入黑名单了,你再也联系不到了,那就是失访了。这种情况下,最后分析数据的时候,只能把这10个人删掉了(当然,也有一些缺失值处理方法,但很多时候可能也就是删掉了)。

但是在生存分析中,它的处理方式不一样,它不是简单把这些人删掉,而是利用了他们的信息。因为在生存分析看来,这些人在第二年失访了,起码提供了这样的信息:这些人在第二年仍然活着。尽管信息不全,当仍是一部分信息。生存分析的方法就会利用第二年仍然存活的这种信息,计算一定的结果。相对而言,提供了更多的参考价值。

四、生存分析中的删失

提到失访,那就不得不提一下删失(censor)这个词,不同领域翻译不同,有的翻译为截尾。失访,可以看做是删失的一部分。所谓删失,总的来说就是没有观察到结局,不管是因为什么原因。

观察不到结局,至少有以下几个原因:

第一,失访。失去联系了,当然也就不可能观察到结局。

第二,意外死亡。本来你想观察肺癌的复发情况,观察时间是3年,结果患者突然在第二年因中风而死亡,那你就观察不到是否肺癌复发。

第三,观察对象一直到研究结束仍没有发生结局。比如观察戒烟者重新吸烟,观察1年,有的人一直到观察结束,仍没有吸烟。

以上是常见的三种情形。他们都没有观察到结局,都称为删失。

生存分析中,结局其实只分了两大类:结局发生和删失。以前有不少人找我分析数据,把结局分了好几类,结局发生=1,没有发生=0,失访=2,……。其实没有必要,直接分为两大类:结局发生=1,删失=0。足矣。

五、生存分析的常用方法

由于生存数据是不同的数据,因此它们的方法也有各种。生存分析不是一种具体方法,而是特指的用于生存数据的很多种方法。作为类比,你可以看一下图2:

图2 不同资料类型的常用方法(部分方法)

图2只是为了做一个类比,并不是说生存分析就这两种方法,同样,关于定量资料和分类资料也不止这些方法。只是作为类比,大家可以有一个结构,把生存数据看做另一类数据(虽然它算不上另一类数据,只是有两个结局变量而已),对于不同的数据,就有不同的系列方法等着它。

生存分析的方法非常多,需要结合研究目的、数据类型等选择不同给的方法。

第一,从研究目的来说,不同目的可采用不同方法。图2给出两种方法是根据目的而定,简单的组间比较常用Kaplan-Meier法,这个方法很多临床大夫都听说过;多因素分析常用COX回归,这也是临床大夫都听过的方法。

第二,发生事件的重复性来说,有的事件是可以重复发生的,比如疾病复发、吸烟的复吸、出狱后在入狱,等等;有的则是无重复的,如死亡。无重复结局的较为简单,普通的Cox回归等差不多可以胜任,而重复结局有专门的重复事件的生存分析方法。

第三,结局是单一的还是多类的。大多数时候,我们只关注一个结局,如疾病复发、死亡等,这种情况下常规的生存分析方法即可;但有些特殊情况下,我们可能同时关注多个结局,如服药后的主要不良反应,可能同时关心3种主要不s良反应(是否发生以及发生时间),这时候需要用特殊的方法,常见的如竞争风险模型。

第四,生存时间的分布,很多临床大夫最喜欢用Cox回归,为什么?因为简单,无需考虑分布(这种不用考虑分布的方法通常称为非参数法)。然而,Cox回归并不是在任何时候都能得到最优结果,很多时候,如果生存时间满足一定的分布,此时如果能获得确切的分布,用参数法可能效果更好。常见的参数法如Weibull回归、对数logistic回归等等。

第五,异质性问题。异质性这个词听起来太专业化,简单来说就是不一样。多数统计分析方法大都是建立在群体基础上,比如以均值代表两组人的水平来比较,这在每个人的数值差不多的时候是有效,但如果人和人差别太大,就未必有效了(这就是为什么我们做t检验时还得考虑方差齐性的原因)。同样,生存分析也是如此,如果每个人的死亡风险各不相同,比如有的风险变化快一些,有的慢一些,那常规的方法(如Cox回归)就难以胜任,这就是异质性问题。这种时候,我们就需要考虑异质性的方法,常见的如frailty model,通常翻译为脆弱模型。

第六,基于离散时间和连续时间。这两个概念很好理解,然而在生存分析中往往不是这么好理解。连续时间,理论上就是说,你得时时刻刻连续观察这个人,看他到底什么时候发生事件结局。离散时间,则是说,你可能每隔1个月(也可能是2个月,1年,等等)看看他发生了结局没有,看看每个月(或每年等)发生了多少例,但不知道他具体哪天发生的。我们目前所用的生存分析方法,绝大多数都是基于连续时间,即假定都是观察到具体时间的。有的尽管听起来不像离散的(如每月观察一次),然后这还取决于我们如何定义时间点,比如你要做一个10年的随访研究,每月观察一次,已经算是一个小的时间点了。如果你做一个感冒治疗的随访,每天观察一次也未必算是一个时间点,也许每半天观察一次都没问题。但是如果你的数据很明显是一个离散时间,那其实现在你用的这些方法其实都未必合适,离散时间也有离散时间的方法,尽管实际中其实很少用。比如logistic回归,有时也会用于离散时间的分析方法。

六、基本概念

  • 起始事件(initial event):反应生存时间起始特征的事件,如疾病确诊、某种疾病治疗开始等。
  • 失效事件(failure event):在生存分析随访研究过程中,一部分研究对象可观察到死亡,可以得到准确的生存时间,它提供的信息是完全的,这种事件称为失效事件,也称之为死亡事件、终点事件。
  • 生存时间:广义上指某个起点事件开始到某个终点事件发生所经历的时间,度量单位可以是年、月、日、小时等,常用符号 t 所示。 完全数据(Completed Data):从观察起点到发生死亡事件所经历的时间。
  • 不完全数据(Incomplete Data):生存时间观察过程的截止不是由于死亡事件,而是由其他原因引起的。不完全数据分为:删失数据(censored Data)和截尾数据(truncated Data)。不完全主要原因:失访:指失去联系;退出:死于非研究因素或非处理因素而退出研究;终止:设计时规定的时间已到而终止观察,但研究对象仍然存活。
  • 删失分类:
  1. 左删失(left censored):研究对象在某一时刻开始接受观察,但是在该时间点之前,研究所感兴趣的事件已经发生,无法明确具体时间。
  2. 右删失(right censored):在进行随访观察中,研究对象观察的起始时间已知,但终点事件发生的时间未知,无法获取具体的生存时间,只知道生存时间大于观察时间。
  3. 区间删失(interval censored):在实际的研究中,如果不能够进行连续的观察随访,只能预先设定观察时间点,研究人员仅能知道每个研究对象在两次随访区间内是否发生终点事件,而不知道准确的发生时间。
  • 截尾是所有样本的综合特性,指的是观察的总体是有偏的,只有当事件的失效时间出现在观测区间内,我们才能知道这个事件及其观测数据的存在。
  1. 左截尾(left truncation):只能观测到一个时间点之后发生的失效事件。左截尾时间点之前发生的失效事件不知情/不关心(如样本来自退休中心,都是>60岁的老人)。
  2. 右截尾(right truncation):只能观测到一个时间点之前发生的失效事件。右截尾时间点之后发生的失效事件不知情/不关心
  • 生存曲线(survival curve):以观察(随访)时间为横轴,以生存率为纵轴,将各个时间点所对应的生存率连接在一起的曲线图。
  • 生存率:又叫生存概率或者生存函数,表示一个病人的生存时间长于时间t的概率,用s(t)表示,s(t)=P(T≥t)。生存率的估计方法有参数法,非参数法,半参数法,实际中常用非参数法中的乘积极限法及半参数法中的Cox回归模型。

参考资料

药企,独角兽,苏州。团队长期招人,感兴趣的都可以发邮件聊聊:tiehan@sina.cn
个人公众号,比较懒,很少更新,可以在上面提问题,如果回复不及时,可发邮件给我: tiehan@sina.cn