Cost-Effectiveness Efficiency Frontier

Introduction

The line connecting successive points on a cost-effectiveness plane which each represent the effect and cost associated with different treatment alternatives. The gradient of a line segment represents the ICER of the treatment comparison between the two alternatives represented by that segment. The cost-effectiveness frontier consists of the set of points corresponding to treatment alternatives that are considered to be cost-effective at different values of the cost-effectiveness threshold. The steeper the gradient between successive points on the frontier, the higher is the ICER between these treatment alternatives and the more expensive alternative would be considered cost-effective only when a high value of the cost-effectiveness threshold is assumed. Points not lying on the cost-effectiveness frontier represent treatment alternatives that are not considered cost-effective at any value of the cost-effectiveness threshold.

R code

To create the plots in BCEA we first call the bcea() function.

data(Smoking)

treats <- c("No intervention", "Self-help", "Individual counselling", "Group counselling")
bcea_smoke <- bcea(eff, cost, ref = 4, interventions = treats, Kmax = 500)
# all interventions
ceef.plot(bcea_smoke)
#> 
#> Cost-effectiveness efficiency frontier summary 
#> 
#> Interventions on the efficiency frontier:
#>                   Effectiveness   Costs Increase slope Increase angle
#> Self-help               0.28824  45.733         158.66         1.5645
#> Group counselling       0.72252 143.301         224.67         1.5663
#> 
#> Interventions not on the efficiency frontier:
#>                        Effectiveness  Costs     Dominance type
#> No intervention              0.00000  0.000 Extended dominance
#> Individual counselling       0.48486 94.919 Extended dominance


# subset
setComparisons(bcea_smoke) <- c(1,3)
ceef.plot(bcea_smoke)
#> 
#> Cost-effectiveness efficiency frontier summary 
#> 
#> Interventions on the efficiency frontier:
#>                        Effectiveness   Costs Increase slope Increase angle
#> Self-help                    0.48486  94.919         195.77         1.5657
#> Individual counselling       0.72252 143.301         203.57         1.5659
#> 
#> Interventions not on the efficiency frontier:
#>                 Effectiveness Costs     Dominance type
#> No intervention             0     0 Extended dominance


# check numbering and legend
setComparisons(bcea_smoke) <- c(3,1)
ceef.plot(bcea_smoke)
#> 
#> Cost-effectiveness efficiency frontier summary 
#> 
#> Interventions on the efficiency frontier:
#>                        Effectiveness   Costs Increase slope Increase angle
#> Self-help                    0.48486  94.919         195.77         1.5657
#> Individual counselling       0.72252 143.301         203.57         1.5659
#> 
#> Interventions not on the efficiency frontier:
#>                 Effectiveness  Costs     Dominance type
#> No intervention       0.48486 94.919 Extended dominance


setComparisons(bcea_smoke) <- c(3,2)
ceef.plot(bcea_smoke)
#> 
#> Cost-effectiveness efficiency frontier summary 
#> 
#> Interventions on the efficiency frontier:
#>                        Effectiveness  Costs Increase slope Increase angle
#> Individual counselling       0.43428 97.568         224.67         1.5663
#> 
#> Interventions not on the efficiency frontier:
#>                 Effectiveness  Costs     Dominance type
#> No intervention       0.19662 49.186 Extended dominance
#> Self-help             0.00000  0.000 Extended dominance


setComparisons(bcea_smoke) <- 1
ceef.plot(bcea_smoke)
#> 
#> Cost-effectiveness efficiency frontier summary 
#> 
#> Interventions on the efficiency frontier:
#>           Effectiveness Costs Increase slope Increase angle
#> Self-help       0.72252 143.3         198.33         1.5658
#> 
#> Interventions not on the efficiency frontier:
#>                 Effectiveness Costs     Dominance type
#> No intervention             0     0 Extended dominance


