CHF | D_CHF | D_OTH | |
---|---|---|---|
CHF | 0 | 0 | 0 |
D_CHF | 0 | 0 | 0 |
D_OTH | 0 | 0 | 0 |
CHF | D_CHF | D_OTH | |
---|---|---|---|
CHF | 0 | 0 | 0 |
D_CHF | 0 | 0 | 0 |
D_OTH | 0 | 0 | 0 |
CHF | D_CHF | D_OTH | |
---|---|---|---|
CHF | 0 | 0.125 | 0.006 |
D_CHF | 0 | 0.000 | 0.000 |
D_OTH | 0 | 0.000 | 0.000 |
CHF | Death_CHF | Death_Other | |
---|---|---|---|
CHF | -0.131 | 0.125 | 0.006 |
Death_CHF | 0 | 0.000 | 0.000 |
Death_Other | 0 | 0.000 | 0.000 |
Statistic | Evaluates | Range | Applicable Domain |
---|---|---|---|
Rate | \(\frac{\# \text{events in time period}}{\text{Total time period experienced by all subjects followed}}\) | 0 to \(\infty\) | Rate matrix |
Probability/risk | \(\frac{\# \text{events in time period}}{\# \text{people followed for time period}}\) | 0-1 | Probability matrix |
“Natural History” (i.e., “do nothing”) rate matrix:
CHF | Death_CHF | Death_Other | |
---|---|---|---|
CHF | -0.131 | 0.125 | 0.006 |
Death_CHF | 0.000 | 0.000 | 0.000 |
Death_Other | 0.000 | 0.000 | 0.000 |
“Natural History” rate matrix
CHF | Death_CHF | Death_Other | |
---|---|---|---|
CHF | -0.131 | 0.125 | 0.006 |
Death_CHF | 0.000 | 0.000 | 0.000 |
Death_Other | 0.000 | 0.000 | 0.000 |
“Natural History” rate matrix
CHF | Death_CHF | Death_Other | |
---|---|---|---|
CHF | -0.131 | 0.125 | 0.006 |
Death_CHF | 0.000 | 0.000 | 0.000 |
Death_Other | 0.000 | 0.000 | 0.000 |
“Strategy A” rate matrix
CHF | Death_CHF | Death_Other | |
---|---|---|---|
CHF | -0.106 | 0.1 | 0.006 |
Death_CHF | 0 | 0 | 0.000 |
Death_Other | 0 | 0 | 0.000 |
“Natural History” rate matrix (one-year timestep)
CHF | Death_CHF | Death_Other | |
---|---|---|---|
CHF | -0.131 | 0.125 | 0.006 |
Death_CHF | 0.000 | 0.000 | 0.000 |
Death_Other | 0.000 | 0.000 | 0.000 |
“Natural History” rate matrix (one-year timestep)
CHF | Death_CHF | Death_Other | |
---|---|---|---|
CHF | -0.131 | 0.125 | 0.006 |
Death_CHF | 0.000 | 0.000 | 0.000 |
Death_Other | 0.000 | 0.000 | 0.000 |
“Natural History” rate matrix (one-month timestep)
CHF | Death_CHF | Death_Other | |
---|---|---|---|
CHF | -0.0109 | 0.0104 | 5e-04 |
Death_CHF | 0 | 0 | 0 |
Death_Other | 0 | 0 | 0 |
\[ p = 1 - \exp(-rt) \] where \(r\) is the rate and \(t\) is the time-step.
The two approaches
The probability of transitioning from health state \(A\) to health state \(B\) is:
\[ p_{AB}= \frac{r_{AB}}{\sum_S r_{AS}}\big ( 1 - e^{-(\sum_S r_{AS}) t}\big ) \] where \(S\) captures all the health states (i.e., columns) in the transition rate matrix, and \(t\) is the time-step (e.g., \(t=1\) if 1 year, \(t=1/12\) if one month, etc.).
Let’s build on our chronic heart failure example from earlier. Here is the transition rate matrix we constructed:
CHF | D_CHF | D_OTH | |
---|---|---|---|
CHF | -0.131 | 0.125 | 0.006 |
D_CHF | 0.000 | 0.000 | 0.000 |
D_OTH | 0.000 | 0.000 | 0.000 |
Let’s now calculate the probability of transitioning from the CHF state to D_CHF (death from heart failure).
Annual probability of transitioning from CHF to death from CHF:
\[ p_{\text{CHF,D_CHF}}= \frac{r_{\text{CHF,D_CHF}}}{r_{\text{CHF,D_CHF}} + r_{\text{CHF,D_OTH}}}\big ( 1 - e^{-(r_{\text{CHF,D_CHF}} + r_{\text{CHF,D_OTH}}) \times 1}\big ) \]
We can find each of these rates in our transition rate matrix…
Annual probability of transitioning from CHF to death from CHF:
\[ p_{\text{CHF,D_CHF}}= \frac{\color{red}{0.125}}{\color{red}{0.125}+\color{green}{0.006}}\big ( 1 - e^{-(\color{red}{0.125}+\color{green}{0.006}) \times 1}\big ) = 0.1172 \]
CHF | D_CHF | D_OTH | |
---|---|---|---|
CHF | -0.131 | 0.125 | 0.006 |
D_CHF | 0.000 | 0 | 0 |
D_OTH | 0.000 | 0 | 0 |
Let’s now calculate the probability of transitioning from the CHF state to D_OTH (death from other causes).
Annual probability of transitioning from CHF to death from other causes:
\[ p_{\text{CHF,D_CHF}}= \frac{\color{green}{0.006}}{\color{red}{0.125}+\color{green}{0.006}}\big ( 1 - e^{-(\color{red}{0.125}+\color{green}{0.006}) \times 1}\big ) = 0.00562 \]
CHF | D_CHF | D_OTH | |
---|---|---|---|
CHF | -0.131 | 0.125 | 0.006 |
D_CHF | 0.000 | 0 | 0 |
D_OTH | 0.000 | 0 | 0 |
We now have the quantities needed to complete the first row of our transition rate matrix.
Recall that the diagonal elements of the transition probability matrix are just 1 minus the other transition probabilities.
Calculated transition probability matrix:
CHF | D_CHF | D_OTH | |
---|---|---|---|
CHF | 0.8772 | 0.1172 | 0.0056 |
D_CHF | 0.0000 | 1.0000 | 0.0000 |
D_OTH | 0.0000 | 0.0000 | 1.0000 |
The most technically correct approach for “embedding” a transition probability matrix is using the rate matrix exponential.
This is a matrix analogue to the cellwise rate-to-probability matrix process we just went through.
\[ \mathbf{P} = e^{\mathbf{R}} \]
Pros:
Embedding the transition probability matrix in this way ensures that the correct transition probabilities are calculated.
Without going into too many details, this approach ensures that some compound transitions are not “hidden” in the Markov cycle.
This ensures that our discrete time Markov model accurately represents the underlying continuous time process.
Cons:
A major drawback is that this approach can create some “jumpover” states that are seemingly inconsistent with the underlying model (see blog for more).
Accounting for “hidden” transitions and jumpover states requires augmenting the transition probability matrix (again, see blog for details).
Cons, cont’d:
Excel does not easily do matrix exponentiation, however you can use an approximation (we’ll do this in a case study).
Modern (free) statistical software can easily exponentiate a matrix:
Cons, cont’d:
Excel does not easily do matrix exponentiation, however you can use an approximation (we’ll do this in a case study).
Modern (free) statistical software can easily exponentiate a matrix:
For our chronic heart failure example, the exponentiated matrix yields a very similar answer to the first approach:
CHF | D_CHF | D_OTH | |
---|---|---|---|
CHF | 0.8772 | 0.1172 | 0.0056 |
D_CHF | 0.0000 | 1.0000 | 0.0000 |
D_OTH | 0.0000 | 0.0000 | 1.0000 |
By constructing our model using the “roots” of a transition rate matrix, we can incorporate disparate sources of information.
Facilitates country/region-specific background mortality.
Facilitates standardizing inputs measured at different time intervals.
Not all literature-based parameters operate on transition rates.
You will often find that the strategies you want to model have inputs based on odds ratios, relative risks, risk differences, etc.
Recall from earlier that we constructed two transition rate matrices:
These two rate matrices can be used to construct the following transition probability matrices:
m_P_NH =
CHF | D_CHF | D_OTH | |
---|---|---|---|
CHF | 0.8772 | 0.1172 | 0.0056 |
D_CHF | 0.0000 | 1.0000 | 0.0000 |
D_OTH | 0.0000 | 0.0000 | 1.0000 |
m_P_A =
CHF | D_CHF | D_OTH | |
---|---|---|---|
CHF | 0.8994 | 0.0949 | 0.0057 |
D_CHF | 0.0000 | 1.0000 | 0.0000 |
D_OTH | 0.0000 | 0.0000 | 1.0000 |
Important
Not all literature-based parameters operate on the rate scale. Some operate on the probability scale!
Statistic | Evaluates | Range | Applicable Domain |
---|---|---|---|
Rate | \(\frac{\# \text{events in time period}}{\text{Total time period experienced by all subjects followed}}\) | 0 to \(\infty\) | Rate matrix |
Hazard Ratio | \(\frac{\text{Hazard rate of outcome in exposed}}{\text{Hazard rate of outcome in unexposed}}\) | 0 to \(\infty\) | Rate matrix |
Probability/risk | \(\frac{\# \text{events in time period}}{\# \text{people followed for time period}}\) | 0-1 | Probability matrix |
Odds | \(\frac{\text{Probability of Outcome}}{1 - \text{Probability of Outcome}}\) | 0 to \(\infty\) | Probability matrix |
Odds Ratio | \(\frac{\text{Odds of outcome in exposed}}{\text{Odds of outcome in unexposed}}\) | 0 to \(\infty\) | Probability matrix |
Relative Risk | \(\frac{\text{Probability of outcome in exposed}}{\text{Probablity of outcome in unexposed}}\) | 0 to \(\infty\) | Probability matrix |
Risk Difference | \(\text{Probability of outcome in exposed}-\text{Probablity of outcome in unexposed}\) | -1 to 1 | Probability matrix |
Let’s turn back to our CHF example.
CHF | D_CHF | D_OTH | |
---|---|---|---|
CHF | 0.8772 | 0.1172 | 0.0056 |
D_CHF | 0.0000 | 1.0000 | 0.0000 |
D_OTH | 0.0000 | 0.0000 | 1.0000 |
CHF | D_CHF | D_OTH | |
---|---|---|---|
CHF | 0.8994 | 0.0949 | 0.0057 |
D_CHF | 0.0000 | 1.0000 | 0.0000 |
D_OTH | 0.0000 | 0.0000 | 1.0000 |
CHF | D_CHF | D_OTH | |
---|---|---|---|
CHF | 0.8819 | 0.1125 | 0.0056 |
D_CHF | 0.0000 | 1.0000 | 0.0000 |
D_OTH | 0.0000 | 0.0000 | 1.0000 |
Age | a_shape | b_rate |
---|---|---|
0 | 0.08386 | 8e-05 |
1 | 0.08630 | 7e-05 |
2 | 0.08644 | 8e-05 |
3 | 0.08653 | 8e-05 |
4 | 0.08658 | 9e-05 |
5 | 0.08661 | 1e-04 |
Age | a_shape | b_rate |
---|---|---|
40 | 0.0908323 | 0.0017132 |
As our cohort ages through the model (40, 41, 42, …), the background death rate at each subsequent age can be calculated using a simple formula.
Given the \(a\) and \(b\) values for a 40-year-old males, we can calcualte the death rate at any subsequent age as \[r_{e} = \frac{b}{a} (e^{at_2} - e^{at_1})\]
cycle | age | a_shape | b_rate | r_mort | p_death |
---|---|---|---|---|---|
0 | 40 | 0.0908 | 0.0017 | 0.0018 | 0.0018 |
1 | 41 | 0.0908 | 0.0017 | 0.0020 | 0.0020 |
2 | 42 | 0.0908 | 0.0017 | 0.0022 | 0.0021 |
3 | 43 | 0.0908 | 0.0017 | 0.0024 | 0.0024 |
4 | 44 | 0.0908 | 0.0017 | 0.0026 | 0.0026 |
5 | 45 | 0.0908 | 0.0017 | 0.0028 | 0.0028 |
cycle | age | a_shape | b_rate | r_mort | p_death |
---|---|---|---|---|---|
50 | 90 | 0.0908 | 0.0017 | 0.1683 | 0.1549 |
51 | 91 | 0.0908 | 0.0017 | 0.1843 | 0.1683 |
52 | 92 | 0.0908 | 0.0017 | 0.2018 | 0.1828 |
53 | 93 | 0.0908 | 0.0017 | 0.2210 | 0.1983 |
54 | 94 | 0.0908 | 0.0017 | 0.2420 | 0.2150 |
55 | 95 | 0.0908 | 0.0017 | 0.2650 | 0.2328 |
Source: Russell et al. (2016)
Source: Russell et al. (2016)
One option is to simply build a decision tree around events that occur at higher rates shortly after disease onset, surgery, drug initiation, etc.
The decision tree can follow people until they reach a “steady state” — then the Markov model can pick up from there.
Another option is “tunnel states” — simply expand the health state to follow people over the first few cycles of onset.
Tunnel states are “non-markovian,” so they need to be added once you have the transition probability matrix defined.
Transition rate matrix: \(\mathbf{R}\)
H | S | D | |
---|---|---|---|
H | -0.0408 | 0.0314 | 0.0094 |
S | 0.0000 | -0.0513 | 0.0513 |
D | 0.0000 | 0.0000 | 0.0000 |
Transition probability matrix: \(\exp(\mathbf{R})\)
H | S | D | |
---|---|---|---|
H | 0.96 | 0.03 | 0.01 |
S | 0.00 | 0.95 | 0.05 |
D | 0.00 | 0.00 | 1.00 |
Now suppose that the probability of death from disease varies by time since disease onset.
We can add tunnel states to our transition probability matrix to accomodate this.
H | S1 | S2 | S | D | |
---|---|---|---|---|---|
H | 0.96 | 0.03 | 0.00 | 0.00 | 0.01 |
S1 | 0.00 | 0.00 | 0.92 | 0.00 | 0.08 |
S2 | 0.00 | 0.00 | 0.00 | 0.94 | 0.06 |
S | 0.00 | 0.00 | 0.00 | 0.96 | 0.04 |
D | 0.00 | 0.00 | 0.00 | 0.00 | 1.00 |
cycle | H | S1 | S2 | S | S_total | D |
---|---|---|---|---|---|---|
0 | 1000 | 0 | 0 | 0 | 0 | 0 |
1 | 960 | 30 | 0 | 0 | 30 | 10 |
2 | 922 | 29 | 28 | 0 | 57 | 22 |
3 | 885 | 28 | 26 | 26 | 80 | 35 |
4 | 849 | 27 | 25 | 50 | 102 | 49 |
5 | 815 | 25 | 24 | 72 | 121 | 63 |
Essentially, this means working backwards!
Essentially, this means working backwards!
Let’s start with the example transition probability matrix from earlier:
m_P
=
H | S | D | |
---|---|---|---|
H | 0.96 | 0.03 | 0.01 |
S | 0.00 | 0.95 | 0.05 |
D | 0.00 | 0.00 | 1.00 |
To obtain the rate matrix (m_R
) from an existing transition probability matrix (m_P
):
To obtain the rate matrix (m_R
) from an existing transition probability matrix (m_P
):
m_R
=
H | S | D | |
---|---|---|---|
H | -0.040822 | 0.0314139 | 0.0094081 |
S | 0.000000 | -0.0512933 | 0.0512933 |
D | 0.000000 | 0.0000000 | 0.0000000 |