from util import compute_median_survival_time, compute_mean_survival_time def survival_time_nonconformity(predicted_survival_time, observed_time, event_ind): if event_ind == 1: return np.abs(observed_time - predicted_survival_time) else: return np.maximum(observed_time - predicted_survival_time, 0) mean_predicted_survival_times = \ np.array([compute_mean_survival_time(time_points, row) for row in surv]) median_predicted_survival_times = \ np.array([compute_median_survival_time(time_points, row) for row in surv]) for survival_time_estimator in ['mean', 'median']: if survival_time_estimator == 'mean': predicted_survival_times = mean_predicted_survival_times.copy() else: predicted_survival_times = median_predicted_survival_times.copy() for calib_frac in np.linspace(0.1, 1, 10): print('[Split conformal prediction - %s, calib frac %f]' % (survival_time_estimator, calib_frac)) rng = np.random.RandomState(conformal_prediction_random_seed) coverages = {conformal_prediction_CI_coverage: []
kernel_function=kernel_func) cum_hazard_scores = cum_haz.sum(axis=1) cindex = concordance_index(fold_y_val[:, 0], -cum_hazard_scores, fold_y_val[:, 1]) elif cindex_method == 'cum_haz_from_surv': surv_thresholded = np.maximum(surv, np.finfo(float).eps) cum_haz = -np.log(surv_thresholded) cum_hazard_scores = cum_haz.sum(axis=1) cindex = concordance_index(fold_y_val[:, 0], -cum_hazard_scores, fold_y_val[:, 1]) elif cindex_method == 'median': predicted_medians = \ np.array([compute_median_survival_time(mesh_points, surv_row) for surv_row in surv]) cindex = concordance_index(fold_y_val[:, 0], predicted_medians, fold_y_val[:, 1]) elif cindex_method == 'median_from_cum_haz': cum_haz = \ surv_model.predict_cum_haz( fold_X_val_standardized, sorted_fold_y_val, presorted_times=True, kernel_function=kernel_func) predicted_medians = \ np.array([compute_median_survival_time(mesh_points, surv_row) for surv_row in np.exp(-cum_haz)])