Modeling a Simple Disease Process
00
Discuss pros and cons of decision modeling using decision trees vs. a formal deterministic model
Understand the components and structure of discrete time Markov models
Calculate Markov cycles by hand, using Markov bubble diagram
Apply methods for Markov cycle correction
01
Modeling a Simple Disease Process
02
Markov Models
03
Constructing a Markov Model
04
Dominance & extended dominance
05
Comparators
06
CEA thresholds
01
Remain Healthy
Become Sick
Death
Healthy
Sick
Death
Remaining healthy carries no utility decrement
(utility weight = 1.0 per cycle in healthy state)
Becoming sick carries a 0.25 utility decrement for the remainder of the person’s life (utility weight = 0.75)
Death carries a utility value of 0
Healthy
Sick
Death
There is no cost associated with remaining healthy.
Becoming sick incurs $1,000 / year in costs.
Becoming sick increases the risk of death by 300%.
There is no cost associated with death.
A country’s health institute is considering five preventive care strategies that reduce the risk of becoming sick:
| Strategy | Description | Cost |
|---|---|---|
| A | Standard of Care | $25/year |
| B | Additional 4% reduction in risk of becoming sick | $1,000/year |
| C | 12% reduction in risk | $3,100/year |
| D | 8% reduction in risk | $1,550/year |
| E | 8% reduction in risk | $5,000/year |



02
Common approach in decision analyses that adds additional flexibility.
The advantages of Markov models derive from their structure around mutually exclusive disease states.
These disease states represent the possible states or consequences of strategies or options under consideration.
Because there are a fixed number of disease states the population can be in, there is no need to model complex pathways, as we saw in the decision tree “explosion” a few slides back.
It is also common to pair a Markov model with a decision tree.1

It is also common to pair a Markov model with a decision tree.1


A simple decision tree is implicit in nearly every decision analysis.


Treatment A:

Treatment A:
Things should be made as simple as possible, but not simpler.
Albert Einstein
03
CYCLE
Minimum amount of time that any individual will spend in a state before possible transition to another state
1
Define the decision problem
2
Conceptualize the model
3
Parameterize the model
4
Calculate or define the transition probability matrix
5
Run the model
We defined the decision problem earlier in this lecture, so we’ll repeat the basic objectives briefly here.
Goal: model the cost-effectiveness of alternative strategies to prevent a disease from occurring.
| Strategy | Description | Cost |
|---|---|---|
| A | Standard of Care | $25/year |
| B | Additional 4% reduction in risk of becoming sick | $1,000/year |
| C | 12% reduction in risk | $3,100/year |
| D | 8% reduction in risk | $1,550/year |
| E | 8% reduction in risk | $5,000/year |
Two major steps:
Remain Healthy
Become Sick
Death
Remain Healthy
Become Sick
Death
State transition (“bubble”) diagrams are useful visualizations of a Markov model.
Diagram constructed using the Health State Transition Diagram Builder
Basic steps
Basic steps





