This repository is an example accompanying the DES RAP Book — an open educational resource on reproducible discrete-event simulation (DES) in Python and R. The book demonstrates best practices for building, validating, and sharing DES models within a reproducible analytical pipeline (RAP). The rdesrap_stroke model illustrates how these principles can be applied to a real-world healthcare capacity planning problem.
This repository provides a reproducible analytical pipeline (RAP) that implements a real-life stroke service capacity planning model in R. It serves as a practical example, fully reproducible and aligned with RAP principles, based on the following study:
Monks T, Worthington D, Allen M, Pitt M, Stein K, James MA. A modelling tool for capacity planning in acute and community stroke services. BMC Health Serv Res. 2016 Sep 29;16(1):530. doi: 10.1186/s12913-016-1789-4. PMID: 27688152; PMCID: PMC5043535.
Model diagram:
Installation
Clone the repository:
git clone https://github.com/pythonhealthdatascience/rdesrap_stroke.git
cd rdesrap_stroke
Set up the R environment using renv (recommended):
renv::init()
renv::restore()
If you encounter issues restoring the exact environment, you can install dependencies from DESCRIPTION and generate your own lock file:
renv::init()
renv::install()
renv::snapshot()
How to run
The simulation code is in the R/ folder as a local package. There are files executing the model and analysing the results in rmarkdown/.
Install the local package:
devtools::install() # Needed if running in parallel
devtools::load_all() # Sufficient if running sequentially
library(simulation)
Run a single simulation:
param <- create_parameters(number_of_runs = 1L)
single_results <- runner(param = param)
Run multiple replications:
param <- create_parameters(number_of_runs = 5L)
single_results <- runner(param = param)
Run all analyses (from command line):
bash run_rmarkdown.sh
Generating the results from the article
The original study used Simul8. Each of the outputs from that article have been replicated in this repository using R:
- Figure 1. Simulation probability density function for occupancy of an acute stroke unit.
- Figure 3. Simulated trade-off between the probability that a patient is delayed and the no. of acute beds available.
- Table 2. Likelihood of delay. Current admissions versus 5% more admissions.
- Table 3. Results of pooling of acute and rehab beds.
- Supplementary Table 1. Likelihood of delay. Current admissions versus No Complex neurological patients.
- Supplementary Table 3. Likelihood of delay. Current admissions versus ring fenced acute stroke beds.
To generate these, simply execute rmarkdown/analysis.Rmd.
Examples
Figure 1
Original:
From this repository:
Figure 3
Original:
From this repository:
Run time and machine specification
The run time for this analysis (notebooks/analysis.Rmd) is 1m 38s seconds. This was on an Intel Core i7-12700H, 32GB RAM, Ubuntu 24.04.1.
The other notebooks generate results for tests and illustrate other functionality (e.g. importing parameters from csv, running with logs), and these just take a second or two.
If you use this repository, please cite either the GitHub repository or Zenodo:
Heather, A. & Monks, T. (2025). Stroke capacity planning model: R DES RAP. GitHub. https://github.com/pythonhealthdatascience/rdesrap_stroke.
Heather, A. & Monks, T. (2025). Stroke capacity planning model: R DES RAP. Zenodo. https://doi.org/10.5281/zenodo.15863376.
Amy Heather - developed the repository.
Tom Monks - peer review of rdesrap_mms repository, with advice from that review also informing this repository.
MIT Licence. See LICENSE.md for details.
Curious about contributing? Check out the contributing guidelines to learn how you can help. Every bit of help counts, and your contribution - no matter how minor - is highly valued.
This project was developed as part of the project STARS: Sharing Tools and Artefacts for Reproducible Simulations. It is supported by the Medical Research Council [grant number MR/Z503915/1].





