def test_duration_vector_can_be_normalized(self): df = load_kidney_transplant() t = df['time'] normalized_df = df.copy() normalized_df['time'] = (normalized_df['time'] - t.mean()) / t.std() for fitter in [CoxPHFitter(), AalenAdditiveFitter()]: # we drop indexs since aaf will have a different "time" index. hazards = fitter.fit(df, duration_col='time', event_col='death').hazards_.reset_index(drop=True) hazards_norm = fitter.fit(normalized_df, duration_col='time', event_col='death').hazards_.reset_index(drop=True) assert_frame_equal(hazards, hazards_norm)
def test_coef_output_against_Survival_Analysis_by_John_Klein_and_Melvin_Moeschberger(self): # see example 8.3 in Survival Analysis by John P. Klein and Melvin L. Moeschberger, Second Edition df = load_kidney_transplant(usecols=['time', 'death', 'black_male', 'white_male', 'black_female']) cf = CoxPHFitter() cf.fit(df, duration_col='time', event_col='death') # coefs actual_coefs = cf.hazards_.values expected_coefs = np.array([[0.1596, 0.2484, 0.6567]]) npt.assert_array_almost_equal(actual_coefs, expected_coefs, decimal=4)
def test_coef_output_against_Survival_Analysis_by_John_Klein_and_Melvin_Moeschberger(self): # see example 8.3 in Survival Analysis by John P. Klein and Melvin L. Moeschberger, Second Edition df = load_kidney_transplant(usecols=['time', 'death', 'black_male', 'white_male', 'black_female']) cf = CoxPHFitter(normalize=False) cf.fit(df, duration_col='time', event_col='death') # coefs actual_coefs = cf.hazards_.values expected_coefs = np.array([[0.1596, 0.2484, 0.6567]]) npt.assert_array_almost_equal(actual_coefs, expected_coefs, decimal=4)
Demonstrates how the partial likelihood from a Cox proportional hazards model can be used in a NN loss function. An example shows how a NN with one linear-activation layer and the (negative) log partial likelihood as loss function produces approximately the same predictor weights as a Cox model fit in a more conventional way. """ import numpy as np from lifelines import CoxPHFitter from lifelines.datasets import load_kidney_transplant from keras.models import Sequential from keras.layers import Dense import tensorflow as tf import keras.backend as K # Use example dataset from lifelines module kidtx = load_kidney_transplant() # First three rows: # time death age black_male white_male black_female #0 1 0 46 0 1 0 #1 5 0 51 0 1 0 #2 7 1 55 0 1 0 X = kidtx.drop(["time", "death"], axis=1).values y = np.transpose(np.array((kidtx["time"], kidtx["death"]))) n = y.shape[0] # Build model structure model = Sequential() model.add(Dense(units=1, activation="linear", use_bias=False, input_shape=[4])) # Define loss function