frontier
cea.frontier
Incremental cost-effectiveness analysis on the efficiency frontier.
Implements the standard decision-analytic algorithm: order interventions by cost, remove strongly dominated interventions (more costly and no more effective than another), then iteratively remove extendedly dominated interventions (whose ICER exceeds that of the next more effective intervention) until ICERs increase monotonically along the frontier.
Functions
| Name | Description |
|---|---|
| frontier | Interventions on the cost-effectiveness efficiency frontier, cheapest first. |
| icer_table | Full incremental analysis: dominance, extended dominance, and ICERs. |
frontier
cea.frontier.frontier(source, *, effect=None)Interventions on the cost-effectiveness efficiency frontier, cheapest first.
Example
import pandas as pd from heormodel.cea import frontier means = pd.DataFrame( … {“cost”: [0.0, 10.0, 5.0], “effect”: [0.0, 1.0, -1.0]}, … index=[“A”, “B”, “C”], … ) frontier(means) [‘A’, ‘B’]
icer_table
cea.frontier.icer_table(source, *, effect=None, interval=0.95)Full incremental analysis: dominance, extended dominance, and ICERs.
Parameters
| Name | Type | Description | Default |
|---|---|---|---|
| source | Outcomes | pd.DataFrame | probabilistic Outcomes (means are taken per intervention) or a per-intervention mean table indexed by intervention with columns cost and the effect column. |
required |
| effect | str | None |
Effect column name (defaults to the outcomes’ primary effect, or "effect" for plain tables). |
None |
| interval | float | None |
Central probability for the uncertainty interval, or None to omit intervals. When source is a probabilistic Outcomes with more than one iteration, each estimate gains _lo/_hi columns holding the two-sided interval across parameter draws (the default 0.95 gives a 95% interval, the 2.5th and 97.5th percentiles). A mean table or a single draw carries no intervals. |
0.95 |
Returns
| Name | Type | Description |
|---|---|---|
| pd.DataFrame | DataFrame indexed by intervention, sorted by cost, with columns | |
| pd.DataFrame | cost, effect, inc_cost, inc_effect, icer and |
|
| pd.DataFrame | status ("ND" on the frontier, "D" strongly dominated, |
|
| pd.DataFrame | "ED" extendedly dominated). Every intervention except the cheapest |
|
| pd.DataFrame | carries an incremental cost and effect against its comparator, the | |
| pd.DataFrame | cheapest frontier intervention still above it in cost order, so a | |
| pd.DataFrame | dominated intervention shows the negative incremental effect or excess | |
| pd.DataFrame | cost that marks it dominated. The ICER is a frontier quantity, filled | |
| pd.DataFrame | between adjacent frontier interventions and left blank for dominated | |
| pd.DataFrame | ones and for the cheapest frontier intervention. | |
| pd.DataFrame | With intervals, each of cost, effect, inc_cost, |
|
| pd.DataFrame | inc_effect and icer is followed by its _lo and _hi |
|
| pd.DataFrame | bounds. Dominance and the frontier are settled once on the mean costs | |
| pd.DataFrame | and effects; the intervals describe the spread of each measure for that | |
| pd.DataFrame | fixed frontier. The incremental measures are differences between | |
| pd.DataFrame | interventions, so their intervals are taken from the paired per-iteration | |
| pd.DataFrame | difference (cost of the intervention minus cost of its comparator |
|
| pd.DataFrame | in the same draw), not from the separate intervals of the two | |
| pd.DataFrame | interventions. The ICER interval comes from the per-draw ratio of paired | |
| pd.DataFrame | incremental cost to paired incremental effect; draws whose incremental | |
| pd.DataFrame | effect approaches zero make that ratio unstable, so read the incremental | |
| pd.DataFrame | cost and effect intervals alongside it. |
Example
import pandas as pd from heormodel.cea import icer_table means = pd.DataFrame( … {“cost”: [0.0, 100.0, 400.0], “effect”: [0.0, 0.5, 1.0]}, … index=[“A”, “B”, “D”], … ) t = icer_table(means) float(t.loc[“D”, “icer”]) 600.0