This model was developed by Philippe Beutels, Joke Bilcke and Lander Willem for illustration and teaching purposes only. Please make contact if you would like to use this model in any public way.
In the field of economic evaluation in general, it could be applicable to any intervention with effectiveness realised within one year (like many curative interventions). In the field of infectious disease, it would only be applicable to influenza, and only if vaccination targets a small proportion of the population that does not at the same time form a core transmitter group of the virus (e.g. it is unlikely to be suitable to model childhood influenza vaccination). Note that for most applications, practical use of this model would likely entail having separate, though similarly simple decision trees to obtain the unit cost estimates (implying that these cells would be intermediary outcomes, and that there would be additional input cells for each relevant stage of disease (for instance for the number of consultations, the unit costs per consultation, medication use, hospital days etc. for cases of pneumonia, and all other relevant disease stages)).
Note that the final output is independent of coverage and target group size, if fixed administration costs are set to 0. This is due to the exclusion of herd immunity effects in this model.
For further information, questions or comments please contact us.
The first step when creating a new R file is to specify a working
directory. You need to tell the R session where you want it to work. To
do this you use the command to “set the working directory” or
setwd()
.
You can label this working directory as ‘home’, and have other locations stored for plotting or for getting data. This location should be an existing folder on your computer. For example
If BCEA package is not installed yet, you can do so by
Once installed, you have to load the package(s) at the start of the R file. This is done using
The goal is to calculate the cost-effectiveness of a vaccination program for the elderly against flu, taking into account parameter uncertainty as specified below:
# set number of samples to include in the uncertainty analysis
Nsamples <- 5000
# set the random-number-generator seed to get exactly the same results each time you run the code
set.seed(698)
# population details
targetgroup <- 2500000 #people>65 years
life_expectancy <- rnorm(Nsamples,mean=12,sd=2) #in years
discount_rate <- 0.015
# disease burden
force_of_infection <- rbeta(Nsamples,4,96) #draw Nsamples randomly from a beta distribution with parameters 4 and 96
proportion_hospitalised <- rbeta(Nsamples,10,90)
casefatality_ratio <- rbeta(Nsamples,30,970)
# disease-related costs
cost_per_hospitalised_case <- rnorm(Nsamples,2000,100) #dollars
cost_per_nonhospitalised_case <- rnorm(Nsamples,100,5) #dollars
# program details
uptake_program <- 0.80
vaccine_efficacy <- rnorm(Nsamples,mean=0.6,sd=(0.7-0.5)/(2*1.96))
vaccine_price_per_dose <- 10 #dollars
admin_cost_per_dose <- rnorm(Nsamples,50,4) #dollars
fixed_program_costs <- 0 #dollars
# QALY
QALYslost_per_hospitalised_case <- rnorm(Nsamples,mean=0.018,sd=0.0018)
alpha_qaly_nonhosp <- (0.0082^2*(1-0.0082)/0.0018^2)-0.0082
QALYslost_per_nonhospitalised_case <- rbeta(Nsamples,alpha_qaly_nonhosp,alpha_qaly_nonhosp*(1-0.0082)/0.0082)
Now, propagate the uncertainty from the input parameters of the flu model into the outcome of your flu model. To start the health technology assessment, we calculate the vaccine cost per dose and the treatment cost per case, taking into account the proportion of cases that lead to hospitalization, the QALY lost per case, and the discounted life expectancy:
vaccine_cost_per_dose <- vaccine_price_per_dose + admin_cost_per_dose
treatment_cost_per_case <- cost_per_hospitalised_case * proportion_hospitalised +
(1-proportion_hospitalised) * cost_per_nonhospitalised_case
QALYslost_per_case <- QALYslost_per_hospitalised_case * proportion_hospitalised +
QALYslost_per_nonhospitalised_case * (1-proportion_hospitalised)
life_expectancy_disc <- rep(NA,Nsamples)
for (i in 1:Nsamples){
life_expectancy_disc[i] <- sum(1/((1+discount_rate)^(0:(life_expectancy[i]-1))))
}
Calculate the burden of disease with the program in place, along with the associated medical and program costs:
Calculate the burden of disease for the comparator without the program in place, including the medical costs:
Calculate the difference between the program and the comparator:
Calculate the incremental effectiveness ratios for infections, hospitalizations, and deaths averted. Warning, the expected ICER equals the expected incremental cost / average incremental effect. this is NOT the same as the average all ICER\(_i\) values!! Finally, calculate the incremental effectiveness ratios for life years saved:
# Calculate incremental effectiveness ratios
incr_cost_per_case_prevented <- mean(incr_total_costs) / mean(infections_averted)
incr_cost_per_hospitalisation_prevented <- mean(incr_total_costs) / mean(hospitalisations_averted)
incr_cost_per_death_averted <- mean(incr_total_costs) / mean(deaths_averted)
incr_cost_per_lifeyear_gained <- mean(incr_total_costs) / mean(lifeyearslost_averted)
incr_cost_per_lifeyear_gained_disc <- mean(incr_total_costs) / mean(lifeyearslost_averted_disc)
incr_costs_per_QALY_gained <- mean(incr_total_costs) / mean(QALY_gained)
incr_costs_per_QALY_gained_disc <- mean(incr_total_costs) / mean(QALY_gained_disc)
Show the results:
# combine results
# note: specify column names at once
ICER_values<-cbind(incr_cost_per_case_prevented = incr_cost_per_case_prevented,
incr_cost_per_hospitalisation_prevented = incr_cost_per_hospitalisation_prevented,
incr_cost_per_death_averted = incr_cost_per_death_averted,
incr_cost_per_lifeyear_gained = incr_cost_per_lifeyear_gained,
incr_cost_per_lifeyear_gained_disc = incr_cost_per_lifeyear_gained_disc,
incr_costs_per_QALY_gained = incr_costs_per_QALY_gained,
incr_costs_per_QALY_gained_disc = incr_costs_per_QALY_gained_disc)
# print rounded results
round(ICER_values)
## incr_cost_per_case_prevented incr_cost_per_hospitalisation_prevented
## [1,] 2227 22212
## incr_cost_per_death_averted incr_cost_per_lifeyear_gained
## [1,] 73688 6160
## incr_cost_per_lifeyear_gained_disc incr_costs_per_QALY_gained
## [1,] 8105 6007
## incr_costs_per_QALY_gained_disc
## [1,] 7842
Please note that there may be slight variations due to platform and R-version specific differences in random number generation.
Please note that the mean estimate for the incremental total cost per infection averted differs from the value we obtained when not accounting for uncertainty. This discrepancy could be due to extreme values in the ratio. Kindly review the following plots and estimates:
## [1] 3023.811
## [1] 2456.958
## [1] 2226.53
bcea()
function to obtain the cost-effectiveness
plane, the expected incremental net monetary benefit (INMB), the
cost-effectiveness acceptability curve (CEAC) and the expected value for
perfect information (EVPI):# inspect the documentation of the 'bcea()' function
?bcea
# Specify a matrix containing the clinical effectiveness for each intervention being considered.
# note: this needs to be specified as health gain (i.e. negative health loss)
ce_effects <- cbind(-comparator_QALYslost_disc,-program_QALYslost_disc)
# Specify a matrix containing the cost for each intervention being considered.
# note: this needs to be specified as health gain (i.e. negative health loss)
ce_costs <- cbind(comparator_totaldirectcosts,program_totaldirectcosts)
# Define the labels to be associated with each intervention.
interventions = c("No intervention","Vaccine program")
# Run the 'bcea()' function
m <- bcea(eff = ce_effects,
cost = ce_costs,
ref = 2, # the column of eff and cost considered to be the reference strategy.
interventions = interventions,
plot = T) #ref specifies to compare 'Vaccine program' to 'No intervention'
bcea()
function:##
## Cost-effectiveness analysis summary
##
## Reference intervention: Vaccine program
## Comparator intervention: No intervention
##
## Optimal decision: choose No intervention for k < 7900 and Vaccine program for k >= 7900
##
##
## Analysis for willingness to pay parameter k = 25000
##
## Expected net benefit
## No intervention -848207898
## Vaccine program -615870901
##
## EIB CEAC ICER
## Vaccine program vs No intervention 232336997 0.9358 7841.8
##
## Optimal intervention (max expected net benefit) for k = 25000: Vaccine program
##
## EVPI 1824648