Exemplo n.º 1
0
 def test_coxph_plot_covariate_groups_with_nonnumeric_strata(self, block):
     df = load_rossi()
     df["strata"] = np.random.choice(["A", "B"], size=df.shape[0])
     cp = CoxPHFitter()
     cp.fit(df, "week", "arrest", strata="strata")
     cp.plot_covariate_groups("age", [10, 50, 80])
     self.plt.title("test_coxph_plot_covariate_groups_with_single_strata")
     self.plt.show(block=block)
Exemplo n.º 2
0
 def test_weibull_aft_plot_partial_effects_on_outcome(self, block):
     df = load_rossi()
     aft = WeibullAFTFitter()
     aft.fit(df, "week", "arrest")
     aft.plot_partial_effects_on_outcome("age", [10, 50, 80])
     self.plt.tight_layout()
     self.plt.title("test_weibull_aft_plot_partial_effects_on_outcome")
     self.plt.show(block=block)
Exemplo n.º 3
0
 def test_coxph_plot_covariate_groups_with_multiple_variables_and_strata(self, block):
     df = load_rossi()
     df["strata"] = np.random.choice(["A", "B"], size=df.shape[0])
     cp = CoxPHFitter()
     cp.fit(df, "week", "arrest", strata="strata")
     cp.plot_covariate_groups(["age", "prio"], [[10, 0], [50, 10], [80, 90]])
     self.plt.title("test_coxph_plot_covariate_groups_with_multiple_variables_and_strata")
     self.plt.show(block=block)
Exemplo n.º 4
0
 def test_weibull_aft_plot_covariate_groups(self, block):
     df = load_rossi()
     aft = WeibullAFTFitter()
     aft.fit(df, "week", "arrest")
     aft.plot_covariate_groups("age", [10, 50, 80])
     self.plt.tight_layout()
     self.plt.title("test_weibull_aft_plot_covariate_groups")
     self.plt.show(block=block)
Exemplo n.º 5
0
 def test_coxph_plot_partial_effects_on_outcome_with_strata(self, block):
     df = load_rossi()
     cp = CoxPHFitter()
     cp.fit(df, "week", "arrest", strata=["paro", "fin"])
     cp.plot_partial_effects_on_outcome("age", [10, 50, 80])
     self.plt.title(
         "test_coxph_plot_partial_effects_on_outcome_with_strata")
     self.plt.show(block=block)
Exemplo n.º 6
0
 def test_weibull_aft_plot_covariate_groups_with_multiple_columns(self, block):
     df = load_rossi()
     aft = WeibullAFTFitter()
     aft.fit(df, "week", "arrest")
     aft.plot_covariate_groups(["age", "prio"], [[10, 0], [50, 10], [80, 50]])
     self.plt.tight_layout()
     self.plt.title("test_weibull_aft_plot_covariate_groups_with_multiple_columns")
     self.plt.show(block=block)
Exemplo n.º 7
0
 def test_using_a_custom_timeline_in_static_fitting(self):
     rossi = load_rossi()
     aaf = AalenAdditiveFitter()
     timeline = np.arange(10)
     aaf.fit(rossi, event_col='week', duration_col='arrest', timeline=timeline)
     npt.assert_array_equal(aaf.hazards_.index.values, timeline)
     npt.assert_array_equal(aaf.cumulative_hazards_.index.values, timeline)
     npt.assert_array_equal(aaf.variance_.index.values, timeline)
     npt.assert_array_equal(aaf.timeline, timeline)
Exemplo n.º 8
0
 def test_using_a_custom_timeline_in_static_fitting(self):
     rossi = load_rossi()
     aaf = AalenAdditiveFitter()
     timeline = np.arange(10)
     aaf.fit(rossi, event_col='week', duration_col='arrest', timeline=timeline)
     npt.assert_array_equal(aaf.hazards_.index.values, timeline)
     npt.assert_array_equal(aaf.cumulative_hazards_.index.values, timeline)
     npt.assert_array_equal(aaf.variance_.index.values, timeline)
     npt.assert_array_equal(aaf.timeline, timeline)
Exemplo n.º 9
0
 def test_coxph_plot_covariate_groups_with_multiple_variables(self, block):
     df = load_rossi()
     cp = CoxPHFitter()
     cp.fit(df, "week", "arrest")
     cp.plot_covariate_groups(["age", "prio"],
                              [[10, 0], [50, 10], [80, 90]])
     self.plt.title(
         "test_coxph_plot_covariate_groups_with_multiple_variables")
     self.plt.show(block=block)
