Expected Incremental Benefit Plot


The intention of this vignette is to show how to plot different styles of expected incremental benefit (EIB) plots using the BCEA package.

Two interventions only

This is the simplest case, usually an alternative intervention (\(i=1\)) versus status-quo (\(i=0\)).

The plot is based on the incremental benefit as a function of the willingness to pay \(k\).

\[ IB(\theta) = k \Delta_e - \Delta_c \]

Using the set of \(S\) posterior samples, the EIB is approximated by

\[ \frac{1}{S} \sum_s^S IB(\theta_s) \]

where \(\theta_s\) is the realised configuration of the parameters \(\theta\) in correspondence of the \(s\)-th simulation.

R code

To calculate these in BCEA we use the bcea() function.


he <-
  bcea(eff, cost,                  
       ref = 2,                
       interventions = treats, 
       Kmax = 50000,
       plot = FALSE)

The default EIB plot gives a single diagonal line using base R.


The vertical line represents the break-even value corresponding to \(k^*\) indicating that above that threshold the alternative treatment is more cost-effective than the status-quo.

\[ k^* = \min\{ k : \mbox{EIB} > 0 \} \]

This will be at the point the curve crosses the x-axis.

The plot defaults to base R plotting. Type of plot can be set explicitly using the graph argument.

eib.plot(he, graph = "base")

eib.plot(he, graph = "ggplot2")

# ceac.plot(he, graph = "plotly")

Other plotting arguments can be specified such as title, line colours and theme.

         graph = "ggplot2",
         main = "my title",
         line = list(color = "green"),
         theme = theme_dark())

Credible interval can also be plotted using the plot.cri logical argument.

eib.plot(he, plot.cri = FALSE)

Multiple interventions

This situation is when there are more than two interventions to consider. Incremental values can be obtained either always against a fixed reference intervention, such as status quo, or for all comparisons simultaneously.

The curves are for pair-wise comparisons against a status-quo and the vertical lines and k* annotation is for simultaneous comparisons.

Without loss of generality, if we assume status quo intervention \(i=0\), then we wish to calculate

\[ \frac{1}{S} \sum_s^S IB(\theta^{i0}_s) \;\; \mbox{for each} \; i \]

The break-even points represent no preference between the two best interventions at \(k\).

\[ k^*_i = \min\{ k : \mbox{EIB}(\theta^i) > \mbox{EIB}(\theta^j) \} \]

Only the right-most of these will be where the curves cross the x-axis.

R code

This is the default plot for eib.plot() so we simply follow the same steps as above with the new data set.


treats <- c("No intervention", "Self-help",
            "Individual counselling", "Group counselling")
he <- bcea(eff, cost, ref = 4, interventions = treats, Kmax = 500)


For example, we can change the main title and the EIB line colours to green.

         graph = "base",
         main = "my title",
         line = list(color = "green"))

         graph = "ggplot2",
         main = "my title",
         line = list(color = "green"))

Credible interval can also be plotted as before. This isn’t recommended in this case since its hard to understand with so many lines.

eib.plot(he, plot.cri = TRUE)

Repositioning the legend.

For base R,

eib.plot(he, pos = FALSE) # bottom right

eib.plot(he, pos = c(0, 0))

eib.plot(he, pos = c(0, 1))

eib.plot(he, pos = c(1, 0))

eib.plot(he, pos = c(1, 1))

For ggplot2,

eib.plot(he, graph = "ggplot2", pos = c(0, 0))

eib.plot(he, graph = "ggplot2", pos = c(0, 1))

eib.plot(he, graph = "ggplot2", pos = c(1, 0))

eib.plot(he, graph = "ggplot2", pos = c(1, 1))

Define colour palette for different colour for each EIB line.

mypalette <- RColorBrewer::brewer.pal(3, "Accent")

         graph = "base",
         line = list(color = mypalette))

         graph = "ggplot2",
         line = list(color = mypalette))