生存時間のモデリングに関しては過去にやりました。 そのときに、データを作るところでひと工夫が必要、と書いたのですが、そのあたりを楽にやる関数が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