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