Exemplo n.º 10
0
 def test_aft_plot_partial_effects_on_outcome_with_categorical(self, block):
     df = load_rossi()
     df["cat"] = np.random.choice(["a", "b", "c"], size=df.shape[0])
     aft = WeibullAFTFitter()
     aft.fit(df, "week", "arrest", formula="cat + age + fin")
     aft.plot_partial_effects_on_outcome("cat", values=["a", "b", "c"])
     self.plt.title(
         "test_aft_plot_partial_effects_on_outcome_with_categorical")
     self.plt.show(block=block)
Exemplo n.º 11
0
 def test_coxph_plot_partial_effects_on_outcome_with_cumulative_hazard(
         self, block):
     df = load_rossi()
     cp = CoxPHFitter()
     cp.fit(df, "week", "arrest")
     cp.plot_partial_effects_on_outcome("age", [10, 50, 80],
                                        y="cumulative_hazard")
     self.plt.title("test_coxph_plot_partial_effects_on_outcome")
     self.plt.show(block=block)
Exemplo n.º 12
0
 def test_survival_probability_calibration_on_out_of_sample_data(
         self, block):
     rossi = load_rossi()
     rossi = rossi.sample(frac=1.0)
     cph = CoxPHFitter().fit(rossi.loc[:300], "week", "arrest")
     survival_probability_calibration(cph, rossi.loc[300:], 25)
     self.plt.title(
         "test_survival_probability_calibration_on_out_of_sample_data")
     self.plt.show(block=block)
Exemplo n.º 13
0
def get_rossi_dataset():
    from lifelines.datasets import load_rossi

    df = load_rossi()

    T_train = df.pop("week").values
    E_train = df.pop("arrest").values
    X_train = df.values

    return X_train, T_train, E_train
Exemplo n.º 14
0
 def test_spline_coxph_plot_partial_effects_on_outcome_with_strata(
         self, block):
     df = load_rossi()
     cp = CoxPHFitter(baseline_estimation_method="spline",
                      n_baseline_knots=2)
     cp.fit(df, "week", "arrest", strata=["wexp"])
     cp.plot_partial_effects_on_outcome("age", [10, 50, 80])
     self.plt.title(
         "test_spline_coxph_plot_partial_effects_on_outcome_with_strata")
     self.plt.show(block=block)
Exemplo n.º 15
0
 def test_right_censorship_cdf_plots(self, block):
     df = load_rossi()
     fig, axes = self.plt.subplots(2, 2, figsize=(9, 5))
     axes = axes.reshape(4)
     for i, model in enumerate([WeibullFitter(), LogNormalFitter(), LogLogisticFitter(), ExponentialFitter()]):
         model.fit(df["week"], df["arrest"])
         ax = cdf_plot(model, ax=axes[i])
         assert ax is not None
     self.plt.suptitle("test_right_censorship_cdf_plots")
     self.plt.show(block=block)
Exemplo n.º 16
0
    def test_input_column_order_is_equal_to_output_hazards_order(self):
        rossi = load_rossi()
        aaf = AalenAdditiveFitter()
        expected = ['fin', 'age', 'race', 'wexp', 'mar', 'paro', 'prio']
        aaf.fit(rossi, event_col='week', duration_col='arrest')
        assert list(aaf.cumulative_hazards_.columns.drop('baseline')) == expected

        aaf = AalenAdditiveFitter(fit_intercept=False)
        expected = ['fin', 'age', 'race', 'wexp', 'mar', 'paro', 'prio']
        aaf.fit(rossi, event_col='week', duration_col='arrest')
        assert list(aaf.cumulative_hazards_.columns) == expected
Exemplo n.º 17
0
    def test_input_column_order_is_equal_to_output_hazards_order(self):
        rossi = load_rossi()
        aaf = AalenAdditiveFitter()
        expected = ['fin', 'age', 'race', 'wexp', 'mar', 'paro', 'prio']
        aaf.fit(rossi, event_col='week', duration_col='arrest')
        assert list(aaf.cumulative_hazards_.columns.drop('baseline')) == expected

        aaf = AalenAdditiveFitter(fit_intercept=False)
        expected = ['fin', 'age', 'race', 'wexp', 'mar', 'paro', 'prio']
        aaf.fit(rossi, event_col='week', duration_col='arrest')
        assert list(aaf.cumulative_hazards_.columns) == expected