The challenge of selecting an appropriate cycle length boils down to how we deal with competing risks.
The challenge of selecting an appropriate cycle length boils down to how we deal with competing risks.
| Pros | Cons |
|---|---|
| Can model repeated events | Competing risks are a challenge |
| Can model more complex + longitudinal clinical events | |
| Not computationally intensive; efficient to model and debug |
| Pros | Cons |
|---|---|
| Can model repeated events | Can only transition once in a given cycle |
| Can model more complex + longitudinal clinical events | Shortening the cycle can create computational challenges. |
| Not computationally intensive; efficient to model and debug |
More challenges …
More challenges …
More challenges …
| Pros | Cons |
|---|---|
| Can model repeated events | Can only transition once in a given cycle |
| Can model more complex + longitudinal clinical events | Shortening the cycle can create computational challenges. |
| Not computationally intensive; efficient to model and debug | Shortening cycle can cause “state explosion” if tunnel states are used |
3b.i. Source and define the base case values.
3b.ii. Source and define sources of uncertainty.
We defined many of the underlying parameters earlier in this lecture, so we’ll repeat them briefly here.
Each strategy has a different cost and impact on the likelihood of becoming sick.
| Strategy | Description | Cost |
|---|---|---|
| A | Standard of Care | $25/year |
| B | Additional 4% reduction in risk of becoming sick | $1,000/year |
| C | 12% reduction in risk | $3,100/year |
| D | 8% reduction in risk | $1,550/year |
| E | 8% reduction in risk | $5,000/year |
It is critical to follow a formal process for parameterizing your model.
It is critical to follow a formal process for parameterizing your model.
It is critical to follow a formal process for parameterizing your model.
It is critical to follow a formal process for parameterizing your model.
All of the above highlight the importance of adopting a formal process for naming and tracking the value, source, and uncertainty distribution of all model parameters in one place.
We recommend a structured approach based on parameter naming conventions and parameter tables.
Naming conventions:
Note: Only a subset of model parameters are shown in table.
| Parameter Table | ||||||
| param | base_case | formula | description | notes | distribution | source |
|---|---|---|---|---|---|---|
| n_age_init | 25.00 | Age at baseline | Modeling Parameter | |||
| n_age_max | 100.00 | Maximum age of followup | Modeling Parameter | |||
| u_H | 1.00 | Utility weight of healthy (H) | beta(shape1 = 200, shape2 = 3) | Leech et al. (2022) | ||
| u_S | 0.75 | Utility weight of sick (S) | beta(shape1 = 130, shape2 = 45) | Leech et al. (2022) | ||
| c_S | 1000.00 | Annual cost of sick (S) | gamma(shape = 44.4, scale = 22.5) | Graves et al. (2022) | ||
| c_trtA | 25.00 | Cost of treatment A | gamma(shape = 12.5, scale = 2) | Martin et al. (2022) | ||
| c_trtB | 1000.00 | Cost of treatment B | gamma(shape = 12, scale = 83.3) | Assumption | ||
| c_trtC | 3100.00 | Cost of treatment C | gamma(shape = 36.144, scale = 83) | Assumption | ||
| n_cycles | 75.00 | (n_age_max - n_age_init) | Time horizon | |||
param column is the short name of the parameter
Note: Only a subset of model parameters are shown in table.
print_table <- function(target) {
params_raw[rows_to_show,1:7] %>% gt() %>%
tab_header(title = "Parameter Table") %>%
sub_missing(missing_text="") %>%
tab_style(
style = list(
cell_fill(color = "#e1efda")
),
locations = cells_body(
rows = c(1:length(rows_to_show))
)
) %>%
tab_style(
style = list(
cell_fill(color = "#fce4d6")
),
locations = cells_body(
rows = c(length(rows_to_show))
)
) %>%
tab_style(
style = list(
cell_fill(color = "#ed7d31")
),
locations = cells_body(
columns = c(2),
rows = c(length(rows_to_show))
)
) %>%
tab_style(
style = list(
cell_borders(
sides = c("left","right"),
color = "darkred",
weight = px(2)
)),
locations = cells_body(
columns = c(target)
)
) %>%
tab_style(
style = list(
cell_borders(
sides = c("top"),
color = "darkred",
weight = px(2)
)),
locations = cells_body(
rows = c(1),
columns = c(target)
)
) %>%
tab_style(
style = list(
cell_borders(
sides = c("bottom"),
color = "darkred",
weight = px(2)
)),
locations = cells_body(
rows = length(rows_to_show),
columns = c(target)
)
)
}
print_table(1)| Parameter Table | ||||||
| param | base_case | formula | description | notes | distribution | source |
|---|---|---|---|---|---|---|
| n_age_init | 25.00 | Age at baseline | Modeling Parameter | |||
| n_age_max | 100.00 | Maximum age of followup | Modeling Parameter | |||
| u_H | 1.00 | Utility weight of healthy (H) | beta(shape1 = 200, shape2 = 3) | Leech et al. (2022) | ||
| u_S | 0.75 | Utility weight of sick (S) | beta(shape1 = 130, shape2 = 45) | Leech et al. (2022) | ||
| c_S | 1000.00 | Annual cost of sick (S) | gamma(shape = 44.4, scale = 22.5) | Graves et al. (2022) | ||
| c_trtA | 25.00 | Cost of treatment A | gamma(shape = 12.5, scale = 2) | Martin et al. (2022) | ||
| c_trtB | 1000.00 | Cost of treatment B | gamma(shape = 12, scale = 83.3) | Assumption | ||
| c_trtC | 3100.00 | Cost of treatment C | gamma(shape = 36.144, scale = 83) | Assumption | ||
| n_cycles | 75.00 | (n_age_max - n_age_init) | Time horizon | |||
base_case is the parameter value for the base case.
Note: Only a subset of model parameters are shown in table.
| Parameter Table | ||||||
| param | base_case | formula | description | notes | distribution | source |
|---|---|---|---|---|---|---|
| n_age_init | 25.00 | Age at baseline | Modeling Parameter | |||
| n_age_max | 100.00 | Maximum age of followup | Modeling Parameter | |||
| u_H | 1.00 | Utility weight of healthy (H) | beta(shape1 = 200, shape2 = 3) | Leech et al. (2022) | ||
| u_S | 0.75 | Utility weight of sick (S) | beta(shape1 = 130, shape2 = 45) | Leech et al. (2022) | ||
| c_S | 1000.00 | Annual cost of sick (S) | gamma(shape = 44.4, scale = 22.5) | Graves et al. (2022) | ||
| c_trtA | 25.00 | Cost of treatment A | gamma(shape = 12.5, scale = 2) | Martin et al. (2022) | ||
| c_trtB | 1000.00 | Cost of treatment B | gamma(shape = 12, scale = 83.3) | Assumption | ||
| c_trtC | 3100.00 | Cost of treatment C | gamma(shape = 36.144, scale = 83) | Assumption | ||
| n_cycles | 75.00 | (n_age_max - n_age_init) | Time horizon | |||
formula defines model parameter formulas for parameters that are functions of other model parameters.
Note: Only a subset of model parameters are shown in table.
| Parameter Table | ||||||
| param | base_case | formula | description | notes | distribution | source |
|---|---|---|---|---|---|---|
| n_age_init | 25.00 | Age at baseline | Modeling Parameter | |||
| n_age_max | 100.00 | Maximum age of followup | Modeling Parameter | |||
| u_H | 1.00 | Utility weight of healthy (H) | beta(shape1 = 200, shape2 = 3) | Leech et al. (2022) | ||
| u_S | 0.75 | Utility weight of sick (S) | beta(shape1 = 130, shape2 = 45) | Leech et al. (2022) | ||
| c_S | 1000.00 | Annual cost of sick (S) | gamma(shape = 44.4, scale = 22.5) | Graves et al. (2022) | ||
| c_trtA | 25.00 | Cost of treatment A | gamma(shape = 12.5, scale = 2) | Martin et al. (2022) | ||
| c_trtB | 1000.00 | Cost of treatment B | gamma(shape = 12, scale = 83.3) | Assumption | ||
| c_trtC | 3100.00 | Cost of treatment C | gamma(shape = 36.144, scale = 83) | Assumption | ||
| n_cycles | 75.00 | (n_age_max - n_age_init) | Time horizon | |||
description provides a text description of the parameter.
| Parameter Table | ||||||
| param | base_case | formula | description | notes | distribution | source |
|---|---|---|---|---|---|---|
| n_age_init | 25.00 | Age at baseline | Modeling Parameter | |||
| n_age_max | 100.00 | Maximum age of followup | Modeling Parameter | |||
| u_H | 1.00 | Utility weight of healthy (H) | beta(shape1 = 200, shape2 = 3) | Leech et al. (2022) | ||
| u_S | 0.75 | Utility weight of sick (S) | beta(shape1 = 130, shape2 = 45) | Leech et al. (2022) | ||
| c_S | 1000.00 | Annual cost of sick (S) | gamma(shape = 44.4, scale = 22.5) | Graves et al. (2022) | ||
| c_trtA | 25.00 | Cost of treatment A | gamma(shape = 12.5, scale = 2) | Martin et al. (2022) | ||
| c_trtB | 1000.00 | Cost of treatment B | gamma(shape = 12, scale = 83.3) | Assumption | ||
| c_trtC | 3100.00 | Cost of treatment C | gamma(shape = 36.144, scale = 83) | Assumption | ||
| n_cycles | 75.00 | (n_age_max - n_age_init) | Time horizon | |||
Note: Only a subset of model parameters are shown in table.
notes is an optional column where you add additional notes or context for the parameter.
Note: Only a subset of model parameters are shown in table.
| Parameter Table | ||||||
| param | base_case | formula | description | notes | distribution | source |
|---|---|---|---|---|---|---|
| n_age_init | 25.00 | Age at baseline | Modeling Parameter | |||
| n_age_max | 100.00 | Maximum age of followup | Modeling Parameter | |||
| u_H | 1.00 | Utility weight of healthy (H) | beta(shape1 = 200, shape2 = 3) | Leech et al. (2022) | ||
| u_S | 0.75 | Utility weight of sick (S) | beta(shape1 = 130, shape2 = 45) | Leech et al. (2022) | ||
| c_S | 1000.00 | Annual cost of sick (S) | gamma(shape = 44.4, scale = 22.5) | Graves et al. (2022) | ||
| c_trtA | 25.00 | Cost of treatment A | gamma(shape = 12.5, scale = 2) | Martin et al. (2022) | ||
| c_trtB | 1000.00 | Cost of treatment B | gamma(shape = 12, scale = 83.3) | Assumption | ||
| c_trtC | 3100.00 | Cost of treatment C | gamma(shape = 36.144, scale = 83) | Assumption | ||
| n_cycles | 75.00 | (n_age_max - n_age_init) | Time horizon | |||
distribution specifies the uncertainty distribution for the parameter. It is used for probabilistic sensitivity analyses, which we cover in our intermediate (week-long) workshop.
Note: Only a subset of model parameters are shown in table.
| Parameter Table | ||||||
| param | base_case | formula | description | notes | distribution | source |
|---|---|---|---|---|---|---|
| n_age_init | 25.00 | Age at baseline | Modeling Parameter | |||
| n_age_max | 100.00 | Maximum age of followup | Modeling Parameter | |||
| u_H | 1.00 | Utility weight of healthy (H) | beta(shape1 = 200, shape2 = 3) | Leech et al. (2022) | ||
| u_S | 0.75 | Utility weight of sick (S) | beta(shape1 = 130, shape2 = 45) | Leech et al. (2022) | ||
| c_S | 1000.00 | Annual cost of sick (S) | gamma(shape = 44.4, scale = 22.5) | Graves et al. (2022) | ||
| c_trtA | 25.00 | Cost of treatment A | gamma(shape = 12.5, scale = 2) | Martin et al. (2022) | ||
| c_trtB | 1000.00 | Cost of treatment B | gamma(shape = 12, scale = 83.3) | Assumption | ||
| c_trtC | 3100.00 | Cost of treatment C | gamma(shape = 36.144, scale = 83) | Assumption | ||
| n_cycles | 75.00 | (n_age_max - n_age_init) | Time horizon | |||
Note: Only a subset of model parameters are shown in table.
source provides the source for the parameter. It could be a published research article, an assumption, or just simply an unsourced modeling parameter (e.g., the starting age of the modeled cohort).
| Parameter Table | ||||||
| param | base_case | formula | description | notes | distribution | source |
|---|---|---|---|---|---|---|
| n_age_init | 25.00 | Age at baseline | Modeling Parameter | |||
| n_age_max | 100.00 | Maximum age of followup | Modeling Parameter | |||
| u_H | 1.00 | Utility weight of healthy (H) | beta(shape1 = 200, shape2 = 3) | Leech et al. (2022) | ||
| u_S | 0.75 | Utility weight of sick (S) | beta(shape1 = 130, shape2 = 45) | Leech et al. (2022) | ||
| c_S | 1000.00 | Annual cost of sick (S) | gamma(shape = 44.4, scale = 22.5) | Graves et al. (2022) | ||
| c_trtA | 25.00 | Cost of treatment A | gamma(shape = 12.5, scale = 2) | Martin et al. (2022) | ||
| c_trtB | 1000.00 | Cost of treatment B | gamma(shape = 12, scale = 83.3) | Assumption | ||
| c_trtC | 3100.00 | Cost of treatment C | gamma(shape = 36.144, scale = 83) | Assumption | ||
| n_cycles | 75.00 | (n_age_max - n_age_init) | Time horizon | |||
The transition probability matrix is a square matrix that defines the probability of transitioning from one health state to another health state in a single time step.
Constructing the matrix is a fairly technical, but fairly straightforward process.
| Healthy | Sick | Dead | |
|---|---|---|---|
| Healthy | 0.856 | 0.138 | 0.007 |
| Sick | 0 | 0.982 | 0.018 |
| Dead | 0 | 0 | 1 |
Health State Occupancy
\quad Transition Probability Matrix
Health State Occupancy \quad \quad
\quad Transition Probability Matrix
Health State Occupancy \quad \quad
\quad Transition Probability Matrix
\quad \quad \quad \quad \quad \quad \quad \quad
Health State Occupancy \quad \quad
\quad Transition Probability Matrix
\quad Health State Occupancy at End of Cycle
s =
P =
Health State Occupancy \quad \quad
\quad Transition Probability Matrix
\quad Health State Occupancy at End of Cycle
s =
P =
Health State Occupancy \quad \quad
\quad Transition Probability Matrix
\quad Health State Occupancy at End of Cycle
s =
H S D
1 0 0
P =
H S D
H 0.856 0.138 0.007
S 0.000 0.982 0.018
D 0.000 0.000 1.000
Health State Occupancy \quad \quad
\quad Transition Probability Matrix
\quad Health State Occupancy at End of Cycle
s =
H S D
1 0 0
P =
H S D
H 0.856 0.138 0.007
S 0.000 0.982 0.018
D 0.000 0.000 1.000
H S D
H 0.856 0.138 0.007
S 0.000 0.982 0.018
D 0.000 0.000 1.000
\quad Health State Occupancy at End of Cycle
Health State Occupancy Over Ten Cycles
cycle H S D
0 1.00000 0.00000 0.000000
1 0.85600 0.13800 0.007000
2 0.73274 0.25364 0.015476
3 0.62722 0.35020 0.025171
4 0.53690 0.43045 0.035865
5 0.45959 0.49679 0.047371
6 0.39341 0.55127 0.059531
7 0.33676 0.59564 0.072207
8 0.28826 0.63139 0.085286
9 0.24675 0.65981 0.098669
10 0.21122 0.68198 0.112273
| Standard of Care | New Drug | |
|---|---|---|
| Healthy to Stage 1 | 5% | |
| Healthy to Stage 2 | 2% | |
| Healthy to Stage 3 | 1% | |
| Stage 1 to Stage 2 | 10% | |
| Stage 1 to Remission | 25% | |
| Stage 2 to Stage 1 | 5% | |
| Stage 2 to Stage 3 | 15% | |
| Stage 2 to Remission | 20% | |
| Stage 3 to Stage 2 | 5% | |
| Stage 3 to Death | 45% | |
| Remission to Stage 1 | 10% | 2% |
| Remission to Stage 2 | 5% | 1% |