# add interventions back in
setComparisons(bcea_smoke) <- c(1,3)
ceef.plot(bcea_smoke)
#> 
#> Cost-effectiveness efficiency frontier summary 
#> 
#> Interventions on the efficiency frontier:
#>                        Effectiveness   Costs Increase slope Increase angle
#> Self-help                    0.48486  94.919         195.77         1.5657
#> Individual counselling       0.72252 143.301         203.57         1.5659
#> 
#> Interventions not on the efficiency frontier:
#>                 Effectiveness Costs     Dominance type
#> No intervention             0     0 Extended dominance

bcea_smoke <- bcea(eff, cost, ref = 4, interventions = treats, Kmax = 500)

# all interventions
ceef.plot(bcea_smoke, graph = "ggplot")
#> 
#> Cost-effectiveness efficiency frontier summary 
#> 
#> Interventions on the efficiency frontier:
#>                   Effectiveness   Costs Increase slope Increase angle
#> Self-help               0.28824  45.733         158.66         1.5645
#> Group counselling       0.72252 143.301         224.67         1.5663
#> 
#> Interventions not on the efficiency frontier:
#>                        Effectiveness  Costs     Dominance type
#> No intervention              0.00000  0.000 Extended dominance
#> Individual counselling       0.48486 94.919 Extended dominance


# subset
setComparisons(bcea_smoke) <- c(1,3)
ceef.plot(bcea_smoke, graph = "ggplot")
#> 
#> Cost-effectiveness efficiency frontier summary 
#> 
#> Interventions on the efficiency frontier:
#>                        Effectiveness   Costs Increase slope Increase angle
#> Self-help                    0.48486  94.919         195.77         1.5657
#> Individual counselling       0.72252 143.301         203.57         1.5659
#> 
#> Interventions not on the efficiency frontier:
#>                 Effectiveness Costs     Dominance type
#> No intervention             0     0 Extended dominance


# check numbering and legend
setComparisons(bcea_smoke) <- c(3,1)
ceef.plot(bcea_smoke, graph = "ggplot")
#> 
#> Cost-effectiveness efficiency frontier summary 
#> 
#> Interventions on the efficiency frontier:
#>                        Effectiveness   Costs Increase slope Increase angle
#> Self-help                    0.48486  94.919         195.77         1.5657
#> Individual counselling       0.72252 143.301         203.57         1.5659
#> 
#> Interventions not on the efficiency frontier:
#>                 Effectiveness  Costs     Dominance type
#> No intervention       0.48486 94.919 Extended dominance


setComparisons(bcea_smoke) <- c(3,2)
ceef.plot(bcea_smoke, graph = "ggplot")
#> 
#> Cost-effectiveness efficiency frontier summary 
#> 
#> Interventions on the efficiency frontier:
#>                        Effectiveness  Costs Increase slope Increase angle
#> Individual counselling       0.43428 97.568         224.67         1.5663
#> 
#> Interventions not on the efficiency frontier:
#>                 Effectiveness  Costs     Dominance type
#> No intervention       0.19662 49.186 Extended dominance
#> Self-help             0.00000  0.000 Extended dominance


setComparisons(bcea_smoke) <- 1
ceef.plot(bcea_smoke, graph = "ggplot")
#> 
#> Cost-effectiveness efficiency frontier summary 
#> 
#> Interventions on the efficiency frontier:
#>           Effectiveness Costs Increase slope Increase angle
#> Self-help       0.72252 143.3         198.33         1.5658
#> 
#> Interventions not on the efficiency frontier:
#>                 Effectiveness Costs     Dominance type
#> No intervention             0     0 Extended dominance


# add interventions back in
setComparisons(bcea_smoke) <- c(1,3)
ceef.plot(bcea_smoke, graph = "ggplot")
#> 
#> Cost-effectiveness efficiency frontier summary 
#> 
#> Interventions on the efficiency frontier:
#>                        Effectiveness   Costs Increase slope Increase angle
#> Self-help                    0.48486  94.919         195.77         1.5657
#> Individual counselling       0.72252 143.301         203.57         1.5659
#> 
#> Interventions not on the efficiency frontier:
#>                 Effectiveness Costs     Dominance type
#> No intervention             0     0 Extended dominance

Check legend position argument:

