{predictNMB}
predictNMB Team:
{predictNMB}
{predictNMB}
Falls leads to about 0.04 lost Quality-Adjusted Life Years (QALYs) (Latimer et al. 2013) and has an approximate beta distribution of: \[\mathrm{B}(\alpha = 2.95, \beta = 32.25)\]
There are also additional healthcare costs of about $6669 (Morello et al. 2015) and follows an approximate gamma distribution of: \[\Gamma (\alpha = 22.05, \beta = 0.0033) \]
Fall prevention education…
The willingness-to-pay (WTP) for us is $28033 AUD
Current practice: Everyone gets the fall prevention intervention (treat-all approach).
Input | Distribution | R code |
---|---|---|
QALYs lost | \[\mathrm{B}(\alpha = 2.95, \beta = 32.25)\] | rbeta(n = 1, shape1 = 2.95, shape2 = 32.25) |
Healthcare costs | \[\Gamma (\alpha = 22.05, \beta = 0.0033) \] | rgamma(n = 1, shape = 22.05, rate = 0.0033) |
Treatment effect (hazard) | \[\exp(\mathcal{N}(\mu = -0.844, \sigma = 0.304)) \] | exp(rnorm(n = 1, mean = -0.844, sd = 0.304)) |
Treatment cost | $77.30 | - |
WTP | $28033 | - |
Calculations and code for using details in paper cited papers above is described in (Parsons et al. 2023). We used {fitdistrplus}
but you can also use a shiny app by Nicole White and Robin Blythe: ShinyPrior
(White and Blythe 2023).
We have a prediction model which has an AUC of about 0.8 and we want to know whether it’ll be worthwhile implementing it within a CDSS to reduce healthcare costs (giving people that are unlikely to fall the intervention at $77.3 a pop!)
We are currently in a geriatric ward where the fall rate is about 0.1 (1 in 10 admitted patients have a fall) but are also interested in implementing the same model in the acute care ward (fall rate = 0.03). Would we expect to make the same conclusion?
We think we can improve the performance of the model up to 0.95 with some extra effort by the models - would this change our conclusion?
validation_sampler <- get_nmb_sampler(
outcome_cost = function() rgamma(1, shape = 22.05, rate = 0.0033),
wtp = 28033,
qalys_lost = function() rbeta(1, shape1 = 2.95, shape2 = 32.25),
high_risk_group_treatment_effect = function() exp(rnorm(1, mean = -0.844, sd = 0.304)),
high_risk_group_treatment_cost = 77.3,
low_risk_group_treatment_effect = 0,
low_risk_group_treatment_cost = 0,
use_expected_values = FALSE
)
validation_sampler <- get_nmb_sampler(
outcome_cost = function() rgamma(1, shape = 22.05, rate = 0.0033),
wtp = 28033,
qalys_lost = function() rbeta(1, shape1 = 2.95, shape2 = 32.25),
high_risk_group_treatment_effect = function() exp(rnorm(1, mean = -0.844, sd = 0.304)),
high_risk_group_treatment_cost = 77.3,
low_risk_group_treatment_effect = 0,
low_risk_group_treatment_cost = 0,
use_expected_values = FALSE
)
training_sampler <- get_nmb_sampler(
outcome_cost = function() rgamma(1, shape = 22.05, rate = 0.0033),
wtp = 28033,
qalys_lost = function() rbeta(1, shape1 = 2.95, shape2 = 32.25),
high_risk_group_treatment_effect = function() exp(rnorm(1, mean = -0.844, sd = 0.304)),
high_risk_group_treatment_cost = 77.3,
low_risk_group_treatment_effect = 0,
low_risk_group_treatment_cost = 0,
use_expected_values = TRUE
)
cl <- makeCluster(detectCores() - 1)
primary_sim <- do_nmb_sim(
n_sims = 500,
n_valid = 10000,
sim_auc = 0.8,
event_rate = 0.1,
cutpoint_methods = c("all", "none", "youden", "value_optimising"),
fx_nmb_training = training_sampler,
fx_nmb_evaluation = validation_sampler,
show_progress = TRUE,
cl = cl
)
cl <- makeCluster(detectCores() - 1)
acute_care_sim <- do_nmb_sim(
n_sims = 500,
n_valid = 10000,
sim_auc = 0.8,
event_rate = 0.03,
cutpoint_methods = c("all", "none", "youden", "value_optimising"),
fx_nmb_training = training_sampler,
fx_nmb_evaluation = validation_sampler,
show_progress = TRUE,
cl = cl
)
see RWParsons/rmed2023-predictNMB/demo-code/cost-of-treatment-screen.R for code to make cost_screen
using screen_simulation_inputs()
!
{predictNMB}
@RexParsons8
RWParsons/venables-award-2023-preso
Value-optimising cutpoint
predictNMB