Exemplo n.º 18
0
    def test_penalizer_reduces_norm_of_hazards(self):
        from numpy.linalg import norm
        rossi = load_rossi()

        aaf_without_penalizer = AalenAdditiveFitter(coef_penalizer=0., smoothing_penalizer=0.)
        assert aaf_without_penalizer.coef_penalizer == aaf_without_penalizer.smoothing_penalizer == 0.0
        aaf_without_penalizer.fit(rossi, event_col='week', duration_col='arrest')

        aaf_with_penalizer = AalenAdditiveFitter(coef_penalizer=10., smoothing_penalizer=10.)
        aaf_with_penalizer.fit(rossi, event_col='week', duration_col='arrest')
        assert norm(aaf_with_penalizer.cumulative_hazards_) <= norm(aaf_without_penalizer.cumulative_hazards_)
Exemplo n.º 19
0
    def test_penalizer_reduces_norm_of_hazards(self):
        from numpy.linalg import norm
        rossi = load_rossi()

        aaf_without_penalizer = AalenAdditiveFitter(coef_penalizer=0., smoothing_penalizer=0.)
        assert aaf_without_penalizer.coef_penalizer == aaf_without_penalizer.smoothing_penalizer == 0.0
        aaf_without_penalizer.fit(rossi, event_col='week', duration_col='arrest')

        aaf_with_penalizer = AalenAdditiveFitter(coef_penalizer=10., smoothing_penalizer=10.)
        aaf_with_penalizer.fit(rossi, event_col='week', duration_col='arrest')
        assert norm(aaf_with_penalizer.cumulative_hazards_) <= norm(aaf_without_penalizer.cumulative_hazards_)
Exemplo n.º 20
0
 def test_coxph_plot_partial_effects_on_outcome_with_multiple_variables(
         self, block):
     df = load_rossi()
     cp = CoxPHFitter()
     cp.fit(df, "week", "arrest")
     cp.plot_partial_effects_on_outcome(["age", "prio"],
                                        [[10, 0], [50, 10], [80, 90]])
     self.plt.title(
         "test_coxph_plot_partial_effects_on_outcome_with_multiple_variables"
     )
     self.plt.show(block=block)
Exemplo n.º 21
0
 def test_penalized_output_against_R(self):
     # R code:
     #
     # rossi <- read.csv('.../lifelines/datasets/rossi.csv')
     # mod.allison <- coxph(Surv(week, arrest) ~ ridge(fin, age, race, wexp, mar, paro, prio,
     #                                                 theta=1.0, scale=FALSE), data=rossi)
     # cat(round(mod.allison$coefficients, 4), sep=", ")
     expected = np.array([[-0.3641, -0.0580, 0.2894, -0.1496, -0.3837, -0.0822, 0.0913]])
     df = load_rossi()
     cf = CoxPHFitter(normalize=False, penalizer=1.0)
     cf.fit(df, duration_col='week', event_col='arrest')
     npt.assert_array_almost_equal(cf.hazards_.values, expected, decimal=3)
Exemplo n.º 22
0
 def test_penalized_output_against_R(self):
     # R code:
     #
     # rossi <- read.csv('.../lifelines/datasets/rossi.csv')
     # mod.allison <- coxph(Surv(week, arrest) ~ ridge(fin, age, race, wexp, mar, paro, prio,
     #                                                 theta=1.0, scale=FALSE), data=rossi)
     # cat(round(mod.allison$coefficients, 4), sep=", ")
     expected = np.array([[-0.3641, -0.0580, 0.2894, -0.1496, -0.3837, -0.0822, 0.0913]])
     df = load_rossi()
     cf = CoxPHFitter(normalize=False, penalizer=1.0)
     cf.fit(df, duration_col='week', event_col='arrest')
     npt.assert_array_almost_equal(cf.hazards_.values, expected, decimal=3)