# base R
ceef.plot(bcea_smoke, pos = c(1,0))
#> 
#> Cost-effectiveness efficiency frontier summary 
#> 
#> Interventions on the efficiency frontier:
#>                        Effectiveness   Costs Increase slope Increase angle
#> Self-help                    0.48486  94.919         195.77         1.5657
#> Individual counselling       0.72252 143.301         203.57         1.5659
#> 
#> Interventions not on the efficiency frontier:
#>                 Effectiveness Costs     Dominance type
#> No intervention             0     0 Extended dominance

ceef.plot(bcea_smoke, pos = c(1,1))
#> 
#> Cost-effectiveness efficiency frontier summary 
#> 
#> Interventions on the efficiency frontier:
#>                        Effectiveness   Costs Increase slope Increase angle
#> Self-help                    0.48486  94.919         195.77         1.5657
#> Individual counselling       0.72252 143.301         203.57         1.5659
#> 
#> Interventions not on the efficiency frontier:
#>                 Effectiveness Costs     Dominance type
#> No intervention             0     0 Extended dominance


ceef.plot(bcea_smoke, pos = TRUE)
#> 
#> Cost-effectiveness efficiency frontier summary 
#> 
#> Interventions on the efficiency frontier:
#>                        Effectiveness   Costs Increase slope Increase angle
#> Self-help                    0.48486  94.919         195.77         1.5657
#> Individual counselling       0.72252 143.301         203.57         1.5659
#> 
#> Interventions not on the efficiency frontier:
#>                 Effectiveness Costs     Dominance type
#> No intervention             0     0 Extended dominance

ceef.plot(bcea_smoke, pos = FALSE)
#> 
#> Cost-effectiveness efficiency frontier summary 
#> 
#> Interventions on the efficiency frontier:
#>                        Effectiveness   Costs Increase slope Increase angle
#> Self-help                    0.48486  94.919         195.77         1.5657
#> Individual counselling       0.72252 143.301         203.57         1.5659
#> 
#> Interventions not on the efficiency frontier:
#>                 Effectiveness Costs     Dominance type
#> No intervention             0     0 Extended dominance


ceef.plot(bcea_smoke, pos = "topleft")
#> 
#> Cost-effectiveness efficiency frontier summary 
#> 
#> Interventions on the efficiency frontier:
#>                        Effectiveness   Costs Increase slope Increase angle
#> Self-help                    0.48486  94.919         195.77         1.5657
#> Individual counselling       0.72252 143.301         203.57         1.5659
#> 
#> Interventions not on the efficiency frontier:
#>                 Effectiveness Costs     Dominance type
#> No intervention             0     0 Extended dominance

ceef.plot(bcea_smoke, pos = "topright")
#> 
#> Cost-effectiveness efficiency frontier summary 
#> 
#> Interventions on the efficiency frontier:
#>                        Effectiveness   Costs Increase slope Increase angle
#> Self-help                    0.48486  94.919         195.77         1.5657
#> Individual counselling       0.72252 143.301         203.57         1.5659
#> 
#> Interventions not on the efficiency frontier:
#>                 Effectiveness Costs     Dominance type
#> No intervention             0     0 Extended dominance

ceef.plot(bcea_smoke, pos = "bottomleft")
#> 
#> Cost-effectiveness efficiency frontier summary 
#> 
#> Interventions on the efficiency frontier:
#>                        Effectiveness   Costs Increase slope Increase angle
#> Self-help                    0.48486  94.919         195.77         1.5657
#> Individual counselling       0.72252 143.301         203.57         1.5659
#> 
#> Interventions not on the efficiency frontier:
#>                 Effectiveness Costs     Dominance type
#> No intervention             0     0 Extended dominance

ceef.plot(bcea_smoke, pos = "bottomright")
#> 
#> Cost-effectiveness efficiency frontier summary 
#> 
#> Interventions on the efficiency frontier:
#>                        Effectiveness   Costs Increase slope Increase angle
#> Self-help                    0.48486  94.919         195.77         1.5657
#> Individual counselling       0.72252 143.301         203.57         1.5659
#> 
#> Interventions not on the efficiency frontier:
#>                 Effectiveness Costs     Dominance type
#> No intervention             0     0 Extended dominance


