Learning objectives:

The Evans model is based on a simplified clinical scenario describing what might happen to a patient experiencing a migraine attack on a given day.

Two alternative treatments are compared: an oral dose of Sumatriptan and a combined oral dose of Caffeine and Ergotamine.

Following treatment administration, several possible clinical pathways may occur.

First, the patient may experience relief from migraine symptoms, defined as being free from pain within two hours of treatment. In many cases where relief occurs, the patient will not experience any further symptoms during that episode. However, in some cases the patient may initially obtain relief but subsequently experience a recurrence of migraine symptoms, requiring re-treatment, which is assumed to be effective.

If the initial treatment fails to provide relief, the patient may either remain at home and continue suffering from the migraine or seek medical care at a hospital Emergency Room (ER).

When the patient attends the ER, treatment may successfully relieve the migraine symptoms.

Alternatively, if the condition does not improve, the patient may be admitted to the hospital, representing the most severe and costly pathway in the model.

• The probability of conversion of a moderate or severe headache to a mild headache or no headache at all within 2 hours with (i) sumatriptan is 55.8%; and (ii) caffeine/ergotamine is 37.9%.

• The probability of having another attack within 48 hours after relief with (i) sumatriptan is 40.6%; and (ii) with caffeine/ergotamine is 29.7%

• If the medication does not relieve the migraine, the probability of going to the hospital emergency room is 8%

• If the treatment received in the emergency room does not relieve the migraine there is a 2% chance of hospitalization.

All costs are expressed in 1997 Canadian dollars (Can$)

• Sumatriptan Can$16.10

• Caffeine/ergotamine Can$1.32

• Emergency room Can$63.13

• Hospitalisation Can$1093

Decision Tree Representation of the Scenario

The model begins with a decision node representing the choice between

Following the treatment decision, the model includes chance nodes that represent the uncertainty associated with the patient’s clinical response.

The first chance node reflects whether the patient experiences pain relief within two hours or no relief after the initial treatment.

For patients who experience relief, the next stage considers whether the migraine episode resolves completely or whether the patient experiences a recurrence of symptoms, requiring re-treatment, leading to eventual symptom relief.

For patients who do not experience relief from the initial treatment, the model considers two possible pathways. The patient may either remain at home and continue suffering from the migraine or seek treatment at the hospital emergency room.

If the patient attends the emergency department, treatment may result in successful relief of symptoms or may require hospital admission, representing the most severe outcome in the decision tree.

Each pathway ultimately leads to a terminal node, which contains the associated costs and health outcomes of that particular sequence of events. The expected costs and outcomes for each treatment strategy are calculated by combining the costs and effects across all possible terminal nodes, weighted by their respective probabilities.

Two different outcomes:

  1. Attacks averted (cost-effectiveness analysis CEA)

  2. Quality-adjusted-life-years (QALY) (cost-utility analysis CUA)

               Expected Cost = Σ (Probability × Cost)
    
               Expected QALY = Σ (Probability × Utility × Time)

The economic evaluation then compares the two strategies using the incremental cost-effectiveness ratio (ICER).

Perform cost-Effectiveness analysis (CEA)

(Cost per attacks averted)

#==========================
# Migraine Decision Tree CE Model
#==========================

# Load package
library(rdecision)
library(dplyr)
library(flextable)

# NODES (V)
#--------------------------
# Decision Node
#--------------------------
d1 <- DecisionNode$new("Migraine")

# Chance Nodes
c_sumatriptan <- ChanceNode$new("c1")
c_relief_s <- ChanceNode$new("c2")
c_no_relief_s <- ChanceNode$new("c3")
c_emergency_s <- ChanceNode$new("c4")

c_caffeine <- ChanceNode$new("c5")
c_relief_c <- ChanceNode$new("c6")
c_no_relief_c <- ChanceNode$new("c7")
c_emergency_c <- ChanceNode$new("c8")


# Leaf Nodes for the five pathways for each treatment strategy:

# Sumatriptan strategy
t1 <- LeafNode$new("t1") # Success                  Attack averted
t2 <- LeafNode$new("t2") # Recurrence               Attack averted 
t3 <- LeafNode$new("t3") # Endure                   No relief
t4 <- LeafNode$new("t4") # ED Relief                No relief
t5 <- LeafNode$new("t5") # Hospital                 No relief