Exemplo n.º 23
0
    def test_to_episodic_format_with_long_time_gap_is_identical(self):
        rossi = load_rossi()
        rossi["id"] = np.arange(rossi.shape[0])

        long_rossi = utils.to_episodic_format(rossi, duration_col="week", event_col="arrest", id_col="id", time_gaps=1000.0)

        # using astype(int) would fail on Windows because int32 and int64 are used as dtype
        long_rossi["week"] = long_rossi["stop"].astype(rossi["week"].dtype)
        del long_rossi["start"]
        del long_rossi["stop"]

        assert_frame_equal(long_rossi, rossi, check_like=True)
Exemplo n.º 24
0
 def test_output_against_R(self):
     # from http://cran.r-project.org/doc/contrib/Fox-Companion/appendix-cox-regression.pdf
     # Link is now broken, but this is the code:
     #
     # rossi <- read.csv('.../lifelines/datasets/rossi.csv')
     # mod.allison <- coxph(Surv(week, arrest) ~ fin + age + race + wexp + mar + paro + prio,
     #     data=rossi)
     # cat(round(mod.allison$coefficients, 4), sep=", ")
     expected = np.array([[-0.3794, -0.0574, 0.3139, -0.1498, -0.4337, -0.0849,  0.0915]])
     df = load_rossi()
     cf = CoxPHFitter(normalize=False)
     cf.fit(df, duration_col='week', event_col='arrest')
     npt.assert_array_almost_equal(cf.hazards_.values, expected, decimal=3)
def test_cox_concordance():
    """ test based on lifelines doc example from lifelines.readthedocs.io
    Warning: doc example has multivariable result, here is one variable result """
    rossi_dataset = load_rossi()
    example = Survival(rossi_dataset, 'week',
                       'arrest').stratify('fin', ['no fin', 'fin'])
    cox_model = example.cox_model_fitted
    concordance_value = concordance_index(
        cox_model.durations,
        -cox_model.predict_partial_hazard(cox_model.data).values.ravel(),
        cox_model.event_observed)

    np.testing.assert_allclose(concordance_value, 0.545735287211, atol=0.005)
Exemplo n.º 26
0
    def test_to_episodic_format_with_long_time_gap_is_identical(self):
        rossi = load_rossi()
        rossi["id"] = np.arange(rossi.shape[0])

        long_rossi = utils.to_episodic_format(
            rossi, duration_col="week", event_col="arrest", id_col="id", time_gaps=1000.0
        )

        long_rossi["week"] = long_rossi["stop"].astype(int)
        del long_rossi["start"]
        del long_rossi["stop"]

        assert_frame_equal(long_rossi, rossi, check_like=True)
Exemplo n.º 27
0
 def test_output_against_R(self):
     # from http://cran.r-project.org/doc/contrib/Fox-Companion/appendix-cox-regression.pdf
     # Link is now broken, but this is the code:
     #
     # rossi <- read.csv('.../lifelines/datasets/rossi.csv')
     # mod.allison <- coxph(Surv(week, arrest) ~ fin + age + race + wexp + mar + paro + prio,
     #     data=rossi)
     # cat(round(mod.allison$coefficients, 4), sep=", ")
     expected = np.array([[-0.3794, -0.0574, 0.3139, -0.1498, -0.4337, -0.0849,  0.0915]])
     df = load_rossi()
     cf = CoxPHFitter(normalize=False)
     cf.fit(df, duration_col='week', event_col='arrest')
     npt.assert_array_almost_equal(cf.hazards_.values, expected, decimal=3)
Exemplo n.º 28
0
    def test_summary(self):

        cp = CoxPHFitter()
        df = load_rossi()
        cp.fit(df, duration_col='week', event_col='arrest')
        summDf = cp.summary
        expectedColumns = ['coef',
                           'exp(coef)',
                           'se(coef)',
                           'z',
                           'p',
                           'lower 0.95',
                           'upper 0.95']
        assert all([col in summDf.columns for col in expectedColumns])
Exemplo n.º 29
0
    def test_strata_against_r_output(self):
        """
        > r = coxph(formula = Surv(week, arrest) ~ fin + age + strata(race,
            paro, mar, wexp) + prio, data = rossi)
        > r
        > r$loglik
        """

        df = load_rossi()
        cp = CoxPHFitter(normalize=False)
        cp.fit(df, 'week', 'arrest', strata=['race', 'paro', 'mar', 'wexp'], include_likelihood=True)

        npt.assert_almost_equal(cp.summary['coef'].values, [-0.335, -0.059, 0.100], decimal=3)
        assert abs(cp._log_likelihood - -436.9339) / 436.9339 < 0.01