# ggplot2
ceef.plot(bcea_smoke, graph = "ggplot", pos = c(1,0))
#> 
#> Cost-effectiveness efficiency frontier summary 
#> 
#> Interventions on the efficiency frontier:
#>                        Effectiveness   Costs Increase slope Increase angle
#> Self-help                    0.48486  94.919         195.77         1.5657
#> Individual counselling       0.72252 143.301         203.57         1.5659
#> 
#> Interventions not on the efficiency frontier:
#>                 Effectiveness Costs     Dominance type
#> No intervention             0     0 Extended dominance

ceef.plot(bcea_smoke, graph = "ggplot", pos = c(1,1))
#> 
#> Cost-effectiveness efficiency frontier summary 
#> 
#> Interventions on the efficiency frontier:
#>                        Effectiveness   Costs Increase slope Increase angle
#> Self-help                    0.48486  94.919         195.77         1.5657
#> Individual counselling       0.72252 143.301         203.57         1.5659
#> 
#> Interventions not on the efficiency frontier:
#>                 Effectiveness Costs     Dominance type
#> No intervention             0     0 Extended dominance


ceef.plot(bcea_smoke, graph = "ggplot", pos = TRUE)
#> 
#> Cost-effectiveness efficiency frontier summary 
#> 
#> Interventions on the efficiency frontier:
#>                        Effectiveness   Costs Increase slope Increase angle
#> Self-help                    0.48486  94.919         195.77         1.5657
#> Individual counselling       0.72252 143.301         203.57         1.5659
#> 
#> Interventions not on the efficiency frontier:
#>                 Effectiveness Costs     Dominance type
#> No intervention             0     0 Extended dominance

ceef.plot(bcea_smoke, graph = "ggplot", pos = FALSE)
#> 
#> Cost-effectiveness efficiency frontier summary 
#> 
#> Interventions on the efficiency frontier:
#>                        Effectiveness   Costs Increase slope Increase angle
#> Self-help                    0.48486  94.919         195.77         1.5657
#> Individual counselling       0.72252 143.301         203.57         1.5659
#> 
#> Interventions not on the efficiency frontier:
#>                 Effectiveness Costs     Dominance type
#> No intervention             0     0 Extended dominance


ceef.plot(bcea_smoke, graph = "ggplot", pos = "top")
#> 
#> Cost-effectiveness efficiency frontier summary 
#> 
#> Interventions on the efficiency frontier:
#>                        Effectiveness   Costs Increase slope Increase angle
#> Self-help                    0.48486  94.919         195.77         1.5657
#> Individual counselling       0.72252 143.301         203.57         1.5659
#> 
#> Interventions not on the efficiency frontier:
#>                 Effectiveness Costs     Dominance type
#> No intervention             0     0 Extended dominance

ceef.plot(bcea_smoke, graph = "ggplot", pos = "bottom")
#> 
#> Cost-effectiveness efficiency frontier summary 
#> 
#> Interventions on the efficiency frontier:
#>                        Effectiveness   Costs Increase slope Increase angle
#> Self-help                    0.48486  94.919         195.77         1.5657
#> Individual counselling       0.72252 143.301         203.57         1.5659
#> 
#> Interventions not on the efficiency frontier:
#>                 Effectiveness Costs     Dominance type
#> No intervention             0     0 Extended dominance

ceef.plot(bcea_smoke, graph = "ggplot", pos = "left")
#> 
#> Cost-effectiveness efficiency frontier summary 
#> 
#> Interventions on the efficiency frontier:
#>                        Effectiveness   Costs Increase slope Increase angle
#> Self-help                    0.48486  94.919         195.77         1.5657
#> Individual counselling       0.72252 143.301         203.57         1.5659
#> 
#> Interventions not on the efficiency frontier:
#>                 Effectiveness Costs     Dominance type
#> No intervention             0     0 Extended dominance

