CEACT implements cost-effectiveness analyses for two-arm clinical trials: observed incremental summaries, non-parametric bootstrap uncertainty, cost-effectiveness planes, cost-effectiveness acceptability curves (CEACs), net monetary benefit, and deterministic sensitivity analysis.
The package follows standard practice in trial-based economic evaluation, where patient-level costs and effects are observed alongside treatment allocation (Glick et al. 2014; Drummond et al. 2015).
Let \(C_i\) denote cost, \(E_i\) denote effect, and \(A_i \in \{0,1\}\) denote treatment assignment, with \(A_i=0\) for the reference group and \(A_i=1\) for treatment.
Mean costs and effects by arm are
\[ \bar{C}_a = \frac{1}{n_a}\sum_{i:A_i=a} C_i, \qquad \bar{E}_a = \frac{1}{n_a}\sum_{i:A_i=a} E_i. \]
Incremental cost and incremental effect are
\[ \Delta C = \bar{C}_1 - \bar{C}_0, \qquad \Delta E = \bar{E}_1 - \bar{E}_0. \]
When \(\Delta E \ne 0\), the incremental cost-effectiveness ratio is
\[ ICER = \frac{\Delta C}{\Delta E}. \]
Because ratios can be unstable when \(\Delta E\) is near zero, CEACT also uses net monetary benefit at willingness-to-pay threshold \(k\) (Stinnett and Mullahy 1998):
\[ INMB(k) = k\Delta E - \Delta C. \]
Treatment is cost-effective at threshold \(k\) when \(INMB(k)>0\). The CEAC is the probability of this event over an uncertainty distribution:
\[ CEAC(k) = Pr\{k\Delta E - \Delta C > 0\}. \]
CEACT estimates this probability from non-parametric bootstrap replicates (Efron and Tibshirani 1993), preserving treatment-arm sample sizes by stratified resampling. CEACs and planes are widely used to communicate decision uncertainty in cost-effectiveness studies (Fenwick et al. 2001; Briggs et al. 2002).
The example below first uses the trial_cea dataset
included with CEACT package. This patient-level dataset contains
treatment assignment, total costs, and QALYs for 500 trial participants
and is suitable for demonstrating the package workflow.
data("trial_cea")
trial <- trial_cea
head(trial)
#> id treat cost qaly dissev race blcost blqaly male group
#> 1 1 1 2439 0.76059 0.335 1 2113.3491 0.9943529 0 treatment
#> 2 2 0 2598 0.70727 0.302 1 508.5120 0.8351629 1 control
#> 3 3 0 6315 0.68618 0.405 0 2271.8215 0.7526733 0 control
#> 4 4 0 1332 0.44657 0.199 1 653.7864 0.8441091 1 control
#> 5 5 1 2972 0.66752 0.302 0 1438.7561 0.8653243 1 treatment
#> 6 6 0 3699 0.59028 0.447 0 1773.7224 1.0000000 0 controlobserved <- cea(cost + qaly ~ group, data = trial, ref = "control")
summary(observed)
#> Cost-Effectiveness Summary
#> Formula: cost + qaly ~ group
#> Reference group: control
#> Treatment group: treatment
#> Incremental cost: 25
#> Incremental effect: 0.042
#> ICER: 588.802
#>
#> Outcome Reference Treatment Difference
#> delta_cost Cost 3015 (SD 1582.802) 3040 (SD 1168.737) 25.000
#> delta_effect Effect 0.573 (SD 0.217) 0.615 (SD 0.205) 0.042
#> CI p.value
#> delta_cost [-219.54; 269.54] 0.8409
#> delta_effect [0.005; 0.08] 0.0251The observed treatment arm produces more QALYs with a small increase in mean cost. The ICER is the additional cost per additional QALY.
set.seed(42)
boot_res <- boot_icer(cost + qaly ~ group, data = trial, ref = "control",
R = 1000, ci.type = "perc")
summary(boot_res)
#> Metric Observed BootstrapMean StdError Bias
#> DeltaCost Delta Cost 25.000 22.690 122.813 -2.310
#> DeltaEffect Delta Effect 0.042 0.044 0.018 0.002
#> ICER ICER 588.802 729.717 10682.651 140.915
#> CI
#> DeltaCost [-221.62; 259.395]
#> DeltaEffect [0.007; 0.079]
#> ICER [-7579.75; 11119.446]The bootstrap distribution summarizes sampling uncertainty in \(\Delta C\), \(\Delta E\), and the ICER. For publication-quality analyses, the number of replications should generally be increased beyond this vignette if computation time allows (Willan and Briggs 2006).
Cost-effectiveness plane from stratified non-parametric bootstrap replicates. The red line is the willingness-to-pay threshold.
Most simulated replicates lie in the north-east quadrant, indicating higher cost and higher effect for treatment. Replicates below the threshold line are cost-effective at that threshold.
ceac_tbl <- compute_nmb_ceac(
boot_res,
wtp_range = seq(0, 50000, 5000)
)
ceac_tbl
#> WTP ENMB Prob_CE
#> 1 0 -25.0000 0.419
#> 2 5000 187.2954 0.882
#> 3 10000 399.5908 0.964
#> 4 15000 611.8862 0.979
#> 5 20000 824.1816 0.983
#> 6 25000 1036.4770 0.984
#> 7 30000 1248.7724 0.986
#> 8 35000 1461.0678 0.988
#> 9 40000 1673.3632 0.988
#> 10 45000 1885.6586 0.989
#> 11 50000 2097.9540 0.989Cost-effectiveness acceptability curve. The curve gives the bootstrap probability that treatment is cost-effective at each willingness-to-pay threshold.
The CEAC rises as the willingness-to-pay threshold increases because the treatment’s positive incremental effect receives more decision value. The curve should be interpreted as decision uncertainty, not as the expected size of the health benefit.
dsa_effect <- dsa_icer(
cost + qaly ~ group,
data = trial,
param = "qaly",
range = seq(0.50, 0.70, 0.025),
ref = "control",
metric = "INMB",
k = 20000
)
dsa_effect
#> Parameter INMB
#> 1 0.500 -1483.71762
#> 2 0.525 -983.71762
#> 3 0.550 -483.71762
#> 4 0.575 16.28238
#> 5 0.600 516.28238
#> 6 0.625 1016.28238
#> 7 0.650 1516.28238
#> 8 0.675 2016.28238
#> 9 0.700 2516.28238One-way deterministic sensitivity analysis varying treatment-arm effect.
This one-way analysis shows how the incremental net monetary benefit changes as the assumed treatment-arm effect changes. Such analyses are useful for checking which assumptions drive conclusions, but they do not replace probabilistic uncertainty analysis.
Define the reference and treatment arms before analysis.
Report \(\Delta C\), \(\Delta E\), ICER, and INMB at relevant thresholds.
Use bootstrap or model-based uncertainty methods for CEACs.
Interpret ICERs alongside the cost-effectiveness plane and net benefit.
Report the willingness-to-pay thresholds used for decision interpretation.