生存分析(在工程中也称为可靠性分析)的目标是建立协变量与事件发生时间之间的联系。该算法起源于临床医学研究,往往主要目标是预测死亡时间,即生存。生存分析时一种回归问题(人们想要预测一个连续的值),它与传统回归的不同之处在于,部分训练数据只能被部分观察到(它们被删减了)。
例如:
考虑一项临床研究,该研究调查了冠心病,时间跨度为1年。如图所示。
患者A在3个月后失去随访,无心血管事件记录,患者B在入组4个半月后发生事件,患者D在入组2个月后退出研究,患者E在研究结束前未发生任何事件。因此,只能记录患者B和C的心血管事件的确切时间,他们的记录是未删失的。对于剩余的患者,不知道他们是否在研究结束后是否发生了事件,因此他们的信息是删失的。
形式上,每个患者记录由一组协变量组成
x
∈
R
d
x \in \mathbb{R}^d
x∈Rd,以及时间
t
>
0
t>0
t>0事件发生的时间或时间
c
>
0
c>0
c>0删失。由于删失、经历和事件是相互排斥的,所以通常定义一个事件指示器
δ
∈
{
0
;
1
}
\delta \in \{0;1\}
δ∈{0;1}以及可观察到的生存时间
y
>
0
y>0
y>0。右删失样本可观测时间
y
y
y的定义为
y
=
m
i
n
(
t
,
c
)
=
{
t
?if?
δ
=
1
c
?if?
δ
=
0
y=min(t,c)=\begin{cases} t& \text{ if } \delta =1 \\ c& \text{ if } \delta =0 \end{cases}
y=min(t,c)={tc??if?δ=1?if?δ=0?
因此,生存分析是一种需要考虑到这种数据集的独特特征的算法。
生存分析的研究对象为生存时间,即事件失败所发生的时间,比如研究病人感染某种病毒之后多长时间会死亡,也可以是借款者在完成借款后多长时间会发生违约事件。
生存分析中的预测通常侧重与预测一个函数,而不是专注于预测时间上发生的事件,要么是生存函数,要么是风险函数。
生存函数
S
(
t
)
=
P
(
T
>
t
)
S(t)=P(T>t)
S(t)=P(T>t)返回超过时间
t
t
t的生存概率,风险函数
h
(
t
)
h(t)
h(t)表示事件在小时间间隔
[
t
;
t
+
△
t
]
[t; t+\triangle t]
[t;t+△t]内事件发生的近似概率(没有上界),条件是个体在时间
t
t
t时没有发生事件:
h
(
t
)
=
lim
?
△
t
→
0
P
(
t
≤
T
<
t
+
△
t
∣
T
≥
t
)
△
t
≥
0
h(t)=\lim_{\triangle t \to 0} \frac{P(t\le T < {t+\triangle t}|T \ge t)}{\triangle t} \ge 0
h(t)=△t→0lim?△tP(t≤T<t+△t∣T≥t)?≥0
风险函数的其他名称有条件失败率、条件死亡率或瞬时失败率。与描述事件未发生的生存函数不同,风险函数提供了关于事件发生的信息。累计风险函数
H
(
t
)
H(t)
H(t)为时间段
[
0
;
t
]
[0;t]
[0;t]内风险函数的积分:
H
(
t
)
=
∫
0
t
h
(
u
)
d
u
H(t)=\int_0^t h(u)du
H(t)=∫0t?h(u)du
给定观察数据
{
(
y
1
,
δ
1
)
,
.
.
.
,
(
y
n
,
δ
n
)
}
\{(y_1,\delta_1),...,(y_n,\delta_n)\}
{(y1?,δ1?),...,(yn?,δn?)},生存函数
S
(
t
)
S(t)
S(t)和
H
(
t
)
H(t)
H(t)可以分别通过sksurv.nonparametric.kaplan_meier_estimator()
和sksurv.nonparametric.nelson_aalen_estimator()
估计。
上述估计过于简单,因为没有考虑到可能影响生存的其他特征。
C
O
X
COX
COX比例风险模型(sksurv.linear_model.CoxPHSurvivalAnalysis
)提供了一种在存在额外协变量情况下估计生存和累计风险函数的方法,它假设存在基线风险函数,并且协变量仅按比例改变风险。也就是说,它假设两个病人经历一个事件的风险比率随时间保持不变。生存函数
S
(
t
)
S(t)
S(t)和
H
(
t
)
H(t)
H(t)可以分别通过sksurv.linear_model.CoxPHSurvivalAnalysis.predict_survival_function()
和sksurv.linear_model.CoxPHSurvivalAnalysis.predict_cumulative_hazard_function()
估计。