Exemplo n.º 30
0
    def test_strata_against_r_output(self):
        """
        > r = coxph(formula = Surv(week, arrest) ~ fin + age + strata(race,
            paro, mar, wexp) + prio, data = rossi)
        > r
        > r$loglik
        """

        df = load_rossi()
        cp = CoxPHFitter(normalize=False)
        cp.fit(df, 'week', 'arrest', strata=['race', 'paro', 'mar', 'wexp'], include_likelihood=True)

        npt.assert_almost_equal(cp.summary['coef'].values, [-0.335, -0.059, 0.100], decimal=3)
        assert abs(cp._log_likelihood - -436.9339) / 436.9339 < 0.01
Exemplo n.º 31
0
    def test_summary(self):

        cp = CoxPHFitter()
        df = load_rossi()
        cp.fit(df, duration_col='week', event_col='arrest')
        summDf = cp.summary
        expectedColumns = ['coef',
                           'exp(coef)',
                           'se(coef)',
                           'z',
                           'p',
                           'lower 0.95',
                           'upper 0.95']
        assert all([col in summDf.columns for col in expectedColumns])
Exemplo n.º 32
0
    def test_swapping_order_of_columns_in_a_df_is_okay(self):
        rossi = load_rossi()
        aaf = AalenAdditiveFitter()
        aaf.fit(rossi, event_col='week', duration_col='arrest')

        misorder = ['age', 'race', 'wexp', 'mar', 'paro', 'prio', 'fin']
        natural_order = rossi.columns.drop(['week', 'arrest'])
        deleted_order = rossi.columns - ['week', 'arrest']
        assert_frame_equal(aaf.predict_median(rossi[natural_order]), aaf.predict_median(rossi[misorder]))
        assert_frame_equal(aaf.predict_median(rossi[natural_order]), aaf.predict_median(rossi[deleted_order]))

        aaf = AalenAdditiveFitter(fit_intercept=False)
        aaf.fit(rossi, event_col='week', duration_col='arrest')
        assert_frame_equal(aaf.predict_median(rossi[natural_order]), aaf.predict_median(rossi[misorder]))
        assert_frame_equal(aaf.predict_median(rossi[natural_order]), aaf.predict_median(rossi[deleted_order]))
Exemplo n.º 33
0
    def test_swapping_order_of_columns_in_a_df_is_okay(self):
        rossi = load_rossi()
        aaf = AalenAdditiveFitter()
        aaf.fit(rossi, event_col='week', duration_col='arrest')

        misorder = ['age', 'race', 'wexp', 'mar', 'paro', 'prio', 'fin']
        natural_order = rossi.columns.drop(['week', 'arrest'])
        deleted_order = rossi.columns - ['week', 'arrest']
        assert_frame_equal(aaf.predict_median(rossi[natural_order]), aaf.predict_median(rossi[misorder]))
        assert_frame_equal(aaf.predict_median(rossi[natural_order]), aaf.predict_median(rossi[deleted_order]))

        aaf = AalenAdditiveFitter(fit_intercept=False)
        aaf.fit(rossi, event_col='week', duration_col='arrest')
        assert_frame_equal(aaf.predict_median(rossi[natural_order]), aaf.predict_median(rossi[misorder]))
        assert_frame_equal(aaf.predict_median(rossi[natural_order]), aaf.predict_median(rossi[deleted_order]))
Exemplo n.º 34
0
def test_concordance_index_fast_is_same_as_slow():
    size = 100
    T = np.random.normal(size=size)
    P = np.random.normal(size=size)
    C = np.random.choice([0, 1], size=size)
    Z = np.zeros_like(T)

    # Hard to imagine these failing
    assert slow_cindex(T, Z, C) == fast_cindex(T, Z, C)
    assert slow_cindex(T, T, C) == fast_cindex(T, T, C)
    # This is the real test though
    assert slow_cindex(T, P, C) == fast_cindex(T, P, C)

    cp = CoxPHFitter()
    df = load_rossi()
    cp.fit(df, duration_col='week', event_col='arrest')

    T = cp.durations.values.ravel()
    P = -cp.predict_partial_hazard(cp.data).values.ravel()
    E = cp.event_observed.values.ravel()

    assert slow_cindex(T, P, E) == fast_cindex(T, P, E)
