Pass further options to hpstat in yli.turnbull

This commit is contained in:
RunasSudo 2023-10-20 21:32:28 +11:00
parent 14c4054a47
commit 263f65f478
Signed by: RunasSudo
GPG Key ID: 7234E476BF21C61A

View File

@ -135,7 +135,7 @@ def calc_survfunc_kaplanmeier(time, status, ci, transform_x=None, transform_y=No
return xpoints, ypoints, None, None return xpoints, ypoints, None, None
def turnbull(df, time_left, time_right, by=None, *, ci=True, step_loc=0.5, transform_x=None, transform_y=None, nan_policy='warn', fig=None, ax=None): def turnbull(df, time_left, time_right, by=None, *, ci=True, step_loc=0.5, maxiter=None, fail_prob_tolerance=None, se_method=None, zero_tolerance=None, transform_x=None, transform_y=None, nan_policy='warn', fig=None, ax=None):
""" """
Generate a Turnbull estimator plot, which extends the KaplanMeier estimator to interval-censored observations Generate a Turnbull estimator plot, which extends the KaplanMeier estimator to interval-censored observations
@ -157,6 +157,14 @@ def turnbull(df, time_left, time_right, by=None, *, ci=True, step_loc=0.5, trans
:type ci: bool :type ci: bool
:param step_loc: Proportion along the length of each Turnbull interval to step down the survival function, e.g. 0 for left bound, 1 for right bound, 0.5 for interval midpoint :param step_loc: Proportion along the length of each Turnbull interval to step down the survival function, e.g. 0 for left bound, 1 for right bound, 0.5 for interval midpoint
:type step_loc: float :type step_loc: float
:param maxiter: Maximum number of iterations to attempt
:type maxiter: int
:param fail_prob_tolerance: Terminate algorithm when the absolute change in failure probability in each interval is less than this tolerance
:type fail_prob_tolerance: float
:param se_method: Method for computing standard error or survival probabilities (see hpstat *turnbull* documentation)
:type se_method: str
:param zero_tolerance: Threshold for dropping failure probability when se_method is "oim-drop-zeros"
:type zero_tolerance: float
:param transform_x: Function to transform x axis by :param transform_x: Function to transform x axis by
:type transform_x: callable :type transform_x: callable
:param transform_y: Function to transform y axis by :param transform_y: Function to transform y axis by
@ -187,11 +195,11 @@ def turnbull(df, time_left, time_right, by=None, *, ci=True, step_loc=0.5, trans
for group in groups.groups: for group in groups.groups:
subset = groups.get_group(group) subset = groups.get_group(group)
handle = plot_survfunc_turnbull(ax, subset[time_left], subset[time_right], ci, step_loc, transform_x, transform_y) handle = plot_survfunc_turnbull(ax, subset[time_left], subset[time_right], ci, step_loc, maxiter, fail_prob_tolerance, se_method, zero_tolerance, transform_x, transform_y)
handle.set_label('{} = {}'.format(by, group)) handle.set_label('{} = {}'.format(by, group))
else: else:
# No grouping # No grouping
plot_survfunc_turnbull(ax, df[time_left], df[time_right], ci, step_loc, transform_x, transform_y) plot_survfunc_turnbull(ax, df[time_left], df[time_right], ci, step_loc, maxiter, fail_prob_tolerance, se_method, zero_tolerance, transform_x, transform_y)
if time_units: if time_units:
ax.set_xlabel('{} + {} ({})'.format(time_left, time_right, time_units)) ax.set_xlabel('{} + {} ({})'.format(time_left, time_right, time_units))
@ -206,8 +214,8 @@ def turnbull(df, time_left, time_right, by=None, *, ci=True, step_loc=0.5, trans
return fig, ax return fig, ax
def plot_survfunc_turnbull(ax, time_left, time_right, ci, step_loc=0.5, transform_x=None, transform_y=None): def plot_survfunc_turnbull(ax, time_left, time_right, ci, step_loc=0.5, maxiter=None, fail_prob_tolerance=None, se_method=None, zero_tolerance=None, transform_x=None, transform_y=None):
xpoints, ypoints, ypoints0, ypoints1 = calc_survfunc_turnbull(time_left, time_right, ci, step_loc, transform_x, transform_y) xpoints, ypoints, ypoints0, ypoints1 = calc_survfunc_turnbull(time_left, time_right, ci, step_loc, maxiter, fail_prob_tolerance, se_method, zero_tolerance, transform_x, transform_y)
handle = ax.plot(xpoints, ypoints)[0] handle = ax.plot(xpoints, ypoints)[0]
@ -216,12 +224,23 @@ def plot_survfunc_turnbull(ax, time_left, time_right, ci, step_loc=0.5, transfor
return handle return handle
def calc_survfunc_turnbull(time_left, time_right, ci, step_loc=0.5, transform_x=None, transform_y=None): def calc_survfunc_turnbull(time_left, time_right, ci, step_loc=0.5, maxiter=None, fail_prob_tolerance=None, se_method=None, zero_tolerance=None, transform_x=None, transform_y=None):
# Estimate the survival function # Estimate the survival function
# Prepare arguments # Prepare arguments
# TODO: Pass through other arguments
hpstat_args = [config.hpstat_path, 'turnbull', '-', '--output', 'json'] hpstat_args = [config.hpstat_path, 'turnbull', '-', '--output', 'json']
if maxiter:
hpstat_args.append('--max-iterations')
hpstat_args.append(str(maxiter))
if fail_prob_tolerance:
hpstat_args.append('--fail-prob-tolerance')
hpstat_args.append(str(fail_prob_tolerance))
if se_method:
hpstat_args.append('--se-method')
hpstat_args.append(se_method)
if zero_tolerance:
hpstat_args.append('--zero-tolerance')
hpstat_args.append(str(zero_tolerance))
# Export data to CSV # Export data to CSV
csv_buf = io.StringIO() csv_buf = io.StringIO()