missingHE

A R package to handle missingness in health economic evaluations

missingHE is a R package aimed at providing some useful tools to analysts in order to handle missing outcome data under a Full Bayesian framework in economic evaluations. The package relies on the R package R2jags to implement Bayesian methods via the statistical software JAGS. The package allows to obtain inferences using Markov Chain Monte Carlo (MCMC) methods under a range of modelling approaches and missing data assumptions. The package also contains functions specifically defined to assess model fit and possible issues in model convergence as well as to summarise the main results from the economic analysis.

Missing data are iteratively imputed using data augmentation methods according to the type of model, distribution and missingness assumptions specified by the user using different arguments in the functions of the package. The posterior distribution of the main quantities of interest (e.g. some suitable measures of costs and clinical benefits) is then summarised to assess the cost-effectiveness of a new intervention ($t=2$) against a standard intervention ($t=1$).

missingHE produces plots which compares the observed and imputed values for both cost and benefit measures in each treatment intervention considered to detect possible concerns about the plausibility of the imputation methods. In addition, the output of missingHE cab be analysed using different funtions in the R package BCEA which produces a synthesis of the decision process given the current evidence and uncertainty, as well as several indicators that can be used to perform Probabilistic Sensitivity Analysis to parameter and model uncertainty.

Example of a graphical output from missingHE

Example

library(missingHE)
model.sel <- selection(data = MenSS, model.eff = e ~ u.0, model.cost = c ~ e, model.me = me ~ 1, model.mc = mc ~ 1, 
                       type = "MAR", n.chains = 2, n.iter = 10000, n.burnin = 1000, dist_e = "norm", dist_c = "norm")
summary(model.sel)
 Cost-effectiveness analysis summary 
 
 Comparator intervention: intervention 1 
 Reference intervention: intervention 2 
 
 Parameter estimates under MAR assumption
 
 Comparator intervention 
               mean     sd      LB      UB
mean.effects  0.874  0.017   0.846   0.901
mean.costs   238.34 52.432 153.541 325.355

 Reference intervention 
                  mean    sd      LB      UB
mean.effects.1   0.917 0.022   0.881   0.953
mean.costs.1   186.825 41.26 119.672 254.125

 Incremental results 
                   mean     sd       LB     UB
delta.effects     0.043  0.028   -0.003  0.089
delta.costs     -51.514 67.025 -162.862 58.327
ICER          -1198.431

News and updates about missingHE

The checks can be done by first setting the optional argument ppc = TRUE when fitting the model using one of the main function of the package. For example, when using selection to fit selection models you would have something like this:

model.sel <- selection(data = data, model.eff = e ~ age, model.cost = c ~ age + e, model.me = me ~ age, model.mc = mc ~ age, 
dist_e = "norm", dist_c = "gamma", type = "MAR", n.iter = 10000, ppc = TRUE)

Then you can use the function ppc to perform different types of posterior predictive checks that you can choose among a set of pre-specified types using the type argument. For example, if we want to compare histograms of the empirical and predictive distributions of the effectiveness variable in one arm (e.g. control), then we can type

ppc(model.sel, type = "histogram", outcome = "effects_arm1")

and we get something like this

Example of posterior predictive checks in missingHE

For example, we can choose to specify a selection model assuming a Bernoulli distribution for the effects (if this is a binary outcome) and a LogNormak distribution for the costs

model.sel <- selection(data = data, model.eff = e ~ age, model.cost = c ~ age + e, model.me = me ~ 1, model.mc = mc ~ 1, 
dist_e = "bern", dist_c = "lnorm", type = "MAR")
model.sel <- selection(data = data, model.eff = e ~ age + (age | site), model.cost = c ~ age + e + (age + e | site), 
model.me = me ~ age + (1 | site), model.mc = mc ~ age + (0 + age | site), 
dist_e = "norm", dist_c = "gamma", type = "MAR", n.iter = 10000, ppc = TRUE)

I borrowed this notation, alongside with a couple of internal functions, from the lme4 package. The terms inside the brackets on the left of the bar are the terms for which the random effects are assumed (these must also be included as fixed effects). The term on the right of the bar is the clustering variable over which the random effects are specified.

For example the formula + (age | site) specifies random effects for the intercept and age across the values of the site variable. It aslo possible to specify random slope only models (i.e. remove the random intercept) by adding the term 0 + inside the brackets on the left of the bar.

All functions in the package have been updated to take into account the possibility that random effects are specified and to perform diagnostic and posterior predictive checks based on the random effects if these are included. In addition, a new generic function called coef is now available to extract the fixed or random effect terms from the effectiveness and cost models for each type of model in missingHE. For example, we can extract summary statistics for the fixed effects from the fitted selection model by using the command

coef(model.sel, random = FALSE)

which prints something like this

$Comparator
$Comparator$Effects
              mean    sd  lower  upper
(Intercept)  4.520 2.128  1.694  7.584
age         -0.059 0.011 -0.081 -0.037

$Comparator$Costs
                mean      sd     lower    upper
(Intercept)  553.614 576.375  -412.631 2118.222
age           -9.534  32.682   -75.701   50.304
e           -934.280 428.726 -1749.524  -85.378


$Reference
$Reference$Effects
              mean    sd  lower upper
(Intercept) -1.294 2.381 -4.411 2.091
age          0.032 0.100 -0.094 0.155

$Reference$Costs
                mean      sd     lower    upper
(Intercept)  273.504 387.796  -349.418 1047.288
age           -9.138  36.223   -78.510   56.514
e           -264.332 421.044 -1094.129  571.148

If we set random = TRUE, then summary statistics for the random effects terms are printed.

Soon, this version will also be uploaded on CRAN as well. In the meantime, the pdf files of these vignettes can be accessed from my website.

Installation

There are two ways of installing missingHE. A stable version (currently 1.4.0) is packaged and available from CRAN. You can simply type on your R terminal

install.packages("missingHE")

The second way involves using the development version of missingHE, which is available from GitHub - this will usually be updated more frequently and may be continuously tested. On Windows machines, you need to install a few dependencies, including Rtools first, e.g. by running

pkgs <- c("R2jags","ggplot2","gridExtra","BCEA","ggmcmc","loo","Rtools","devtools", "utils")
repos <- c("https://cran.rstudio.com") 
install.packages(pkgs,repos=repos,dependencies = "Depends")

before installing the package using devtools:

devtools::install_github("AnGabrio/missingHE", build_vignettes = TRUE)

The optional argument build_vignettes = TRUE allows to install the vignettes of the package locally on your computer. These consist in brief tutorials to guid the user on how to use and customise the models in missingHE using different functions of the package. Once the package is installed, they can be accessed by using the command

utils::browseVignettes(package = "missingHE")

All models implemented in missingHE are written in the BUGS language using the software JAGS, which needs to be installed from its own repository and instructions for installations under different OS can be found online. Once installed, the software is called in missingHE via the R package R2jags. Note that the missingHE package is currently under active development and therefore it is advisable to reinstall the package directly from GitHub before each use to ensure that you are using the most updated version.