| Cycle | Healthy | Sick | Dead |
|---|---|---|---|
| 0 | 1.000 | 0.000 | 0.000 |
| 1 | 0.856 | 0.138 | 0.007 |
| 2 | 0.732 | 0.253 | 0.015 |
| 3 | 0.626 | 0.349 | 0.025 |
| 4 | 0.536 | 0.429 | 0.035 |
| 5 | 0.458 | 0.495 | 0.046 |
| … | … | … | … |
| 75 (End) | 0 | 0.282 | 0.718 |
Example Markov Trace (two cycles):
| Cycle | Healthy | Sick | Dead |
|---|---|---|---|
| 0 | 1.000 | 0.000 | 0.000 |
| 1 | 0.856 | 0.138 | 0.007 |
| Cycle | Healthy | Sick | Dead | LY |
|---|---|---|---|---|
| 0 | 1.000 | 0.000 | 0.000 | |
| 1 | 0.856 | 0.138 | 0.007 |
What is the LY “payoff” for Cycle 0?
| Cycle | Healthy | Sick | Dead | LY |
|---|---|---|---|---|
| 0 | 1.000 | 0.000 | 0.000 | |
| 1 | 0.856 | 0.138 | 0.007 |
What is the LY “payoff” for Cycle 0?
| Cycle | Healthy | Sick | Dead | LY |
|---|---|---|---|---|
| 0 | 1.000 | 0.000 | 0.000 | 1.0 = 1.0 * 1.0 + 0.0 * 1.0 + 0.0 * 0.0 |
| 1 | 0.856 | 0.138 | 0.007 |
What is the LY “payoff” for Cycle 1?
| Cycle | Healthy | Sick | Dead | LY |
|---|---|---|---|---|
| 0 | 1.000 | 0.000 | 0.000 | 1.0 |
| 1 | 0.856 | 0.138 | 0.007 | 0.994 = 0.856 * 1.0 + 0.138 * 1.0 + 0.007 * 0.0 |
… and so on.
| Cycle | Healthy | Sick | Dead | LY |
|---|---|---|---|---|
| 0 | 1.000 | 0.000 | 0.000 | 1 |
| 1 | 0.856 | 0.138 | 0.007 | 0.993 |
| 2 | 0.732 | 0.253 | 0.015 | 0.985 |
| 3 | 0.626 | 0.349 | 0.025 | 0.975 |
| 4 | 0.536 | 0.429 | 0.035 | 0.965 |
| 5 | 0.458 | 0.495 | 0.046 | 0.954 |
| … | … | … | … | |
| 75 (End) | 0 | 0.282 | 0.718 | 0.282 |
What is the Cost “payoff” for Cycle 0?
| Cycle | Healthy | Sick | Dead | Cost |
|---|---|---|---|---|
| 0 | 1.000 | 0.000 | 0.000 | |
| 1 | 0.856 | 0.138 | 0.007 |
What is the Cost “payoff” for Cycle 0?
| Cycle | Healthy | Sick | Dead | Cost |
|---|---|---|---|---|
| 0 | 1.000 | 0.000 | 0.000 | 0 = 1.00 * 0 + 0.0 * 1000 + 0.0 * 0 |
| 1 | 0.856 | 0.138 | 0.007 |
What is the cost “payoff” for Cycle 1?
| Cycle | Healthy | Sick | Dead | Cost |
|---|---|---|---|---|
| 0 | 1.000 | 0.000 | 0.000 | 0 |
| 1 | 0.856 | 0.138 | 0.007 | 138 = 0.856*0+0.138*1000+0.007*0 |
… and so on.
Let’s look at the Markov trace and cycle outcomes for the Life Year outcome.
| Cycle | Healthy | Sick | Dead | LY (single cycle) |
|---|---|---|---|---|
| 0 | 1.000 | 0.000 | 0.000 | 1 |
| 1 | 0.856 | 0.138 | 0.007 | 0.993 |
| 2 | 0.732 | 0.253 | 0.015 | 0.985 |
| 3 | 0.626 | 0.349 | 0.025 | 0.975 |
| 4 | 0.536 | 0.429 | 0.035 | 0.965 |
| 5 | 0.458 | 0.495 | 0.046 | 0.954 |
| … | … | … | … | |
| 75 (End) | 0 | 0.282 | 0.718 | 0.282 |
We can create a new column that accumulates life years over each cycle.
| Cycle | Healthy | Sick | Dead | LY (single cycle) | LY (cumulative) |
|---|---|---|---|---|---|
| 0 | 1.000 | 0.000 | 0.000 | 1 | 1 |
| 1 | 0.856 | 0.138 | 0.007 | 0.993 | 1 + 0.993 = 1.993 |
| 2 | 0.732 | 0.253 | 0.015 | 0.985 | |
| 3 | 0.626 | 0.349 | 0.025 | 0.975 | |
| 4 | 0.536 | 0.429 | 0.035 | 0.965 | |
| 5 | 0.458 | 0.495 | 0.046 | 0.954 | |
| … | … | … | … | … | |
| 75 (End) | 0 | 0.282 | 0.718 | 0.282 |
| Cycle | Healthy | Sick | Dead | LY (single cycle) | LY (cumulative) |
|---|---|---|---|---|---|
| 0 | 1.000 | 0.000 | 0.000 | 1 | 1 |
| 1 | 0.856 | 0.138 | 0.007 | 0.993 | 1.993 |
| 2 | 0.732 | 0.253 | 0.015 | 0.985 | 1 + 0.993 + 0.985 = 2.978 |
| 3 | 0.626 | 0.349 | 0.025 | 0.975 | |
| 4 | 0.536 | 0.429 | 0.035 | 0.965 | |
| 5 | 0.458 | 0.495 | 0.046 | 0.954 | |
| … | … | … | … | … | |
| 75 (End) | 0 | 0.282 | 0.718 | 0.282 |
The cumulative LYs for an individual starting in the Healthy state is 44.825
Note that this is within a 75 years time horizon
| Cycle | Healthy | Sick | Dead | LY (single cycle) | LY (cumulative) |
|---|---|---|---|---|---|
| 0 | 1.000 | 0.000 | 0.000 | 1 | 1 |
| 1 | 0.856 | 0.138 | 0.007 | 0.993 | 1.993 |
| 2 | 0.732 | 0.253 | 0.015 | 0.985 | 2.978 |
| 3 | 0.626 | 0.349 | 0.025 | 0.975 | 3.954 |
| 4 | 0.536 | 0.429 | 0.035 | 0.965 | 4.919 |
| 5 | 0.458 | 0.495 | 0.046 | 0.954 | 5.872 |
| … | … | … | … | … | … |
| 75 (End) | 0 | 0.282 | 0.718 | 0.282 | 44.825 |
We can do a similar exercise to get total costs, total QALYs, total DALYs, etc.
However, it’s not that simple. There are some extra complications we have to deal with.
In real life, events could occur at any points in a given cycle, but a Markov model assumes all events occur either at the beginning or end of each cycle
Time is continuous, so are survival/event-free survival curves
When we discretize time by using a fixed cycle length, we can make two assumptions
Assuming death happens at the end of cycle (A)
Overestimates state membership in Well
Assuming death happens at the start of cycle (B)
Underestimates state membership in Well