Exemplo n.º 35
0
def test_concordance_index_fast_is_same_as_slow():
    size = 100
    T = np.random.normal(size=size)
    P = np.random.normal(size=size)
    C = np.random.choice([0, 1], size=size)
    Z = np.zeros_like(T)

    # Hard to imagine these failing
    assert slow_cindex(T, Z, C) == fast_cindex(T, Z, C)
    assert slow_cindex(T, T, C) == fast_cindex(T, T, C)
    # This is the real test though
    assert slow_cindex(T, P, C) == fast_cindex(T, P, C)

    cp = CoxPHFitter()
    df = load_rossi()
    cp.fit(df, duration_col='week', event_col='arrest')

    T = cp.durations.values.ravel()
    P = -cp.predict_partial_hazard(cp.data).values.ravel()
    E = cp.event_observed.values.ravel()

    assert slow_cindex(T, P, E) == fast_cindex(T, P, E)
Exemplo n.º 36
0
def coxph_smoke():
    rossi = load_rossi()

    cph = CoxPHFitter()
    cph.fit(rossi, duration_col='week', event_col='arrest')

    cph.print_summary()

    rossiH2O = h2o.H2OFrame(rossi)
    cphH2O = H2OCoxProportionalHazardsEstimator(stop_column="week")
    cphH2O.train(x=["age", "fin", "race", "wexp", "mar", "paro", "prio"], y="arrest", training_frame=rossiH2O)

    assert cphH2O.model_id != ""
    assert cphH2O.formula() == "Surv(week, arrest) ~ fin + age + race + wexp + mar + paro + prio", \
        "Expected formula to be 'Surv(week, arrest) ~ fin + age + race + wexp + mar + paro + prio' but it was " + cphH2O.formula()

    predH2O = cphH2O.predict(test_data=rossiH2O)
    assert len(predH2O) == len(rossi)

    metricsH2O = cphH2O.model_performance(rossiH2O)
    py_concordance = concordance_for_lifelines(cph)
    
    assert abs(py_concordance - metricsH2O.concordance()) < 0.001
Exemplo n.º 37
0
    def test_print_summary(self):

        import sys
        try:
            from StringIO import StringIO
        except:
            from io import StringIO

        saved_stdout = sys.stdout
        try:
            out = StringIO()
            sys.stdout = out

            cp = CoxPHFitter()
            df = load_rossi()
            cp.fit(df, duration_col='week', event_col='arrest')
            cp.print_summary()
            output = out.getvalue().strip().split()
            expected = """n=432, number of events=114

           coef  exp(coef)  se(coef)          z         p  lower 0.95  upper 0.95
fin  -1.897e-01  8.272e-01 9.579e-02 -1.981e+00 4.763e-02  -3.775e-01  -1.938e-03   *
age  -3.500e-01  7.047e-01 1.344e-01 -2.604e+00 9.210e-03  -6.134e-01  -8.651e-02  **
race  1.032e-01  1.109e+00 1.012e-01  1.020e+00 3.078e-01  -9.516e-02   3.015e-01
wexp -7.486e-02  9.279e-01 1.051e-01 -7.124e-01 4.762e-01  -2.809e-01   1.311e-01
mar  -1.421e-01  8.675e-01 1.254e-01 -1.134e+00 2.570e-01  -3.880e-01   1.037e-01
paro -4.134e-02  9.595e-01 9.522e-02 -4.341e-01 6.642e-01  -2.280e-01   1.453e-01
prio  2.639e-01  1.302e+00 8.291e-02  3.182e+00 1.460e-03   1.013e-01   4.264e-01  **
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Concordance = 0.640""".strip().split()
            for i in [0, 1, 2, -2, -1]:
                assert output[i] == expected[i]
        finally:
            sys.stdout = saved_stdout