ceef.plot(bcea_smoke, graph = "ggplot", pos = "right")
#> 
#> Cost-effectiveness efficiency frontier summary 
#> 
#> Interventions on the efficiency frontier:
#>                        Effectiveness   Costs Increase slope Increase angle
#> Self-help                    0.48486  94.919         195.77         1.5657
#> Individual counselling       0.72252 143.301         203.57         1.5659
#> 
#> Interventions not on the efficiency frontier:
#>                 Effectiveness Costs     Dominance type
#> No intervention             0     0 Extended dominance

Flipping plot

ceef.plot(bcea_smoke,
          flip = TRUE,
          dominance = FALSE,
          start.from.origins = FALSE,
          print.summary = FALSE,
          graph = "base")


ceef.plot(bcea_smoke,
          dominance = TRUE,
          start.from.origins = FALSE,
          pos = TRUE,
          print.summary = FALSE,
          graph = "ggplot2")

Start from origin or smallest (e,c).

ceef.plot(bcea_smoke,
          flip = TRUE,
          dominance = TRUE,
          start.from.origins = TRUE,
          print.summary = FALSE,
          graph = "base")


ceef.plot(bcea_smoke,
          dominance = TRUE,
          start.from.origins = TRUE,
          pos = TRUE,
          print.summary = FALSE,
          graph = "ggplot2")

Negative cost or effectiveness

data("Smoking")

cost[, 4] <- -cost[, 4]
bcea_smoke <- bcea(eff, cost, ref = 3, interventions = treats, Kmax = 500)

# all interventions
ceef.plot(bcea_smoke, graph = "ggplot")
#> Costs are negative, the frontier will not start from the origins
#> 
#> Cost-effectiveness efficiency frontier summary 
#> 
#> Interventions on the efficiency frontier:
#>                   Effectiveness  Costs Increase slope Increase angle
#> Group counselling         1.133 -143.3             NA             NA
#> 
#> Interventions not on the efficiency frontier:
#>                        Effectiveness    Costs     Dominance type
#> No treatment                 0.41051    0.000 Absolute dominance
#> Self-help                    0.69875   45.733 Absolute dominance
#> Individual counselling       1.13303 -143.301 Extended dominance

ceef.plot(bcea_smoke, graph = "base")
#> Costs are negative, the frontier will not start from the origins
#> 
#> Cost-effectiveness efficiency frontier summary 
#> 
#> Interventions on the efficiency frontier:
#>                   Effectiveness  Costs Increase slope Increase angle
#> Group counselling         1.133 -143.3             NA             NA
#> 
#> Interventions not on the efficiency frontier:
#>                        Effectiveness    Costs     Dominance type
#> No treatment                 0.41051    0.000 Absolute dominance
#> Self-help                    0.69875   45.733 Absolute dominance
#> Individual counselling       1.13303 -143.301 Extended dominance


ceef.plot(bcea_smoke, start.from.origins = TRUE, graph = "ggplot")
#> Costs are negative, the frontier will not start from the origins
#> 
#> Cost-effectiveness efficiency frontier summary 
#> 
#> Interventions on the efficiency frontier:
#>                   Effectiveness  Costs Increase slope Increase angle
#> Group counselling         1.133 -143.3             NA             NA
#> 
#> Interventions not on the efficiency frontier:
#>                        Effectiveness    Costs     Dominance type
#> No treatment                 0.41051    0.000 Absolute dominance
#> Self-help                    0.69875   45.733 Absolute dominance
#> Individual counselling       1.13303 -143.301 Extended dominance

ceef.plot(bcea_smoke, start.from.origins = TRUE, graph = "base")
#> Costs are negative, the frontier will not start from the origins
#> 
#> Cost-effectiveness efficiency frontier summary 
#> 
#> Interventions on the efficiency frontier:
#>                   Effectiveness  Costs Increase slope Increase angle
#> Group counselling         1.133 -143.3             NA             NA
#> 
#> Interventions not on the efficiency frontier:
#>                        Effectiveness    Costs     Dominance type
#> No treatment                 0.41051    0.000 Absolute dominance
#> Self-help                    0.69875   45.733 Absolute dominance
#> Individual counselling       1.13303 -143.301 Extended dominance


