Skip to contents

GillespieSSA2 is a fast, scalable, and versatile framework for simulating large systems with Gillespie's Stochastic Simulation Algorithm (SSA). This package is the spiritual successor to the GillespieSSA package originally written by Mario Pineda-Krch.

Details

GillespieSSA2 has the following added benefits:

  • The whole algorithm is run in Rcpp which results in major speed improvements (>100x). Even your propensity functions (reactions) are being compiled to Rcpp!

  • Parameters and variables have been renamed to make them easier to understand.

  • Many unit tests try to ensure that the code works as intended.

The SSA methods currently implemented are: Exact (ssa_exact()), Explicit tau-leaping (ssa_etl()), and the Binomial tau-leaping (ssa_btl()).

The stochastic simulation algorithm

The stochastic simulation algorithm (SSA) is a procedure for constructing simulated trajectories of finite populations in continuous time. If \(X_i(t)\) is the number of individuals in population \(i\) (\(i = 1,\ldots,N\)) at time \(t\), the SSA estimates the state vector \( \mathbf{X}(t) \equiv (X_1(t),\ldots,X_N(t)) \), given that the system initially (at time \(t_0\)) was in state \(\mathbf{X}(t_0) = \mathbf{x_0}\).

Reactions are single instantaneous events changing at least one of the populations (e.g. birth, death, movement, collision, predation, infection, etc). These cause the state of the system to change over time.

The SSA procedure samples the time \(\tau\) to the next reaction \(R_j\) (\(j = 1,\ldots,M\)) and updates the system state \(\mathbf{X}(t)\) accordingly.

Each reaction \(R_j\) is characterized mathematically by two quantities; its state-change vector \(\bm{\nu_j}\) and its propensity function \(a_j(\mathbf{x})\). The state-change vector is defined as \(\bm{\nu}_j \equiv ( \nu_{1j},\ldots,\nu_{Nj} )\), where \( \nu_{ij} \) is the change in the number of individuals in population \(i\) caused by one reaction of type \(j\). The propensity function is defined as \(a_j(\mathbf{x})\), where \(a_j(\mathbf{x})dt\) is the probability that a particular reaction \(j\) will occur in the next infinitesimal time interval \(\left[t,t+dt\right]\).

Contents of this package

See also

ssa() for more explanation on how to use GillespieSSA2