def test_plot_lifetimes_relative(self, block): self.plt.figure() t = np.linspace(0, 20, 1000) hz, coef, covrt = generate_hazard_rates(1, 5, t) N = 20 T, C = generate_random_lifetimes(hz, t, size=N, censor=True) plot_lifetimes(T, event_observed=C, block=block)
def test_aalen_additive_fit_with_censor(self): # this is a visual test of the fitting the cumulative # hazards. matplotlib = pytest.importorskip("matplotlib") from matplotlib import pyplot as plt n = 2500 d = 6 timeline = np.linspace(0, 70, 10000) hz, coef, X = generate_hazard_rates(n, d, timeline) X.columns = coef.columns cumulative_hazards = pd.DataFrame(cumulative_integral(coef.values, timeline), index=timeline, columns=coef.columns) T = generate_random_lifetimes(hz, timeline) X['T'] = T X['E'] = np.random.binomial(1, 0.99, n) aaf = AalenAdditiveFitter() aaf.fit(X, 'T', 'E') for i in range(d + 1): ax = plt.subplot(d + 1, 1, i + 1) col = cumulative_hazards.columns[i] ax = cumulative_hazards[col].ix[:15].plot(legend=False, ax=ax) ax = aaf.plot(ix=slice(0, 15), ax=ax, columns=[col], legend=False) plt.show()
def test_plot_lifetimes_calendar(self, block): self.plt.figure() t = np.linspace(0, 20, 1000) hz, coef, covrt = generate_hazard_rates(1, 5, t) N = 20 current = 10 birthtimes = current * np.random.uniform(size=(N,)) T, C = generate_random_lifetimes(hz, t, size=N, censor=current - birthtimes) plot_lifetimes(T, event_observed=C, birthtimes=birthtimes, block=block)
def test_aalen_additive_median_predictions_split_data(self): # This tests to make sure that my median predictions statisfy # the prediction are greater than the actual 1/2 the time. # generate some hazard rates and a survival data set n = 2500 d = 5 timeline = np.linspace(0, 70, 5000) hz, coef, X = generate_hazard_rates(n, d, timeline) T = generate_random_lifetimes(hz, timeline) X['T'] = T # fit it to Aalen's model aaf = AalenAdditiveFitter() aaf.fit(X, 'T') # predictions T_pred = aaf.predict_median(X[list(range(6))]) assert abs((T_pred.values > T).mean() - 0.5) < 0.05
def test_aalen_additive_smoothed_plot(self, block): # this is a visual test of the fitting the cumulative # hazards. n = 2500 d = 3 timeline = np.linspace(0, 150, 5000) hz, coef, X = generate_hazard_rates(n, d, timeline) T = generate_random_lifetimes(hz, timeline) + 0.1 * np.random.uniform(size=(n, 1)) C = np.random.binomial(1, 0.8, size=n) X['T'] = T X['E'] = C # fit the aaf, no intercept as it is already built into X, X[2] is ones aaf = AalenAdditiveFitter(coef_penalizer=0.1, fit_intercept=False) aaf.fit(X, 'T', 'E') ax = aaf.smoothed_hazards_(1).iloc[0:aaf.cumulative_hazards_.shape[0] - 500].plot() ax.set_xlabel("time") ax.set_title('test_aalen_additive_smoothed_plot') self.plt.show(block=block) return
def test_aalen_additive_plot(self): # this is a visual test of the fitting the cumulative # hazards. n = 2500 d = 3 timeline = np.linspace(0, 70, 10000) hz, coef, X = generate_hazard_rates(n, d, timeline) T = generate_random_lifetimes(hz, timeline) C = np.random.binomial(1, 1., size=n) X['T'] = T X['E'] = C # fit the aaf, no intercept as it is already built into X, X[2] is ones aaf = AalenAdditiveFitter(coef_penalizer=0.1, fit_intercept=False) aaf.fit(X, 'T', 'E') ax = aaf.plot(iloc=slice(0, aaf.cumulative_hazards_.shape[0] - 100)) ax.set_xlabel("time") ax.set_title('test_aalen_additive_plot') self.plt.show() return
def test_aalen_additive_smoothed_plot(self, block): # this is a visual test of the fitting the cumulative # hazards. n = 2500 d = 3 timeline = np.linspace(0, 150, 5000) hz, coef, X = generate_hazard_rates(n, d, timeline) T = generate_random_lifetimes( hz, timeline) + 0.1 * np.random.uniform(size=(n, 1)) C = np.random.binomial(1, 0.8, size=n) X["T"] = T X["E"] = C # fit the aaf, no intercept as it is already built into X, X[2] is ones aaf = AalenAdditiveFitter(coef_penalizer=0.1, fit_intercept=False) aaf.fit(X, "T", "E") ax = aaf.smoothed_hazards_(1).iloc[0:aaf.cumulative_hazards_.shape[0] - 500].plot() ax.set_xlabel("time") ax.set_title("test_aalen_additive_smoothed_plot") self.plt.show(block=block) return
def test_aalen_additive_plot(self, block): # this is a visual test of the fitting the cumulative # hazards. n = 2500 d = 3 timeline = np.linspace(0, 70, 10000) hz, coef, X = generate_hazard_rates(n, d, timeline) T = generate_random_lifetimes(hz, timeline) T[np.isinf(T)] = 10 C = np.random.binomial(1, 1.0, size=n) X["T"] = T X["E"] = C # fit the aaf, no intercept as it is already built into X, X[2] is ones aaf = AalenAdditiveFitter(coef_penalizer=0.1, fit_intercept=False) aaf.fit(X, "T", "E") ax = aaf.plot(iloc=slice(0, aaf.cumulative_hazards_.shape[0] - 100)) ax.set_xlabel("time") ax.set_title("test_aalen_additive_plot") self.plt.show(block=block) return
def test_aalen_additive_fit_no_censor(self, block): n = 2500 d = 6 timeline = np.linspace(0, 70, 10000) hz, coef, X = generate_hazard_rates(n, d, timeline) X.columns = coef.columns cumulative_hazards = pd.DataFrame(cumulative_integral(coef.values, timeline), index=timeline, columns=coef.columns) T = generate_random_lifetimes(hz, timeline) X['T'] = T X['E'] = np.random.binomial(1, 1, n) aaf = AalenAdditiveFitter() aaf.fit(X, 'T', 'E') for i in range(d + 1): ax = self.plt.subplot(d + 1, 1, i + 1) col = cumulative_hazards.columns[i] ax = cumulative_hazards[col].loc[:15].plot(legend=False, ax=ax) ax = aaf.plot(loc=slice(0, 15), ax=ax, columns=[col], legend=False) self.plt.title("test_aalen_additive_fit_no_censor") self.plt.show(block=block) return