setComparisons(bcea_smoke) <- c(1,2)
ceef.plot(bcea_smoke, graph = "ggplot")
#> 
#> Cost-effectiveness efficiency frontier summary 
#> 
#> Interventions on the efficiency frontier:
#>                        Effectiveness  Costs Increase slope Increase angle
#> Self-help                    0.28824 45.733         158.66         1.5645
#> Individual counselling       0.48486 94.919         250.16         1.5668
#> 
#> Interventions not on the efficiency frontier:
#>              Effectiveness Costs     Dominance type
#> No treatment             0     0 Extended dominance

ceef.plot(bcea_smoke, graph = "base")
#> 
#> Cost-effectiveness efficiency frontier summary 
#> 
#> Interventions on the efficiency frontier:
#>                        Effectiveness  Costs Increase slope Increase angle
#> Self-help                    0.28824 45.733         158.66         1.5645
#> Individual counselling       0.48486 94.919         250.16         1.5668
#> 
#> Interventions not on the efficiency frontier:
#>              Effectiveness Costs     Dominance type
#> No treatment             0     0 Extended dominance


eff[, 3] <- -eff[, 3]
bcea_smoke <- bcea(eff, cost, ref = 3, interventions = treats, Kmax = 500)
ceef.plot(bcea_smoke, graph = "ggplot")
#> Costs and benefits are negative, the frontier will not start from the origins
#> 
#> Cost-effectiveness efficiency frontier summary 
#> 
#> Interventions on the efficiency frontier:
#>                   Effectiveness  Costs Increase slope Increase angle
#> Group counselling         1.133 -143.3             NA             NA
#> 
#> Interventions not on the efficiency frontier:
#>                        Effectiveness    Costs     Dominance type
#> No treatment                 0.41051    0.000 Absolute dominance
#> Self-help                    0.69875   45.733 Absolute dominance
#> Individual counselling       1.13303 -143.301 Extended dominance

ceef.plot(bcea_smoke, graph = "base")
#> Costs and benefits are negative, the frontier will not start from the origins
#> 
#> Cost-effectiveness efficiency frontier summary 
#> 
#> Interventions on the efficiency frontier:
#>                   Effectiveness  Costs Increase slope Increase angle
#> Group counselling         1.133 -143.3             NA             NA
#> 
#> Interventions not on the efficiency frontier:
#>                        Effectiveness    Costs     Dominance type
#> No treatment                 0.41051    0.000 Absolute dominance
#> Self-help                    0.69875   45.733 Absolute dominance
#> Individual counselling       1.13303 -143.301 Extended dominance



data("Smoking")
eff[, 3] <- -eff[, 3]
bcea_smoke <- bcea(eff, cost, ref = 3, interventions = treats, Kmax = 500)
ceef.plot(bcea_smoke, graph = "ggplot")
#> Benefits are negative, the frontier will not start from the origins
#> 
#> Cost-effectiveness efficiency frontier summary 
#> 
#> Interventions on the efficiency frontier:
#>                        Effectiveness   Costs Increase slope Increase angle
#> Individual counselling      -0.89536  94.919             NA             NA
#> Group counselling            1.13303 143.301         23.852         1.5289
#> 
#> Interventions not on the efficiency frontier:
#>              Effectiveness  Costs     Dominance type
#> No treatment       0.41051  0.000 Absolute dominance
#> Self-help          0.69875 45.733 Absolute dominance

ceef.plot(bcea_smoke, graph = "base")
#> Benefits are negative, the frontier will not start from the origins
#> 
#> Cost-effectiveness efficiency frontier summary 
#> 
#> Interventions on the efficiency frontier:
#>                        Effectiveness   Costs Increase slope Increase angle
#> Individual counselling      -0.89536  94.919             NA             NA
#> Group counselling            1.13303 143.301         23.852         1.5289
#> 
#> Interventions not on the efficiency frontier:
#>              Effectiveness  Costs     Dominance type
#> No treatment       0.41051  0.000 Absolute dominance
#> Self-help          0.69875 45.733 Absolute dominance