Individual-Level Microsimulation and Semi-Markov Models
State-transition decision models that simulate individual histories or let transition risks depend on time in a state, supporting memory and heterogeneity that a simple homogeneous cohort model omits.
On this page
State-transition decision models that simulate individual histories or let transition risks depend on time in a state, supporting memory and heterogeneity that a simple homogeneous cohort model omits. Use when past events, individual risk factors, or time since entering a health state materially affect future outcomes and cannot be represented adequately by a simpler model.
Definition and scope
State-transition decision models that simulate individual histories or let transition risks depend on time in a state, supporting memory and heterogeneity that a simple homogeneous cohort model omits. The target population, use, and analysis remain protocol decisions; this card explains the choices and their consequences rather than approving a study.
Operational specification
Define states, allowed transitions, cycle or event time, baseline heterogeneity, history variables, time-in-state effects, competing exits, and cost/utility accrual. Distinguish patient-level Monte Carlo variation from parameter uncertainty. Tunnel states can encode selected duration effects in a cohort model; microsimulation does not automatically make a model clinically more valid.
Analysis and diagnostics
Check transition probabilities, histories, absorbing states, conservation of the simulated population, and event timing. Use common random numbers where appropriate for efficient comparisons, adequate patient counts for Monte Carlo precision, and a separate outer uncertainty loop for PSA. Validate state occupancy and outcomes against independent data.
When NOT to use and common errors
Do not treat repeated patient simulations under fixed parameters as PSA. Do not insert independent one-exit probability conversions for several competing exits. More detail can conceal unsupported parameters and does not prove predictive validity.
Worked example and implementation boundary
For a synthetic state with a constant annual single-exit rate of 0.2, convert that rate to a half-year event probability before using it in a single-exit teaching transition. The single-exit half-year probability is approximately 0.09516. Multiple competing exits need a coherent transition system. The code performs that explicitly stated calculation with synthetic inputs. It is not a complete fitted analysis and does not demonstrate the identification assumptions, estimate sampling uncertainty, or certify application in another population.
Data-source and reporting requirements
Preserve the provenance, dates, units, and observation rule for each input. Claims capture services and transactions under observable benefits; absence of a record is not proof that an event or resource use did not occur. EHR and registry measurements depend on the collection process and may miss care outside the system. Linked sources add reconciliation and selection questions. Primary collection can improve a missing domain but still requires valid measurement and follow-up. Report which of these limitations affects the stated use, which evidence supports the chosen inputs, and what remains uncertain.
Worked example
Scenario
For a synthetic state with a constant annual single-exit rate of 0.2, convert that rate to a half-year event probability before using it in a single-exit teaching transition.
Dataset
Synthetic inputs with units defined in the scenario; no patient data.
| input | value |
|---|---|
| rate | 0.2 |
| cycle_years | 0.5 |
Steps
Result
The single-exit half-year probability is approximately 0.09516. Multiple competing exits need a coherent transition system.
Trade-offs
Code example
Executed example · Python 3.11.15 · 2026-11-01T02:04:28+00:00
Self-contained synthetic calculation for the worked example only. Inputs and units are listed in the dataset; output is the displayed scalar. This does not fit the full study/model, estimate uncertainty, or select an analysis for a real study.
from math import exp
rate = 0.2
cycle_years = 0.5
result = 1-exp(-rate*cycle_years)
assert abs(result - 0.09516258196404048) < 1e-9
print(result)
Executed example · Rscript (R) version 4.6.1 (2026-06-24) · 2026-11-01T02:04:28+00:00
Self-contained synthetic calculation for the worked example only. Inputs and units are listed in the dataset; output is the displayed scalar. This does not fit the full study/model, estimate uncertainty, or select an analysis for a real study.
rate <- 0.2
cycle_years <- 0.5
result <- 1-exp(-rate*cycle_years)
stopifnot(abs(result - 0.09516258196404048) < 1e-9)
print(result)
Citations
- [1]Siebert U, Alagoz O, Bayoumi AM, et al. State-transition modeling: a report of the ISPOR-SMDM Modeling Good Research Practices Task Force-3. Value in Health. 2012;15(6):812-820.
- [2]Caro JJ, et al. Modeling Good Research Practices—Overview: A Report of the ISPOR-SMDM Modeling Good Research Practices Task Force-1. Value in Health. 2012.
- [3]Eddy DM, et al. Model Transparency and Validation: A Report of the ISPOR-SMDM Modeling Good Research Practices Task Force-7. Value in Health. 2012.