Multiply the outcomes by 1/2 in the first and last cycle.
Shifting the computed, discrete state membership curve to the left by 1/2 cycle.
Essentially assuming that events happen in the middle of cycle
| Cycle | Healthy | Sick | Dead | LY (single cycle, adjusted) | LY (cumulative) |
|---|---|---|---|---|---|
| 0 | 1.000 | 0.000 | 0.000 | 1*0.5 | 0.5 |
| 1 | 0.856 | 0.138 | 0.007 | 0.993 | 0.5 + 0.993 = 1.493 |
| 2 | 0.732 | 0.253 | 0.015 | 0.985 | 2.478 |
| 3 | 0.626 | 0.349 | 0.025 | 0.975 | 3.454 |
| 4 | 0.536 | 0.429 | 0.035 | 0.965 | 4.419 |
| 5 | 0.458 | 0.495 | 0.046 | 0.954 | 5.372 |
| … | … | … | … | … | … |
| 75 (End) | 0 | 0.282 | 0.718 | 0.282 *0.5 | 44.184 |
This number is smaller than our original estimate without half-cycle correction (44.825!)
| Pros | Cons |
|---|---|
| Can model repeated events | Can only transition once in a given cycle |
| Can model more complex + longitudinal clinical events | Shortening the cycle can create computational challenges. |
| Not computationally intensive; efficient to model and debug | Shortening cycle can cause “state explosion” if tunnel states are used |