# Caffiene/ergotamine strategy
t6 <- LeafNode$new("t6")                          # Attack averted
t7 <- LeafNode$new("t7")                          # Attack averted
t8 <- LeafNode$new("t8")                          # No relief
t9 <- LeafNode$new("t9")                          # No relief
t10 <- LeafNode$new("t10")                        # No relief

# VERTICES (V) - 

V <- list(d1, c_sumatriptan, c_relief_s, c_no_relief_s, c_emergency_s, c_caffeine, c_relief_c, c_no_relief_c, c_emergency_c,
          t1, t2, t3, t4, t5, t6, t7, t8, t9, t10)

#--------------------------
# Edges (E)                  When Attacks were averted the "benefit = 1"
#--------------------------

a1<-Action$new(d1, c_sumatriptan, label = "Sumatriptan", cost = 16.10)
a2<-Action$new(d1, c_caffeine, label = "Caffeine", cost = 1.32)
  
# Sumatriptan Path
r1<-Reaction$new(c_sumatriptan, c_relief_s, p = 0.558, label = "Relief")
r2<-Reaction$new(c_sumatriptan, c_no_relief_s, p = 0.442, label = "No Relief")

r3<-Reaction$new(c_relief_s, t1, p = 0.594, label = "No recurrence", benefit = 1)            # Attack averted
r4<-Reaction$new(c_relief_s, t2, p = 0.406, label = "Recurrence", cost = 16.10, benefit = 1) # Attack averted even recurs again
r5<-Reaction$new(c_no_relief_s, t3, p = 0.92, label = "Endure")
r6<-Reaction$new(c_no_relief_s, c_emergency_s, p = 0.08, label = "ED")
r7<-Reaction$new(c_emergency_s, t4, p = 0.998, label = "Relief", cost = 63.13)
r8<-Reaction$new(c_emergency_s, t5, p = 0.002, label = "Hospital", cost = 1093.00)
  
# Caffeine Path
r9<-Reaction$new(c_caffeine, c_relief_c, p = 0.379, label = "Relief")
r10<-Reaction$new(c_caffeine, c_no_relief_c, p = 0.621, label = "No Relief")

r11<-Reaction$new(c_relief_c, t6, p = 0.703, label = "No recurrence", benefit = 1)
r12<-Reaction$new(c_relief_c, t7, p = 0.297, label = "Recurrence", cost = 1.32, benefit = 1)
r13<-Reaction$new(c_no_relief_c, t8, p = 0.92, label = "Endure")
r14<-Reaction$new(c_no_relief_c, c_emergency_c, p = 0.08, label = "ED")
r15<-Reaction$new(c_emergency_c, t9, p = 0.998, label = "Relief", cost = 63.13)
r16<-Reaction$new(c_emergency_c, t10, p = 0.002, label = "Hospital", cost = 1093.00)

E<- list(a1,a2,r1,r2,r3,r4,r5,r6,r7,r8,
         r9,r10,r11,r12,r13,r14,r15,r16)

#--------------------------
# Build Tree
#--------------------------
dt <- DecisionTree$new(V = V, E = E)
#--------------------------
# 6. Draw Tree 
#--------------------------
dt$draw()

#--------------------------
# Evaluate Expected Cost and effects (attacks averted)
#--------------------------
results <- dt$evaluate()

results %>% select(Migraine, Cost, Benefit) %>% flextable()

Migraine

Cost

Benefit

Caffeine

4.707209

0.379

Sumatriptan

22.052532

0.558

#--------------------------
# Incremental Cost-Effectiveness Ratio (ICER)
#--------------------------
inc_cost <- diff(results$Cost)
inc_benefit <- diff(results$Benefit)
ICER <- inc_cost / inc_benefit
ICER
## [1] 96.90124
cat("\nIncremental Cost:", inc_cost, "\n")
## 
## Incremental Cost: 17.34532
cat("Incremental effect:", inc_benefit, "\n")
## Incremental effect: 0.179
cat("ICER (Cost per attack averted):", ICER,"$Can" ,"\n")
## ICER (Cost per attack averted): 96.90124 $Can

