データについて
今回使用するデータはlifelines.dataset
のload_rossi
です。
したがってsksurvのCox回帰の際に目的変数の形を変換しなければいけません。忘れそうなのでメモっときます。
lifelines
#data load
from lifelines.datasets import load_rossi
rossi = load_rossi()
from lifelines import CoxPHFitter
cph = CoxPHFitter()
cph.fit(rossi, duration_col='week', event_col='arrest')
cph.print_summary()
cph.plot()
lifelinesの場合データをすべてひとまとまりのDataFrame
でもち、fitの際にdurationのカラムとeventのカラム名を指定するだけでできます。直観的ですね。
sksurv
sksurvの場合は説明変数はDataFrame
のままでも大丈夫ですが、目的変数(durationとevent)の形式をnumpy
の構造化配列に変形します。
from sksurv.linear_model import CoxPHSurvivalAnalysis
estimator = CoxPHSurvivalAnalysis()
y = rossi[['arrest','week']] #目的変数
X = rossi.drop(columns=['arrest','week']) #説明変数
#dtypeの指定 ?はbool型 i8はint64
tp = np.dtype([('arrest','?'), ('week', 'i8')])
structured_y = np.zeros(len(y), dtype=tp)
structured_y['arrest'] = y['arrest']
structured_y['week'] = y['week']
estimator.fit(X,structured_y)