iHEA Congress, July 2023
A Novel Decision Model for Cardiovascular Disease (CVD) Prevention and Treatment in South Africa
Structuring a model to calculate YLLs and YLDs.
Approaches for calculating YLLs.
Incremental cost-effectiveness analysis based on DALYs
| Healthy | CVD | Dead | |
|---|---|---|---|
| Healthy | 0.97 | 0.019 | 0.011 |
| CVD | 0.00 | 0.896 | 0.104 |
| Dead | 0.00 | 0.000 | 1.000 |
| Healthy | CVD | Dead | |
|---|---|---|---|
| Healthy | 0.97 | 0.019 | 0.011 |
| CVD | 0.00 | 0.896 | 0.104 |
| Dead | 0.00 | 0.000 | 1.000 |
| Healthy | CVD | Dead | |
|---|---|---|---|
| Healthy | 0.97 | 0.019 | 0.011 |
| CVD | 0.00 | 0.896 | 0.104 |
| Dead | 0.00 | 0.000 | 1.000 |
| Healthy | CVD | Dead | tr_DeathCVD | |
|---|---|---|---|---|
| Healthy | 0.97 | 0.019 | 0.011 | . |
| CVD | 0 | 0.896 | 0.104 | . |
| Dead | 0 | 0 | 1 | . |
| tr_DeathCVD | . | . | . | . |
| Healthy | CVD | Dead | tr_DeathCVD | |
|---|---|---|---|---|
| Healthy | 0.97 | 0.019 | 0.011 | . |
| CVD | 0 | 0.896 | 0.104 | . |
| Dead | 0 | 0 | 1 | . |
| tr_DeathCVD | . | . | . | . |
The rows in green are the “Markovian” part of the matrix, while those in purple are in the “Non-Markovian” part.
| Healthy | CVD | Dead | |
|---|---|---|---|
| Healthy | -0.03 | 0.02 | 0.01 |
| CVD | 0.00 | -0.11 | 0.11 |
| Dead | 0.00 | 0.00 | 0.00 |
To begin, just add a row and column of zeros.
| Healthy | CVD | Dead | tr_DeathCVD | |
|---|---|---|---|---|
| Healthy | -0.03 | 0.02 | 0.01 | 0.000 |
| CVD | 0.00 | -0.11 | 0.11 | 0.000 |
| Dead | 0.00 | 0.00 | 0.00 | 0.000 |
| tr_DeathCVD | 0.00 | 0.00 | 0.00 | 0.000 |
r_DeathCVD in bubble diagram).| Healthy | CVD | Dead | tr_DeathCVD | |
|---|---|---|---|---|
| Healthy | -0.03 | 0.02 | 0.01 | 0.000 |
| CVD | 0.00 | -0.11 | 0.11 | 0.100 |
| Dead | 0.00 | 0.00 | 0.00 | 0.000 |
| tr_DeathCVD | 0.00 | 0.00 | 0.00 | 0.000 |
| Healthy | CVD | Dead | tr_DeathCVD | |
|---|---|---|---|---|
| Healthy | 0.9704 | 0.0187 | 0.0109 | 0.0010 |
| CVD | 0.0000 | 0.8958 | 0.1042 | 0.0947 |
| Dead | 0.0000 | 0.0000 | 1.0000 | 0.0000 |
| tr_DeathCVD | 0.0000 | 0.0000 | 0.0000 | 1.0000 |
Note that the Markovian (green) submatrix of the transition probability matrix still has rows that sum to one.
| Healthy | CVD | Dead | tr_DeathCVD | |
|---|---|---|---|---|
| Healthy | 0.9704 | 0.0187 | 0.0109 | 0.0010 |
| CVD | 0.0000 | 0.8958 | 0.1042 | 0.0947 |
| Dead | 0.0000 | 0.0000 | 1.0000 | 0.0000 |
| tr_DeathCVD | 0.0000 | 0.0000 | 0.0000 | 1.0000 |
Also note that the tracker allows for compound transitions (e.g., Healthy CVD Death from CVD in a single cycle).
| Healthy | CVD | Dead | tr_DeathCVD | |
|---|---|---|---|---|
| Healthy | 0.9704 | 0.0187 | 0.0109 | 0.0010 |
| CVD | 0.0000 | 0.8958 | 0.1042 | 0.0947 |
| Dead | 0.0000 | 0.0000 | 1.0000 | 0.0000 |
| tr_DeathCVD | 0.0000 | 0.0000 | 0.0000 | 1.0000 |
There is one more adaptation we need to make to calculate YLLs.
| Healthy | CVD | Dead | tr_DeathCVD | |
|---|---|---|---|---|
| Healthy | 0.9704 | 0.0187 | 0.0109 | 0.0010 |
| CVD | 0.0000 | 0.8958 | 0.1042 | 0.0947 |
| Dead | 0.0000 | 0.0000 | 1.0000 | 0.0000 |
| tr_DeathCVD | 0.0000 | 0.0000 | 0.0000 | 1.0000 |
After we embed, the tr_DeathCVD state becomes an absorbing state (i.e., people don’t leave it once they enter).
| Healthy | CVD | Dead | tr_DeathCVD | |
|---|---|---|---|---|
| Healthy | 0.9704 | 0.0187 | 0.0109 | 0.001 |
| CVD | 0.0000 | 0.8958 | 0.1042 | 0.095 |
| Dead | 0.0000 | 0.0000 | 1.0000 | 0.000 |
| tr_DeathCVD | 0.0000 | 0.0000 | 0.0000 | 1.000 |
tr_DeathCVD tr_DeathCVD cell, we have created an accumulator state.| Healthy | CVD | Dead | tr_DeathCVD | |
|---|---|---|---|---|
| Healthy | 0.97 | 0.019 | 0.011 | 0.001 |
| CVD | 0.00 | 0.896 | 0.104 | 0.095 |
| Dead | 0.00 | 0.000 | 1.000 | 0.000 |
| tr_DeathCVD | 0.00 | 0.000 | 0.000 | 0.000 |
| Healthy | CVD | Dead | tr_DeathCVD | |
|---|---|---|---|---|
| Healthy | 0.97 | 0.019 | 0.011 | 0.001 |
| CVD | 0.00 | 0.896 | 0.104 | 0.095 |
| Dead | 0.00 | 0.000 | 1.000 | 0.000 |
| tr_DeathCVD | 0.00 | 0.000 | 0.000 | 0.000 |
Transition State
Records the total number/percentage of cohort members who transition to a health state(s) in a given cycle. Used to calculate YLLs.
Accumulator State
Records the total number/percentage of cohort members who have transitioned to a health state(s) up to the cycle.
We now have our transition probability matrix with a non-Markovian tracker for recording deaths from CVD.
| Healthy | CVD | Dead | tr_DeathCVD | |
|---|---|---|---|---|
| Healthy | 0.97 | 0.019 | 0.011 | 0.001 |
| CVD | 0.00 | 0.896 | 0.104 | 0.095 |
| Dead | 0.00 | 0.000 | 1.000 | 0.000 |
| tr_DeathCVD | 0.00 | 0.000 | 0.000 | 0.000 |
\[ YLL_{x} = \frac{1}{r}\left(1-e^{-r E_{x}}\right) \] where \(r\) is the discount rate and \(E_x\) is remaining life expectancy at the time of death (x).
\[ YLL_{x} = \frac{1}{r}\left(1-e^{-r E_{x}}\right) \]
\[ YLD_x = D \left ( \frac{1}{r}\left(1-e^{-rL }\right) \right ) \] where \(r\) is the discount rate, \(D\) is the disability weight, and \(L\) is the number of years lived with disability.
YLL: Present Value of Remaining Life Expectancy at Time of Death
\(\frac{1}{r}\left(1-e^{-r E_{x}}\right)\)
tr_DeathCVD to track these one-time YLL payoffs.YLD: Adjusted Disability Weight for Each Cycle in the Disease State
\(D \left ( \frac{1}{r}\left(1-e^{-r}\right) \right )\)
CVD health state.| cycle | Healthy | CVD | Dead | tr_DeathCVD |
|---|---|---|---|---|
| 0 | 1 | 0 | 0 | 0 |
| 1 | 0.97 | 0.019 | 0.011 | 0.001 |
| ... | ... | ... | ... | ... |
| 19 | 0.566 | 0.11 | 0.324 | 0.011 |
| 20 | 0.549 | 0.11 | 0.342 | 0.011 |
tr_DeathCVD) that in the 20th cycle (age 75), 1.1% of the cohort dies due to CVD.| cycle | age | Healthy | CVD | Dead | tr_DeathCVD |
|---|---|---|---|---|---|
| 0 | 55 | 1 | 0 | 0 | 0 |
| 1 | 56 | 0.97 | 0.019 | 0.011 | 0.001 |
| ... | ... | ... | ... | ... | ... |
| 19 | 74 | 0.566 | 0.11 | 0.324 | 0.011 |
| 20 | 75 | 0.549 | 0.11 | 0.342 | 0.011 |
tr_DeathCVD) that in the 20th cycle (age 75), 1.1% of the cohort dies due to CVD.| cycle | age | Healthy | CVD | Dead | tr_DeathCVD |
|---|---|---|---|---|---|
| 0 | 55 | 1 | 0 | 0 | 0 |
| 1 | 56 | 0.97 | 0.019 | 0.011 | 0.001 |
| ... | ... | ... | ... | ... | ... |
| 19 | 74 | 0.566 | 0.11 | 0.324 | 0.011 |
| 20 | 75 | 0.549 | 0.11 | 0.342 | 0.011 |
| Age | Life.Expectancy |
|---|---|
| ... | |
| 55 | 34.91 |
| 60 | 30.25 |
| 65 | 25.68 |
| 70 | 21.28 |
| 75 | 17.10 |
| 80 | 13.24 |
| ... |
With a 3% discount rate
\[ 13.379 = \frac{1}{0.03}\left(1-e^{-0.03* 17.10}\right) \]
| Cycle | Age | Healthy | CVD | Dead | tr_DeathCVD | LE_GBD | PV_LE_GBD |
|---|---|---|---|---|---|---|---|
| 0 | 55 | 1.000 | 0.000 | 0.000 | 0.000 | 34.915 | 21.639 |
| 1 | 56 | 0.970 | 0.019 | 0.011 | 0.001 | 34.915 | 21.639 |
| ... | ... | ... | ... | ... | ... | ... | ... |
| 20 | 75 | 0.549 | 0.110 | 0.342 | 0.011 | 17.104 | 13.379 |
| 21 | 76 | 0.533 | 0.108 | 0.359 | 0.011 | 17.104 | 13.379 |
| Cycle | Age | Healthy | CVD | Dead | tr_DeathCVD | LE_GBD | PV_LE_GBD | YLL |
|---|---|---|---|---|---|---|---|---|
| 0 | 55 | 1.000 | 0.000 | 0.000 | 0.000 | 34.915 | 21.639 | 0 |
| 1 | 56 | 0.970 | 0.019 | 0.011 | 0.001 | 34.915 | 21.639 | 0.022 |
| ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 20 | 75 | 0.549 | 0.110 | 0.342 | 0.011 | 17.104 | 13.379 | 0.147 |
| 21 | 76 | 0.533 | 0.108 | 0.359 | 0.011 | 17.104 | 13.379 | 0.147 |
| Sum of YLL |
|---|
| 4.1518 |
| Life Table Type | Example | Availability | Source |
|---|---|---|---|
| Exogenous | Global Burden of Disease Reference Life Table | Freely available online. | Global Burden of Disease Collaborative Network (2021) |
| Life Table Type | Example | Availability | Source |
|---|---|---|---|
| Exogenous | Global Burden of Disease Reference Life Table | Freely available online. | Global Burden of Disease Collaborative Network (2021) |
| Endogenous | South Africa Life Table | Available from GBD or country-specific vital statistics data. | Global Burden of Disease Collaborative Network (2020b) |
| Life Table Type | Example | Availability | Source |
|---|---|---|---|
| Exogenous | Global Burden of Disease Reference Life Table | Freely available online. | Global Burden of Disease Collaborative Network (2021) |
| Endogenous | South Africa Life Table | Available from GBD or country-specific vital statistics data. | Global Burden of Disease Collaborative Network (2020b) |
| Endogenous | Life Table Constructed from Modeled Cohort | Must be calculated using model itself. | Caswell and van Daalen (2021) |
Recall from earlier the cycle payoff is
\[ D \left ( \frac{1}{r}\left(1-e^{-r}\right) \right ) \]
\[ 0.070931 = 0.072 \left ( \frac{1}{0.03}\left(1-e^{-0.03}\right) \right ) \]
| Healthy | CVD | Dead | tr_DeathCVD |
|---|---|---|---|
| 1.000 | 0.000 | 0.000 | 0.000 |
| 0.970 | 0.019 | 0.011 | 0.001 |
| 0.942 | 0.035 | 0.023 | 0.003 |
| 0.914 | 0.049 | 0.037 | 0.004 |
| 0.887 | 0.061 | 0.052 | 0.005 |
| 0.861 | 0.071 | 0.068 | 0.007 |
| Healthy | CVD | Dead | tr_DeathCVD |
|---|---|---|---|
| 0 | 0.0709 | 0 | 0 |
| YLD_cycle |
|---|
| Healthy | CVD | Dead | tr_DeathCVD |
|---|---|---|---|
| 1.000 | 0.000 | 0.000 | 0.000 |
| 0.970 | 0.019 | 0.011 | 0.001 |
| 0.942 | 0.035 | 0.023 | 0.003 |
| 0.914 | 0.049 | 0.037 | 0.004 |
| 0.887 | 0.061 | 0.052 | 0.005 |
| 0.861 | 0.071 | 0.068 | 0.007 |
| Healthy | CVD | Dead | tr_DeathCVD |
|---|---|---|---|
| \(\quad\) | \(\quad\) | \(\quad\) | \(\quad\) |
| 0 | 0.0709 | 0 | 0 |
| YLD_cycle |
|---|
| \(\quad\) |
| 0.001 |
| Healthy | CVD | Dead | tr_DeathCVD |
|---|---|---|---|
| 1.000 | 0.000 | 0.000 | 0.000 |
| 0.970 | 0.019 | 0.011 | 0.001 |
| 0.942 | 0.035 | 0.023 | 0.003 |
| 0.914 | 0.049 | 0.037 | 0.004 |
| 0.887 | 0.061 | 0.052 | 0.005 |
| 0.861 | 0.071 | 0.068 | 0.007 |
| Healthy | CVD | Dead | tr_DeathCVD |
|---|---|---|---|
| \(\quad\) | \(\quad\) | \(\quad\) | \(\quad\) |
| \(\quad\) | \(\quad\) | \(\quad\) | \(\quad\) |
| 0 | 0.0709 | 0 | 0 |
| YLD_cycle |
|---|
| \(\quad\) |
| 0.001 |
| 0.002 |
| Healthy | CVD | Dead | tr_DeathCVD |
|---|---|---|---|
| 1.000 | 0.000 | 0.000 | 0.000 |
| 0.970 | 0.019 | 0.011 | 0.001 |
| 0.942 | 0.035 | 0.023 | 0.003 |
| 0.914 | 0.049 | 0.037 | 0.004 |
| 0.887 | 0.061 | 0.052 | 0.005 |
| 0.861 | 0.071 | 0.068 | 0.007 |
| Healthy | CVD | Dead | tr_DeathCVD |
|---|---|---|---|
| \(\quad\) | \(\quad\) | \(\quad\) | \(\quad\) |
| \(\quad\) | \(\quad\) | \(\quad\) | \(\quad\) |
| \(\quad\) | \(\quad\) | \(\quad\) | \(\quad\) |
| 0 | 0.0709 | 0 | 0 |
| YLD_cycle |
|---|
| \(\quad\) |
| 0.001 |
| 0.002 |
| 0.003 |
| Healthy | CVD | Dead | tr_DeathCVD |
|---|---|---|---|
| 1.000 | 0.000 | 0.000 | 0.000 |
| 0.970 | 0.019 | 0.011 | 0.001 |
| 0.942 | 0.035 | 0.023 | 0.003 |
| 0.914 | 0.049 | 0.037 | 0.004 |
| 0.887 | 0.061 | 0.052 | 0.005 |
| 0.861 | 0.071 | 0.068 | 0.007 |
| Healthy | CVD | Dead | tr_DeathCVD |
|---|---|---|---|
| \(\quad\) | \(\quad\) | \(\quad\) | \(\quad\) |
| \(\quad\) | \(\quad\) | \(\quad\) | \(\quad\) |
| \(\quad\) | \(\quad\) | \(\quad\) | \(\quad\) |
| \(\quad\) | \(\quad\) | \(\quad\) | \(\quad\) |
| \(\quad\) | \(\quad\) | \(\quad\) | \(\quad\) |
| 0 | 0.0709 | 0 | 0 |
| YLD_cycle |
|---|
| \(\quad\) |
| 0.001 |
| 0.002 |
| 0.003 |
| 0.004 |
| 0.005 |
Sum up across all cycles (and apply cycle adjustments) to yield total YLDs:
| YLD |
|---|
| 0.39961 |
DALYs is the sum of YLL and YLD:
| YLL | YLD | DALY |
|---|---|---|
| 6.638 | 0.4 | 7.037 |
If you do not want to discount YLLs and YLDs, the payoff values become much simpler
For this section, we’ll build on the simple CVD model and incorporate country- and time-specific CVD death rates.
This model is the basis for the Excel case study we’ll work through in a bit.
We’ll start with a model that uses United Kingdom CVD incidence and death data.
Basic model structure stays the same. For age a and country c:
Basic model structure stays the same. For age a and country c:
r_CVD[a,c] and CVD death rate r_DeathCVD[a,c] are from global burden of disease (GBD) data.r_Dead[a,c] based on cause (CVD)-deleted life table constructed from GBD life table data.Create a rate matrix for each strategy, including non-Markovian CVD death trackers to facilitate calculation of YLL.
Embed each transition probability matrix using the rate matrices.
Create a rate matrix for each strategy, including non-Markovian CVD death trackers.
Embed each transition probability matrix using the rate matrices.
Make sure that CVD death transition state is nonabsorbing!
| Strategy | Healthy | CVD | Dead | tr_DeathCVD |
|---|---|---|---|---|
| Natural History | 0 | 500 | 0 | 25000 |
| Prevention | 10 | 500 | 0 | 25000 |
| Treatment | 0 | 500 + 500 | 0 | 25000 |
| Prevention + Treatment | 10 | 500 + 500 | 0 | 25000 |
| Strategy | Healthy | CVD | Dead | tr_DeathCVD |
|---|---|---|---|---|
| Natural History | 0 | 0.04039 | 0 | PV of remaining life expectancy at time of death. |
| Prevention | 0 | 0.04039 | 0 | PV of remaining life expectancy at time of death. |
| Treatment | 0 | 0.04039 | 0 | PV of remaining life expectancy at time of death. |
| Prevention + Treatment | 0 | 0.04039 | 0 | PV of remaining life expectancy at time of death. |
Note: PV = present value.
Calculate cycle-specific cost and health outcomes.
Summarize total cost and health outcomes.
Calculate cycle-specific cost and health outcomes.
Summarise total cost and health outcomes.
Include discounting and cycle adjustments (e.g., half-cycle adjustment, Simpson’s rule, etc.).
| cycle | cycle_cost | discount_rate | cycle_correction | total_cost |
|---|---|---|---|---|
| 0 | 10.000 | 1.00000 | 0.00000 | 0.0000 |
| 1 | 10.064 | 0.97087 | 0.33333 | 3.2570 |
| 2 | 10.128 | 0.94260 | 0.66667 | 6.3645 |
| 3 | 10.192 | 0.91514 | 1.33333 | 12.4365 |
| 4 | 10.280 | 0.88849 | 0.66667 | 6.0889 |
| 5 | 10.367 | 0.86261 | 1.33333 | 11.9232 |
| cycle | cycle_cost | discount_rate | cycle_correction | total_cost |
|---|---|---|---|---|
| 0 | 0.00000 | 1.00000 | 0.00000 | 0.00000 |
| 1 | 0.15472 | 0.97087 | 0.33333 | 0.05007 |
| 2 | 0.30936 | 0.94260 | 0.66667 | 0.19440 |
| 3 | 0.46383 | 0.91514 | 1.33333 | 0.56596 |
| 4 | 0.67382 | 0.88849 | 0.66667 | 0.39912 |
| 5 | 0.88328 | 0.86261 | 1.33333 | 1.01590 |
Sum up across all cycles, and apply discounting and cycle adjustments …
| Strategy | Total Cost |
|---|---|
| natural_history | 589.16 |
| prevent | 785.93 |
| treat | 910.15 |
| prevent_treat | 1076.28 |
Sum up across all cycles, and apply discounting and cycle adjustments …
| Strategy | QALY |
|---|---|
| natural_history | 25.614 |
| prevent | 25.635 |
| treat | 25.621 |
| prevent_treat | 25.641 |
Sum up across all cycles, and apply discounting and cycle adjustments …
| Strategy | DALYs |
|---|---|
| natural_history | 0.11883 |
| prevent | 0.10785 |
| treat | 0.09819 |
| prevent_treat | 0.10820 |
| Strategy | Cost | DALYs | Inc. Cost | Inc. DALYs Averted | Inc. Cost per Inc. DALY Averted (ICER) | Status |
|---|---|---|---|---|---|---|
| natural_history | 589.16 | 0.11883 | ND | |||
| prevent | 785.93 | 0.10785 | 196.78 | 0.01098 | 17922 | ND |
| prevent_treat | 1076.28 | 0.10820 | 290.34 | 0.00966 | 30067 | ND |
| treat | 910.15 | 0.09819 | D |
| Strategy | Cost | DALYs | Inc. Cost | Inc. DALYs Averted | Inc. Cost per DALY Averted (xGDP) | Status |
|---|---|---|---|---|---|---|
| natural_history | 589.16 | 0.11883 | ND | |||
| prevent | 785.93 | 0.10785 | 196.78 | 0.01098 | 0.41375 | ND |
| prevent_treat | 1076.28 | 0.10820 | 290.34 | 0.00966 | 0.69411 | ND |
| treat | 910.15 | 0.09819 | D |
| Strategy | Cost | DALYs | Inc. Cost | Inc. DALYs Averted | ICER | Inc. Cost per DALY Averted (xGDP) | Status |
|---|---|---|---|---|---|---|---|
| natural_history | 674.85 | 0.13862 | ND | ||||
| prevent | 863.57 | 0.12602 | 188.72 | 0.01259 | 14988 | 1.2551 | ND |
| prevent_treat | 1177.03 | 0.12628 | 313.46 | 0.01123 | 27922 | 2.3383 | ND |
| treat | 1021.24 | 0.11480 | D |
Back to Website \(\quad \quad\) Download PDF