Perform cost-utility analysis (CUA)

Cost per QALY

Utility as per Evans 1997 table IV

Perform cost-utility analysis (CUA)

#--------------------------
# Time Horizon (1 day)
#--------------------------
horizon <- as.difftime(1, units = "days")


# Leaf Nodes with utility (QALY) and interval
t1 <- LeafNode$new("t1", utility = 1, interval = horizon) # Success Sumatriptan
t2 <- LeafNode$new("t2", utility = 0.9, interval = horizon) # Recurrence Sumatriptan
t3 <- LeafNode$new("t3", utility = -0.3, interval = horizon) # Endures attack Sumatriptan
t4 <- LeafNode$new("t4", utility = 0.1, interval = horizon) # ED Relief Sumatriptan
t5 <- LeafNode$new("t5", utility = -0.30, interval = horizon) # Hospital Sumatriptan

t6 <- LeafNode$new("t6", utility = 1, interval = horizon) # Success Caffeine
t7 <- LeafNode$new("t7", utility = 0.9, interval = horizon) # Recurrence Caffeine
t8 <- LeafNode$new("t8", utility = -0.3, interval = horizon) # Endures attack Caffeine
t9 <- LeafNode$new("t9", utility = 0.1, interval = horizon) # ED Relief Caffeine
t10 <- LeafNode$new("t10", utility = -0.30, interval = horizon) # Hospital Caffeine

# Decision branches
a1<-Action$new(d1, c_sumatriptan, label = "Sumatriptan", cost = 16.10)
a2<-Action$new(d1, c_caffeine, label = "Caffeine/Ergotamine", cost = 1.32)
  
  # Sumatriptan Path
r1<-Reaction$new(c_sumatriptan, c_relief_s, p = 0.558, label = "Relief")
r2<-Reaction$new(c_sumatriptan, c_no_relief_s, p = 0.442, label = "No Relief")
r3<-Reaction$new(c_relief_s, t1, p = 0.594, label = "No recurrence")
r4<-Reaction$new(c_relief_s, t2, p = 0.406, label = "Recurrence", cost = 16.10)
r5<-Reaction$new(c_no_relief_s, t3, p = 0.92, label = "Endure")
r6<-Reaction$new(c_no_relief_s, c_emergency_s, p = 0.08, label = "ED")
r7<-Reaction$new(c_emergency_s, t4, p = 0.998, label = "Relief", cost = 63.13)
r8<-Reaction$new(c_emergency_s, t5, p = 0.002, label = "Hospital", cost = 1093.00)
  
  # Caffeine Path
r9<-Reaction$new(c_caffeine, c_relief_c, p = 0.379, label = "Relief")
r10<-Reaction$new(c_caffeine, c_no_relief_c, p = 0.621, label = "No Relief")
r11<-Reaction$new(c_relief_c, t6, p = 0.703, label = "No recurrence")
r12<-Reaction$new(c_relief_c, t7, p = 0.297, label = "Recurrence", cost = 1.32)
r13<-Reaction$new(c_no_relief_c, t8, p = 0.92, label = "Endure")
r14<-Reaction$new(c_no_relief_c, c_emergency_c, p = 0.08, label = "ED")
r15<-Reaction$new(c_emergency_c, t9, p = 0.998, label = "Relief", cost = 63.13)
r16<-Reaction$new(c_emergency_c, t10, p = 0.002, label = "Hospital", cost = 1093.00)



V <- list(
  d1, c_sumatriptan, c_relief_s, c_no_relief_s, c_emergency_s,
  c_caffeine, c_relief_c, c_no_relief_c, c_emergency_c,
  t1, t2, t3, t4, t5, t6, t7, t8, t9, t10)


E<- list(
  a1, a2, r1,r2,r3,r4,r5,r6,r7,r8,
  r9,r10,r11,r12,r13,r14,r15,r16
)

