Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

生存分析

生存分析(survival analysis) は、あるイベントの発生確率や、イベント発生までの期間に関わる要因を調べたいときなどに使う。

「イベント」は分野や問題設定によって様々で、例えば医学・疫学においては「死亡」というイベントについて扱う。マーケティングにおいて顧客の「解約」をイベントとしたり、メーカーが機械の「故障」というイベントについて分析・予測するといった応用研究もある。

通常、イベントが発生した場合、それ以降その個体のデータは得られなくなる(脱落する;打ち切りデータ censored data となる)

データの例

Source
Loading...
Source
<Figure size 640x480 with 1 Axes>

ハザード関数

生存率関数

ある患者の生存時間を表す確率変数をTTとする(T>0T>0)。

TTの確率密度関数(PDF)をf(t)f(t)とする。f(t)f(t)は「期間tが経過した時点で死亡する確率」を意味する。

TTの累積分布関数(CDF)は

F(t)=P(T≤t)=∫0tf(u)duF(t) = P(T \leq t) = \int^t_0 f(u) du

F(t)F(t)は「期間tが経過するまでに死亡している確率」である。

F(t)F(t)をベースに、「期間tが経過するまで死亡していない確率」を意味する 生存率関数(survival rate function) あるいは 生存関数 (survival function) と呼ばれる関数 S(t)S(t)を考えることができる

S(t)=P(T>t)=1−F(t)=∫t∞f(u)duS(t) = P(T > t) = 1 - F(t) = \int_t^\infty f(u) du
f(t)=−dS(t)dtf(t) = - \frac{d S(t)}{d t}

という関係になる

生存率関数の推定

もし正確な生存時間が観測できているなら(研究終了時までに全固体が死亡しているなら)、生存関数は単純に

S^(t)=t日を超えて生存している個体数全個体数\hat{S}(t) = \frac{ \text{$t$日を超えて生存している個体数} }{ \text{全個体数} }

で推定できる。

例えば

StatusSurvival_in_days
1True8.0
2True10.0
3True20.0
4False25.0
5True59.0

というデータの場合、S^(t=11)\hat{S}(t=11)は全員が11日目を観測しているので計算できるが、S^(t=30)\hat{S}(t=30)は4番目の個体がまだ30日目を観測していないのでわからない

この場合、カプラン・マイヤー推定量(Kaplan–Meier estimator - Wikipedia)などで推定を行うことになる

生存曲線(カプラン・マイヤー曲線)

横軸に時間、縦軸に生存率をとった折れ線グラフ

例えば、次のようなデータがあったとする。

Source
Loading...
Source
<Figure size 640x480 with 1 Axes>

時間あたりのイベント発生例数 → 単位時間を短くして、瞬間あたりの死亡率としたのがハザード

ハザード関数

ハザード関数 (hazard function)は、「ある時点まで生存していたことを前提にして、その時点に於いて死亡する確率」という条件付き確率

h(t)=lim⁡dt→0P(T≤t+dt∣T>t)dth(t) = \lim_{dt\to 0} \frac{P(T \leq t + dt| T > t)}{dt}

例えば10歳での生存率と90歳の生存率を比べると、90歳の生存率はかなり低くなると考えられる。

そこを「89歳まで生存していた人が90歳に死亡する確率」と条件付きにすることで、真に測りたい率を得る。

整理すると

h(t)=lim⁡dt→0P(T≤t+dt∣T>t)dt=lim⁡dt→0P(t<T≤t+dt)P(T>t)dt(∵P(T>t)P(T>t)を乗じて分子を同時確率にした)=lim⁡dt→0P(t+dt)−P(t)dt×1P(T>t)=dF(t)dt×1P(T>t)=f(t)S(t)\begin{align} h(t) &= \lim_{dt\to 0} \frac{P(T \leq t + dt| T > t)}{dt}\\ &= \lim_{dt\to 0} \frac{P(t < T \leq t + dt)}{P(T > t) dt} \quad (\because \frac{P(T > t)}{P(T > t)}を乗じて分子を同時確率にした)\\ &= \lim_{dt\to 0} \frac{P(t + dt) - P(t)}{dt} \times \frac{1}{P(T > t)}\\ &= \frac{d F(t)}{d t} \times \frac{1}{P(T > t)}\\ &= \frac{f(t)}{S(t)}\\ \end{align}

なので

h(t)=f(t)S(t)=t期に死亡する確率t期まで生存している確率h(t) = \frac{f(t)}{S(t)} = \frac{\text{t期に死亡する確率} }{\text{t期まで生存している確率} }

という関係になる

ハザード比

ハザード比とは、イベント(死亡)の起こりやすさを試験期間全体の平均的な群間差として推定したもの。

通常は分子に新治療のハザード、分母に既存治療のハザードとして相対的な効果の大きさを推算する。

モデルの評価

c-index

ROC-AUCに時間軸情報を足したもの?

解説:

使用例: