BranchingProcesses.jl
BranchingProcesses.BranchingProcesses — Module
Exports
BranchingProcessNodeBranchingProcessSolutionConstantRateBranchingProblemReducedBranchingProcessSolutionSpatialTreeassign_spatial_positionscreate_spatial_layoutget_leaf_positionsget_positions_at_timeget_time_series_framesget_timespanget_values_at_positionsnode_generationsnormalize_positions!reduce_treerelax_positions!remake_initial_conditionsample_lifetimesample_offspringsolvesolve_and_splitspatial_heatmap_datatip_values
Imports
AbstractTreesBaseColorSchemesDistributionsDocStringExtensionsRecipesBaseSciMLBase
BranchingProcesses
BranchingProcesses is a Julia package for modelling branching stochastic processes, also known as branching particle systems.
Branching stochastic processes are processes where "particles" (which could represent cells, individuals, or species depending on the context) have one or more degrees of freedom $X(t)$ whose dynamics is described by a stationary Markov process. After a certain lifetime, a particle splits into $k\geq 0$ identical, independent offspring particles with probability $p_k$. This process is repeated indefinitely, producing a collection of $N(t)$ particles at time $t$. Splitting happens with a rate function $\gamma(t)$ that may depend on the age $t$ of the particle.
Examples of such processes are:
- Classical branching processes, which correspond to the case $X(t)\equiv 1$.
- Branching Brownian motion
- Branching Ornstein-Uhlenbeck processes used in phylogenetic comparative methods
Although the package can probably be used or extended for generic phylodynamic analyses, the dedicated PhyloTraits package will probably be more appropriate for that purpose.
The primary motivation for this package is to provide a framework for the analysis of a "memory" phenomenon that can occur in branching stochastic processes if the relaxation rate of the single-particle dynamics is slow relative to the branching rate. In this case the system can remember its initial state, or, put differently, large fluctuations early in the expansion can have a long-lasting effect on the state of the system. The study of this phenomenon implicitly traces its roots (no pun intended) to Luria and Delbrück's fluctuation analysis. More recently, it has been
- studied mathematically in branching Ornstein-Uhlenbeck processes,
- observed experimentally in proliferating cancer cell populations
- proposed as an important property of proliferating active matter
Studying this phenomenon requires the analysis of fluctuations across multiple independent realizations of the branching process. This is in contrast to the more common use of branching processes in population and phylogenetics, where the focus is on the evolution of a single lineage.
Supported stochastic processes
The aim is to support any process that can be implemented as a stochastic differential equation, jump process, or jump diffusion equation.
Specific branching process constructors will be implemented for the following stochastic processes:
- Brownian motion
- Ornstein-Uhlenbeck process
- Birth-death process
- The stochastic gene expression models of Gorin et al (2022)
For now, see the examples in the documentation for how to construct branching processes.
Supported lifetime distributions
A branching rate function $\gamma(t)$ defines a lifetime distribution $w(t)=\exp(-\int_0^t ds\gamma(s))$, and vice versa, where $w(t)$ is the probability of a particle to reach age $t$ without splitting. The package uses the lifetime distribution representation and supports any univariate distribution with positive support.
Supported splitting distributions
Any discrete univariate distribution (default: Dirac with parameter 2, that is, all particles split into two offspring particles).