dt <- DecisionTree$new(V = V, E = E)
results <- dt$evaluate()
print(results)
##   Run            Migraine Probability      Cost Benefit   Utility         QALY
## 1   1 Caffeine/Ergotamine           1  4.707209       0 0.2012760 0.0005510635
## 2   1         Sumatriptan           1 22.052532       0 0.4168609 0.0011413030
inc_cost <- diff(results$Cost)
inc_qaly <- diff(results$QALY)
ICER <- inc_cost / inc_qaly
ICER
## [1] 29386.93
cat("\nIncremental Cost:", inc_cost, "\n")
## 
## Incremental Cost: 17.34532
cat("Incremental effect:", inc_qaly, "\n")
## Incremental effect: 0.0005902394
cat("Baseline ICER (Cost per QALY):", ICER,"$Can","\n")
## Baseline ICER (Cost per QALY): 29386.93 $Can

Conduct subgroup analysis

Severity of attack Attacks documented in randomized controlled trials were stratified according to whether they were moderate or severe, indicates that severity affects drug efficacy. An economic analysis was also carried out on these subgroup data.

We change only the branches of conversion based on severity subgroup, re-evaluate the expected values of costs, QALY, and ICER accordingly

Moderate attack ICER per QALY

Probability for relief from moderate attack is 0.773 for Sumatriptan and 0.59 with Caffiene/ergotamine

# Sumatriptan Path
r1<-Reaction$new(c_sumatriptan, c_relief_s, p = 0.773, label = "Relief")      
r2<-Reaction$new(c_sumatriptan, c_no_relief_s, p = 0.227, label = "No Relief")
  
  
# Caffeine Path
r9<-Reaction$new(c_caffeine, c_relief_c, p = 0.59, label = "Relief")
r10<-Reaction$new(c_caffeine, c_no_relief_c, p = 0.41, label = "No Relief")
  

E<- list(
  a1, a2, r1,r2,r3,r4,r5,r6,r7,r8,
  r9,r10,r11,r12,r13,r14,r15,r16
)

dt <- DecisionTree$new(V = V, E = E)
results<-dt$evaluate()
inc_cost_mod <- diff(results$Cost)
inc_qaly_mod <- diff(results$QALY)
ICER_mod <- inc_cost_mod / inc_qaly_mod
ICER_mod
## [1] 31214.55
cat("Moderate attack ICER (Cost per QALY):", ICER_mod,"$Can","\n")
## Moderate attack ICER (Cost per QALY): 31214.55 $Can

Severe attack ICER per QALY

# Sumatriptan Path
r1<-Reaction$new(c_sumatriptan, c_relief_s, p = 0.453, label = "Relief")
r2<-Reaction$new(c_sumatriptan, c_no_relief_s, p = 0.547, label = "No Relief")
# Caffeine Path
r9<-Reaction$new(c_caffeine, c_relief_c, p = 0.27, label = "Relief")
r10<-Reaction$new(c_caffeine, c_no_relief_c, p = 0.73, label = "No Relief")

E<- list(
  a1, a2, r1,r2,r3,r4,r5,r6,r7,r8,
  r9,r10,r11,r12,r13,r14,r15,r16
)

dt <- DecisionTree$new(V = V, E = E)
results<-dt$evaluate()
inc_cost_sev <- diff(results$Cost)
inc_qaly_sev <- diff(results$QALY)
ICER_sev <- inc_cost_sev / inc_qaly_sev
ICER_sev
## [1] 27483.76
cat("Severe attack ICER (Cost per QALY):", ICER_sev,"$Can","\n")
## Severe attack ICER (Cost per QALY): 27483.76 $Can

Conclusion:

From the health-departmental perspective, the use of oral Sumatriptan resulted in net costs for improved health outcomes. The cost-effectiveness ratio was $Can97 per attack aborted, and the cost utility ratio was $Can29 386 per QALY. This cost-utility ratio translates into moderate recommendation for adoption. This ICER lies within commonly accepted willingness-to-pay thresholds, suggesting that sumatriptan may be considered cost-effective.

Reference:

  1. https://doi.org/10.2165/00019053-199712050-00007 Evans KW, Boan JA, Evans JL, Shuaib A. Economic evaluation of oral sumatriptan compared with oral caffeine/ergotamine for migraine. Pharmacoeconomics. 1997 Nov;12(5):565-77. doi: 10.2165/00019053-199712050-00007. PMID: 10174323.

  2. https://hta-modelling.leeds.ac.uk/downloads/