生存時間解析に便利なutil(期間の計算,集計表)

生存時間のモデリングに関しては過去にやりました。 そのときに、データを作るところでひと工夫が必要、と書いたのですが、そのあたりを楽にやる関数がlifelinesには用意されています。 esu-ko.hatenablog.com

期間の計算

開始時間と終了時間を渡すことで、その差分を返してくれます。
終了が観測されていなければ、None,np.nanまたは、na_valuesに該当のna値を与えます。

from lifelines.utils import datetimes_to_durations

dur, has_end = datetimes_to_durations(
    start_dates, 
    end_dates, 
    fill_date = '2016-04-01', #nullだったときの補完値。デフォルトでは今日。
    freq="D")

#durは継続期間(T:end-start)
#has_endは最後の観測があるか(E:endがNoneじゃないか)

また、plot_lifetimesで個体の生存状態を可視化することができます。

from lifelines.plotting import plot_lifetimes
plot_lifetimes(dur, event_observed=has_end)

集計表

生存時間のモデリングでは個体と観測期間を与えますが、そもそも期間ごとの集計が知りたいことがあります。上記で作った期間と、終了観測を与えることで集計表を作ることができます。

from lifelines.utils import survival_table_from_events
survival_table_from_events(
    dur,
    has_end
)
  • entrance:その期間に入ってきた値(左を無視しているなら、最初以外0)
  • at_risk: その次の期間で消えるかもしれない数(残存数)
  • observed:その期間に何らかの観測がされた数
  • removed : その期間で消えた数(前期のat_risk - 当期のremoved = 当期のat_risk
  • censored:観測されたわけではないが、それ以降は取り除いた数
 removed observed    censored    entrance    at_risk
event_at                    
0.0 0   0   0   3   3
1.0 1   1   0   0   3
12.0    1   0   1   0   2
13.0    1   1   0   0   1

ちなみに、kmfではevent_tableで同様の値が取得できます。

from lifelines import KaplanMeierFitter
from lifelines.datasets import load_waltons
waltons = load_waltons()

kmf = KaplanMeierFitter(label="waltons_data")
kmf.fit(waltons['T'], waltons['E'])

kmf.event_table