--- a +++ b/tests/plot/test_survival_analysis.py @@ -0,0 +1,62 @@ +from pathlib import Path + +import numpy as np + +import ehrapy as ep + +CURRENT_DIR = Path(__file__).parent +_TEST_IMAGE_PATH = f"{CURRENT_DIR}/_images" + + +def test_kaplan_meier(mimic_2, check_same_image): + mimic_2[:, ["censor_flg"]].X = np.where(mimic_2[:, ["censor_flg"]].X == 0, 1, 0) + groups = mimic_2[:, ["service_unit"]].X + adata_ficu = mimic_2[groups == "FICU"] + adata_micu = mimic_2[groups == "MICU"] + kmf_1 = ep.tl.kaplan_meier(adata_ficu, duration_col="mort_day_censored", event_col="censor_flg", label="FICU") + kmf_2 = ep.tl.kaplan_meier(adata_micu, duration_col="mort_day_censored", event_col="censor_flg", label="MICU") + fig, ax = ep.pl.kaplan_meier( + [kmf_1, kmf_2], + ci_show=[False, False, False], + color=["k", "r"], + xlim=[0, 750], + ylim=[0, 1], + xlabel="Days", + ylabel="Proportion Survived", + ) + + check_same_image( + fig=fig, + base_path=f"{_TEST_IMAGE_PATH}/kaplan_meier", + tol=2e-1, + ) + + fig, ax = ep.pl.kaplan_meier( + [kmf_1, kmf_2], + ci_show=[False, False, False], + color=["k", "r"], + xlim=[0, 750], + ylim=[0, 1], + xlabel="Days", + ylabel="Proportion Survived", + grid=True, + display_survival_statistics=True, + ) + + check_same_image( + fig=fig, + base_path=f"{_TEST_IMAGE_PATH}/kaplan_meier_table", + tol=2e-1, + ) + + +def test_coxph_forestplot(mimic_2, check_same_image): + adata_subset = mimic_2[:, ["mort_day_censored", "censor_flg", "gender_num", "afib_flg", "day_icu_intime_num"]] + ep.tl.cox_ph(adata_subset, duration_col="mort_day_censored", event_col="censor_flg") + fig, ax = ep.pl.cox_ph_forestplot(adata_subset, fig_size=(12, 3), t_adjuster=0.15, marker="o", size=2, text_size=14) + + check_same_image( + fig=fig, + base_path=f"{_TEST_IMAGE_PATH}/coxph_forestplot", + tol=2e-1, + )