Exemplo n.º 38
0
    def test_print_summary(self):

        import sys
        try:
            from StringIO import StringIO
        except:
            from io import StringIO

        saved_stdout = sys.stdout
        try:
            out = StringIO()
            sys.stdout = out

            cp = CoxPHFitter()
            df = load_rossi()
            cp.fit(df, duration_col='week', event_col='arrest')
            cp.print_summary()
            output = out.getvalue().strip().split()
            expected = """n=432, number of events=114

           coef  exp(coef)  se(coef)          z         p  lower 0.95  upper 0.95
fin  -1.897e-01  8.272e-01 9.579e-02 -1.981e+00 4.763e-02  -3.775e-01  -1.938e-03   *
age  -3.500e-01  7.047e-01 1.344e-01 -2.604e+00 9.210e-03  -6.134e-01  -8.651e-02  **
race  1.032e-01  1.109e+00 1.012e-01  1.020e+00 3.078e-01  -9.516e-02   3.015e-01
wexp -7.486e-02  9.279e-01 1.051e-01 -7.124e-01 4.762e-01  -2.809e-01   1.311e-01
mar  -1.421e-01  8.675e-01 1.254e-01 -1.134e+00 2.570e-01  -3.880e-01   1.037e-01
paro -4.134e-02  9.595e-01 9.522e-02 -4.341e-01 6.642e-01  -2.280e-01   1.453e-01
prio  2.639e-01  1.302e+00 8.291e-02  3.182e+00 1.460e-03   1.013e-01   4.264e-01  **
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Concordance = 0.640""".strip().split()
            for i in [0, 1, 2, -2, -1]:
                assert output[i] == expected[i]
        finally:
            sys.stdout = saved_stdout
Exemplo n.º 39
0
# -*- coding: utf-8 -*-
# weibull aft

if __name__ == "__main__":
    import pandas as pd
    import time

    from lifelines import WeibullAFTFitter
    from lifelines.datasets import load_rossi

    df = load_rossi()
    df = pd.concat([df] * 1)
    # df = df.reset_index()
    # df['week'] = np.random.exponential(1, size=df.shape[0])
    wp = WeibullAFTFitter()
    start_time = time.time()
    wp.fit(df, duration_col="week", event_col="arrest")
    print("--- %s seconds ---" % (time.time() - start_time))
    wp.print_summary()
Exemplo n.º 40
0
def test_cross_validator_with_stratified_cox_model():
    cf = CoxPHFitter(strata=["race"])
    utils.k_fold_cross_validation(cf, load_rossi(), duration_col="week", event_col="arrest")
Exemplo n.º 41
0
from lifelines.datasets import load_rossi
from pyBMA.CoxPHFitter import CoxPHFitter

# Replication of http://lifelines.readthedocs.io/en/latest/Survival%20Regression.html

bmaCox = CoxPHFitter()
print(bmaCox.fit(load_rossi(), "week", event_col= "arrest").summary)

# If you wanted to have a model with few variables
bmaCox = CoxPHFitter()
print(bmaCox.fit(load_rossi(), "week", event_col= "arrest", priors= [0.2]*7).summary)

# If you wanted to have a model with many variables
bmaCox = CoxPHFitter()
print(bmaCox.fit(load_rossi(), "week", event_col= "arrest", priors= [0.8]*7).summary)

# If you're very confident that race has no impact
# rossi columns:  fin 	age 	race 	wexp 	mar 	paro 	prio
bmaCox = CoxPHFitter()
print(bmaCox.fit(load_rossi(), "week", event_col= "arrest", priors= [0.5, 0.5, 0.1, 0.5, 0.5, 0.5, 0.5]).summary)

# If you're very confident that both age and race should be included
# rossi columns:  fin 	age 	race 	wexp 	mar 	paro 	prio
bmaCox = CoxPHFitter()
print(bmaCox.fit(load_rossi(), "week", event_col= "arrest", priors= [0.5, 0.9, 0.9, 0.5, 0.5, 0.5, 0.5]).summary)
Exemplo n.º 42
0
def test_cross_validator_with_stratified_cox_model():
    cf = CoxPHFitter(strata=['race'])
    utils.k_fold_cross_validation(cf, load_rossi(), duration_col='week', event_col='arrest')
Exemplo n.º 43
0
def rossi():
    return load_rossi()
Exemplo n.º 44
0
 def test_input_column_order_is_equal_to_output_hazards_order(self):
     rossi = load_rossi()
     cp = CoxPHFitter()
     expected = ['fin', 'age', 'race', 'wexp', 'mar', 'paro', 'prio']
     cp.fit(rossi, event_col='week', duration_col='arrest')
     assert list(cp.hazards_.columns) == expected
Exemplo n.º 45
0
 def test_strata_removes_variable_from_summary_output(self):
     df = load_rossi()
     cp = CoxPHFitter()
     cp.fit(df, 'week', 'arrest', strata=['race'])
     assert 'race' not in cp.summary.index