Velociraptors and RNA Velocity

How a static single-cell snapshot becomes a dynamical vector field

The Broader Picture

Imagine you’re sitting at a red light behind a few other cars. While none of the cars are moving, you can see their turn signals. Some are pointed left, others right – more or less, this will give you a sense for where it’ll go. Believe it or not, you’ve just done RNA Velocity!

Single-cell RNA sequencing gives us a peculiar kind of data. Each cell is destroyed when it is measured, so the experiment (usually) produces an unordered snapshot of a population rather than a movie of any one cell. This measurement problem is perhaps one of the most obstructive and persistent limitations of sequencing – we never get a complete dynamical picture of a cell. Yet many of the biological questions we care about are dynamical: Where is a cell going? Which genes are turning on or off? Which mature state will it eventually reach?

RNA velocity extracts a local answer from the mechanics of RNA processing. A newly transcribed RNA molecule first appears as unspliced pre-mRNA, which still contains introns, and is only later converted into spliced, mature messenger RNA after those introns are removed. The lag between these two pools is sort of like a tiny internal clock. If unspliced RNA is unusually abundant relative to spliced RNA, production is running ahead of maturation and the gene is likely being induced. If it is unusually scarce, the gene is likely being repressed since the supply of the precursor to the spliced RNA is running low.

The central claim is simple:

A cell’s balance of unspliced and spliced RNA contains an estimate of the instantaneous derivative of its transcriptome.

This post develops that claim as a simple problem in dynamical systems. We will begin with one gene, solve its kinetics, read velocity from its phase portrait, and then assemble thousands of gene-wise derivatives into a vector field over cell state. In other words, for the spliced transcriptome for a cell $i$,

\[x_i = (s_{i1},\ldots,s_{ip})\in\mathbb R^p,\]

Given the unspliced transcripts at the same timepoint $(u_{i1},\ldots,u_{ip})\in\mathbb R^p$, the problem is to compute an estimate of the local tangent:

\[\hat{v}_i \approx \frac{d x_i}{dt} = v_i =(v_{i1},\ldots,v_{ip}).\]

All figures and animations are generated by the accompanying RNA-velocity notebook. I keep the main argument moving here; readers who want every algebraic step can jump to the informal calculation appendix.

Setup

Fix a gene and write

\[u(t)=\text{unspliced RNA}, \qquad s(t)=\text{spliced RNA}.\]

The minimal reaction network is

\[\varnothing \xrightarrow{\alpha} u \xrightarrow{\beta} s \xrightarrow{\gamma} \varnothing,\]

where $\alpha$ is the transcription rate, $\beta$ the splicing rate, and $\gamma$ the degradation rate. Mass action gives the affine linear(!) system

\[\dot u=\alpha-\beta u, \qquad \dot s=\beta u-\gamma s.\]

Transcription adds unspliced RNA at rate $\alpha$; splicing transfers molecules into the mature pool at rate $\beta u$; and degradation removes mature RNA at rate $\gamma s$.

The second equation already contains RNA velocity by definition! For this gene,

\[v := \dot s=\beta u-\gamma s.\]

Observe – although individual molecule counts fluctuate stochastically, this linear reaction network has an especially convenient property: the equations above govern its mean dynamics exactly. Biology has chosen an incredibly simple linear process for managing its spliced-unspliced transcripts. A fixed transcription rate has only one attracting equilibrium so that the system is inherently stable at this level. Thus, much of the fancier behavior really comes from things above the RNA velocity “module,” e.g. switching transcription on and off and more advanced gene regulation that controls $\alpha$ itself.

Also, an important thing to observe here is that only ratios of the rates are intrinsically meaningful without an external clock. It is therefore common to rescale time by $t\mapsto \beta t$, set $\beta=1$, and measure everything in units of one splicing time.

Solving the kinetic system

The unspliced equation is linear, so we can use the usual ODE bag of tricks to multiply it through by the integrating factor $e^{\beta t}$

\[\dot u+\beta u=\alpha,\quad \frac{d}{dt}\left(u e^{\beta t}\right)=\alpha e^{\beta t}.\]

If

\[u_\infty=\frac{\alpha}{\beta}, \qquad s_\infty=\frac{\alpha}{\gamma},\]

then, for initial state $(u_0,s_0)$,

\[u(t)=u_\infty+(u_0-u_\infty)e^{-\beta t}.\]

Substituting this into the spliced equation and integrating once more gives, when $\gamma\neq\beta$,

\[s(t) =s_\infty+(s_0-s_\infty)e^{-\gamma t} +\frac{\beta(u_0-u_\infty)}{\gamma-\beta} \left(e^{-\beta t}-e^{-\gamma t}\right).\]

In the resonant case $\gamma=\beta$, the final term is replaced by

\[\beta(u_0-u_\infty)t e^{-\beta t}.\]

Show the complete integrating-factor calculation and the two switching phases.

The two exponential time scales are the important part. Unspliced RNA responds on the scale $1/\beta$, while spliced RNA responds on the scale $1/\gamma$. When splicing is faster than degradation, the unspliced pool reacts first and the mature pool follows. RNA velocity reads precisely this lag.

Time courses of unspliced and spliced RNA alongside the resulting RNA velocity during induction.
During induction, unspliced RNA leads spliced RNA: the precursor pool responds first, before its material is transferred into the mature pool. The resulting velocity is initially positive and decays to zero as the gene approaches equilibrium at $\dot{s}=v=0$.

The phase portrait

The geometry is easiest to see in the $(s,u)$ plane, with spliced abundance on the horizontal axis and unspliced abundance on the vertical axis. The two nullclines are

\[\dot u=0 \quad\Longleftrightarrow\quad u=\frac{\alpha}{\beta},\]

and

\[\dot s=0 \quad\Longleftrightarrow\quad u=\frac{\gamma}{\beta}s.\]

Their intersection is the fixed point

\[(s^*,u^*)= \left(\frac{\alpha}{\gamma},\frac{\alpha}{\beta}\right).\]

The Jacobian is constant:

\[J= \begin{pmatrix} -\beta & 0\\ \beta & -\gamma \end{pmatrix}.\]

Because it is triangular, its eigenvalues are visible on the diagonal:

\[\lambda_1=-\beta, \qquad \lambda_2=-\gamma.\]

Both are real and negative. The fixed point is therefore a stable node; because the original system is affine linear, this local calculation is also global. For a fixed $\alpha$, every initial condition is drawn to the same equilibrium. That’s a very good thing from the perspective of a cell – while mRNA is continuously being generated and degraded, this stability ensures that for fixed $\alpha, \gamma, \beta$ one attains a stable homeostasis for the expression of a desired gene. If this behaved differently, i.e. with unstable equilibria, I’d frankly be quite concerned…

Show the nullcline and stability calculations line by line.

Phase portrait showing the vector field, two nullclines, sample trajectories, and the stable equilibrium.
The fixed-$\alpha$ system has one globally attracting state. The sloped blue nullcline is also the steady-state line on which spliced RNA velocity vanishes.

Switching transcription creates the loop

A single fixed point does not yet look much like biological development. The characteristic RNA-velocity loop appears when transcription switches.

In the simplest dynamical model, a gene has two phases that share $\beta$ and $\gamma$:

  1. Induction: $\alpha=\alpha^{\mathrm{on}}>0$, beginning near $(u,s)=(0,0)$.
  2. Repression: $\alpha=0$, beginning from the state reached at a switching time $t_s $.

During induction, the unspliced pool runs ahead of the mature pool. The state lies above the steady-state line and $\dot s>0$. Once transcription turns off, unspliced RNA is depleted first while mature RNA lingers. The state falls below the line and $\dot s<0$. Together the two branches trace an almond-shaped loop.

Animation of a gene moving through induction and repression in the phase plane, synchronized with its RNA time courses.
A gene travels above the steady-state line during induction and returns below it during repression. The right panel shows the same motion as synchronized time courses.

This is why a cross-section of many cells can stand in for time – the model assumes that different cells occupy different points along a common kinetic curve in the phase plane. Inference then asks where each cell sits on that curve and which kinetic parameters generated it.

Velocity is a signed residual

The key geometric fact is almost embarrassingly simple. Starting from

\[v=\dot s=\beta u-\gamma s,\]

we can factor out $\beta$:

\[v=\beta\left(u-\frac{\gamma}{\beta}s\right).\]

After setting $\beta=1$,

\[v=u-\gamma s.\]

The steady-state line is $u=\gamma s$. At a fixed value of $s$, its vertical coordinate is $\gamma s$, so $u-\gamma s$ is exactly the signed vertical gap between the observed cell and the line:

\[\begin{aligned} u>\gamma s &\Longrightarrow v>0 &&\text{(induction)},\\ u=\gamma s &\Longrightarrow v=0 &&\text{(steady state)},\\ u<\gamma s &\Longrightarrow v<0 &&\text{(repression)}. \end{aligned}\]

The perpendicular distance differs by the positive factor $1/\sqrt{1+\gamma^2}$, so it carries the same sign. In this phase portrait, “RNA velocity” is a residual from a line.

Show the signed-distance calculation.

Induction and repression loop colored by positive and negative RNA velocity around the steady-state line.
Color records $v=u-\gamma s$. Positive velocity sits above the line, while negative velocity sits below it.

Estimating velocity from cells

The equations tell us how to compute velocity if the rates are known. The statistical problem is to infer those rates from an unordered cloud of measured cells.

The steady-state estimator

The original approach fixes $\beta=1$ and estimates the slope $\gamma$ from cells thought to lie near steady state. In a schematic least-squares version, choose the high-expression cells and solve

\[\widehat\gamma =\underset{\gamma}{\arg\min} \sum_{i\in\mathrm{upper}} (u_i-\gamma s_i)^2.\]

Differentiating gives the closed-form slope through the origin,

\[\widehat\gamma =\frac{\sum_i u_i s_i}{\sum_i s_i^2}, \qquad \widehat v_i=u_i-\widehat\gamma s_i.\]

Show the least-squares derivative and normal equation.

This is fast and intuitive, but it assumes the extreme cells actually reached steady state. While this was the core of the initial approaches to RNA velocity, it is a less-than-ideal assumption for two reasons:

  1. The cells may not be in steady state. Developmental processes are often transient: a gene can switch off before its induction trajectory reaches the asymptote. In that case, the upper cells lie on the curved part of the loop and the fitted slope is biased.

  2. It fits only these extremal cells, which discards much of the data.

Synthetic phase portrait comparing a biased steady-state regression line with the true kinetic slope.
A transient synthetic gene switches off before reaching equilibrium. The fitted slope $\widehat\gamma\approx0.62$ overshoots the true value $0.5$.

Fitting the whole dynamical curve

The scVelo dynamical model addresses this transient regime by fitting the full induction/repression trajectory. For one gene, let

\[\theta=(\alpha^{\mathrm{on}},\beta,\gamma,t_s)\]

denote the shared kinetic parameters. Every observed cell $i$ receives hidden coordinates

\[z_i=(t_i,k_i),\]

where $t_i$ is its latent transcriptional time and $k_i$ selects the induction or repression branch. The closed-form solution predicts a point

\[m(t_i,k_i;\theta)= \big(\widehat u(t_i),\widehat s(t_i)\big)\]

on the phase curve.

A useful pedagogical observation model is isotropic Gaussian noise around that curve:

\[(u_i,s_i)\sim \mathcal N\!\left(m(t_i,k_i;\theta),\sigma^2 I\right).\]

Maximum likelihood is then equivalent to minimizing the total squared distance

\[J(\theta,Z) =\sum_{i=1}^N \left\|(u_i,s_i)-m(t_i,k_i;\theta)\right\|^2.\]

The simplified hard-assignment EM procedure in the notebook alternates between two geometric operations:

Each operation can only lower the objective:

\[J(\theta^{(r)},Z^{(r)}) \geq J(\theta^{(r)},Z^{(r+1)}) \geq J(\theta^{(r+1)},Z^{(r+1)}) \geq 0.\]

The objective therefore converges, although the non-convex problem may have multiple stationary points. A soft probabilistic version keeps a posterior distribution over latent times and phases instead of assigning each cell to a single point.

Show how the Gaussian likelihood gives the objective and why hard EM decreases it.

Animation of an induction and repression trajectory being fitted to noisy cells over EM iterations.
Hard-assignment EM alternates between projecting cells onto a trajectory and refitting that trajectory. Orange is the current fit; dashed black is the generating curve.

From genes to a cell-state vector field

For $p$ genes, a cell’s spliced transcriptome is a point

\[x_i=(s_{i1},\ldots,s_{ip})\in\mathbb R^p,\]

and its gene-wise velocities form the vector

\[v_i=(v_{i1},\ldots,v_{ip}) =\frac{d x_i}{dt}.\]

Cells tend to concentrate near a much lower-dimensional manifold $\mathcal M\subset\mathbb R^p$. If the kinetic model is a useful description, $v_i$ is approximately tangent to $\mathcal M$ at $x_i$. The collection of inferred velocities is therefore a discrete sampling of a vector field over cell state.

To visualize the field, the attached notebook predicts a short Euler step

\[x_i^+=x_i+\Delta t\,v_i\]

and applies the same linear PCA map $Q$ to both states. Linearity gives

\[Q(x_i^+)-Q(x_i)=\Delta t\,Q(v_i),\]

so each displayed arrow is the projected near-future displacement.

PCA embedding of synthetic single-cell states with arrows showing the projected transcriptomic velocity field.
Sixty simulated genes share a latent developmental time. Their gene-wise derivatives assemble into a coherent flow from early cells (dark) toward late cells (yellow).

One can turn this field into a stochastic process on the cell graph. For neighboring cells $i$ and $j$, reward displacements that align with $v_i$:

\[P_{ij}\propto \exp\!\left(\frac{\cos\theta_{ij}}{\sigma}\right), \qquad \cos\theta_{ij} =\frac{v_i^{\top}(x_j-x_i)}{\|v_i\|\,\|x_j-x_i\|}.\]

Row normalization makes $P$ a Markov transition matrix. Methods such as CellRank analyze this chain to identify terminal states and compute fate probabilities as absorption probabilities.

What the snapshot cannot identify

There is a fundamental ambiguity in the inverse problem. Choose any $c>0$ and transform

\[(\alpha,\beta,\gamma,t) \longmapsto (c\alpha,c\beta,c\gamma,t/c).\]

The combinations $\beta t$, $\gamma t$, $\alpha/\beta$, and $\alpha/\gamma$ do not change, so neither does the trajectory in the $(u,s)$ plane. Equivalently, if $t’=t/c$, then

\[\frac{du}{dt'} =c(\alpha-\beta u) =(c\alpha)-(c\beta)u,\]

and similarly for $s$. The same curve can be traversed at any absolute speed, provided all rates are rescaled together.

Show the time-rescaling argument directly in the closed-form trajectory.

Snapshot splicing data can therefore determine the shape and orientation of a trajectory, along with dimensionless ratios such as $\gamma/\beta$, but it cannot supply an absolute clock. The sign and relative magnitude of velocity are meaningful; i.e. “molecules per hour” is not identifiable from these measurements alone.

Absolute kinetics require another source of time information. Metabolic labeling time-stamps newly synthesized RNA, which is why methods such as Dynamo can estimate absolute velocity and reconstruct an analytic vector field.

The picture to keep

RNA velocity works by turning a biochemical lag into geometry:

  1. Transcription, splicing, and degradation define a two-state kinetic system for every gene.
  2. Switching transcription on and off creates a loop around the steady-state line.
  3. A cell’s signed displacement from that line estimates $\dot s$.
  4. Gene-wise derivatives assemble into a vector field over the cell-state manifold.
  5. That field induces a Markov chain and, downstream, probabilities over cellular fates.

The surprising step is the first one: a destructive snapshot still contains temporal information because RNA processing does not happen instantaneously. Everything after that is the mathematical work of making this internal clock visible.

Further reading

Appendix: informal calculations

This appendix keeps the scratch-work version of the derivations: no steps hidden, and no need to interrupt the main narrative if the result already feels intuitive.

A. Solving the kinetic equations

Start from

\[\dot u=\alpha-\beta u, \qquad \dot s=\beta u-\gamma s,\]

with $u(0)=u_0$ and $s(0)=s_0$.

The unspliced pool

Move the decay term to the left:

\[\dot u+\beta u=\alpha.\]

Multiplication by $e^{\beta t}$ makes the left side a product derivative:

\[e^{\beta t}\dot u+\beta e^{\beta t}u =\frac{d}{dt}\left(e^{\beta t}u\right) =\alpha e^{\beta t}.\]

Integrating from $0$ to $t$,

\[\begin{aligned} e^{\beta t}u(t)-u_0 &=\alpha\int_0^t e^{\beta\tau}\,d\tau\\ &=\frac{\alpha}{\beta}\left(e^{\beta t}-1\right). \end{aligned}\]

Now divide by $e^{\beta t}$:

\[\begin{aligned} u(t) &=u_0e^{-\beta t} +\frac{\alpha}{\beta}\left(1-e^{-\beta t}\right)\\ &=\frac{\alpha}{\beta} +\left(u_0-\frac{\alpha}{\beta}\right)e^{-\beta t}. \end{aligned}\]

Writing $u_\infty=\alpha/\beta$, this is

\[u(t)=u_\infty+(u_0-u_\infty)e^{-\beta t}.\]

The spliced pool

Now substitute the solution for $u(t)$ into

\[\dot s+\gamma s=\beta u(t).\]

Multiplying by the second integrating factor $e^{\gamma t}$ gives

\[\begin{aligned} \frac{d}{dt}\left(e^{\gamma t}s\right) &=\beta e^{\gamma t} \left[u_\infty+(u_0-u_\infty)e^{-\beta t}\right]\\ &=\beta u_\infty e^{\gamma t} +\beta(u_0-u_\infty)e^{(\gamma-\beta)t}. \end{aligned}\]

For $\gamma\neq\beta$, integration from $0$ to $t$ yields

\[\begin{aligned} e^{\gamma t}s(t)-s_0 &=\beta u_\infty\int_0^t e^{\gamma\tau}\,d\tau +\beta(u_0-u_\infty) \int_0^t e^{(\gamma-\beta)\tau}\,d\tau\\ &=\frac{\beta u_\infty}{\gamma} \left(e^{\gamma t}-1\right) +\frac{\beta(u_0-u_\infty)}{\gamma-\beta} \left(e^{(\gamma-\beta)t}-1\right). \end{aligned}\]

Because $\beta u_\infty=\alpha=\gamma s_\infty$, we have $\beta u_\infty/\gamma=s_\infty$. Multiplying through by $e^{-\gamma t}$ therefore gives

\[\begin{aligned} s(t) &=s_0e^{-\gamma t} +s_\infty\left(1-e^{-\gamma t}\right)\\ &\quad +\frac{\beta(u_0-u_\infty)}{\gamma-\beta} \left(e^{-\beta t}-e^{-\gamma t}\right)\\ &=s_\infty+(s_0-s_\infty)e^{-\gamma t}\\ &\quad +\frac{\beta(u_0-u_\infty)}{\gamma-\beta} \left(e^{-\beta t}-e^{-\gamma t}\right). \end{aligned}\]

Thus

\[s(t)=s_\infty+(s_0-s_\infty)e^{-\gamma t} +\frac{\beta(u_0-u_\infty)}{\gamma-\beta} \left(e^{-\beta t}-e^{-\gamma t}\right).\]

If $\gamma=\beta$, the second integrand above becomes constant:

\[e^{(\gamma-\beta)\tau}=1.\]

Its integral is $t$, so the resonant solution is

\[s(t)=s_\infty+(s_0-s_\infty)e^{-\beta t} +\beta(u_0-u_\infty)t e^{-\beta t}.\]

This is also the limit of the non-resonant expression as $\gamma\to\beta$.

Switching from induction to repression

Set $\beta=1$. During induction, $\alpha=\alpha^{\mathrm{on}}$ and $(u_0,s_0)=(0,0)$. Substitution into the closed-form solutions gives

\[u_{\mathrm{ind}}(t) =\alpha^{\mathrm{on}}\left(1-e^{-t}\right)\]

and

\[s_{\mathrm{ind}}(t) =\frac{\alpha^{\mathrm{on}}}{\gamma} \left(1-e^{-\gamma t}\right) -\frac{\alpha^{\mathrm{on}}}{\gamma-1} \left(e^{-t}-e^{-\gamma t}\right).\]

At the switching time $t_s$, define

\[u_s=u_{\mathrm{ind}}(t_s), \qquad s_s=s_{\mathrm{ind}}(t_s).\]

During repression $\alpha=0$, so both steady-state values vanish. With elapsed repression time $\tau=t-t_s$, the same general solution gives

\[u_{\mathrm{rep}}(\tau)=u_s e^{-\tau}\]

and

\[s_{\mathrm{rep}}(\tau) =s_s e^{-\gamma\tau} +\frac{u_s}{\gamma-1} \left(e^{-\tau}-e^{-\gamma\tau}\right).\]

Those two pieces are the upper induction branch and lower repression branch of the loop. Return to the kinetic discussion.

B. Nullclines, equilibrium, and stability

The $u$-nullcline is found by setting $\dot u=0$:

\[\alpha-\beta u=0 \quad\Longrightarrow\quad u=\frac{\alpha}{\beta}.\]

Along this horizontal line,

\[\dot s =\beta\left(\frac{\alpha}{\beta}\right)-\gamma s =\alpha-\gamma s,\]

so the horizontal component of the flow points toward $s=\alpha/\gamma$.

The $s$-nullcline follows from

\[\beta u-\gamma s=0 \quad\Longrightarrow\quad s=\frac{\beta}{\gamma}u,\]

or, in the axes used in the figures,

\[u=\frac{\gamma}{\beta}s.\]

The two nullclines meet at

\[u^*=\frac{\alpha}{\beta}, \qquad s^*=\frac{\beta}{\gamma}u^* =\frac{\alpha}{\gamma}.\]

For the stability calculation, write the vector field as

\[F(u,s)= \begin{pmatrix} \alpha-\beta u\\ \beta u-\gamma s \end{pmatrix}.\]

Differentiating each component gives

\[J=DF= \begin{pmatrix} \partial_u(\alpha-\beta u) & \partial_s(\alpha-\beta u)\\ \partial_u(\beta u-\gamma s) & \partial_s(\beta u-\gamma s) \end{pmatrix} = \begin{pmatrix} -\beta & 0\\ \beta & -\gamma \end{pmatrix}.\]

The characteristic polynomial is

\[\begin{aligned} \det(J-\lambda I) &=\det \begin{pmatrix} -\beta-\lambda & 0\\ \beta & -\gamma-\lambda \end{pmatrix}\\ &=(-\beta-\lambda)(-\gamma-\lambda)\\ &=(\lambda+\beta)(\lambda+\gamma). \end{aligned}\]

Therefore

\[\lambda_1=-\beta, \qquad \lambda_2=-\gamma.\]

Since $\beta,\gamma>0$, both modes decay. If we shift to deviations from equilibrium,

\[y= \begin{pmatrix} u-u^*\\ s-s^* \end{pmatrix},\]

then the affine term disappears and the exact equation is $\dot y=Jy$, not merely an approximation near the fixed point. Hence $y(t)=e^{Jt}y(0)\to0$, and the equilibrium is globally asymptotically stable. The two decay scales are $1/\beta$ and $1/\gamma$. Return to the phase portrait.

C. Velocity as a signed distance

Begin with the definition

\[v=\dot s=\beta u-\gamma s.\]

Factor out $\beta$:

\[v=\beta \left(u-\frac{\gamma}{\beta}s\right).\]

The $\dot s=0$ nullcline is

\[u=\frac{\gamma}{\beta}s.\]

For an observed point $(s,u)$, the point on this line with the same horizontal coordinate is

\[\left(s,\frac{\gamma}{\beta}s\right).\]

Their signed vertical difference is

\[u-\frac{\gamma}{\beta}s =\frac{v}{\beta}.\]

Thus the vertical residual equals velocity after choosing the time unit $\beta=1$; for general $\beta$, it differs only by the positive scale factor $\beta$.

For completeness, the line can be written as

\[u-\frac{\gamma}{\beta}s=0.\]

The signed perpendicular distance from $(s,u)$ to this line is

\[d_\perp =\frac{u-(\gamma/\beta)s} {\sqrt{1+(\gamma/\beta)^2}} =\frac{v/\beta} {\sqrt{1+(\gamma/\beta)^2}}.\]

Every factor in the denominator is positive, so vertical residual, perpendicular distance, and velocity always have the same sign. Return to the velocity geometry.

D. The steady-state regression

After setting $\beta=1$, suppose a selected group of cells is close enough to steady state that $u_i\approx\gamma s_i$. Fit a line through the origin by minimizing

\[J(\gamma)= \sum_{i\in\mathrm{upper}} (u_i-\gamma s_i)^2.\]

Differentiate one term at a time:

\[\begin{aligned} J'(\gamma) &=\sum_i 2(u_i-\gamma s_i)(-s_i)\\ &=-2\sum_i s_i(u_i-\gamma s_i)\\ &=-2\sum_i s_i u_i +2\gamma\sum_i s_i^2. \end{aligned}\]

At the optimum, $J’(\widehat\gamma)=0$, so

\[\sum_i s_i u_i =\widehat\gamma\sum_i s_i^2.\]

Provided at least one selected cell has $s_i\neq0$,

\[\widehat\gamma =\frac{\sum_i s_i u_i}{\sum_i s_i^2}.\]

The second derivative is

\[J''(\gamma)=2\sum_i s_i^2>0,\]

so this stationary point is the unique minimum. Substituting the fitted slope back into the kinetic equation produces

\[\widehat v_i=u_i-\widehat\gamma s_i.\]

The algebra is exact; the vulnerable step is the biological assumption that the selected cells really lie near the steady-state line. Return to the steady-state estimator.

E. The dynamical model and hard EM

Let $y_i=(u_i,s_i)$ be an observed cell and let $z_i=(t_i,k_i)$ contain its latent time and branch. Given kinetic parameters $\theta$, the model curve predicts $m(z_i;\theta)$. Under isotropic Gaussian observation noise,

\[p(y_i\mid z_i,\theta) =\frac{1}{2\pi\sigma^2} \exp\left( -\frac{\|y_i-m(z_i;\theta)\|^2}{2\sigma^2} \right).\]

Assuming the cells are conditionally independent,

\[p(D\mid Z,\theta) =\prod_{i=1}^N p(y_i\mid z_i,\theta).\]

Taking logarithms turns the product into a sum:

\[\begin{aligned} \log p(D\mid Z,\theta) &=-N\log(2\pi\sigma^2)\\ &\quad -\frac{1}{2\sigma^2} \sum_{i=1}^N \|y_i-m(z_i;\theta)\|^2. \end{aligned}\]

The first term does not depend on $Z$ or $\theta$. Maximizing likelihood is therefore equivalent to minimizing

\[J(\theta,Z) =\sum_{i=1}^N \|y_i-m(z_i;\theta)\|^2.\]

For a hard E-step, fix $\theta^{(r)}$. Each latent assignment can be optimized separately:

\[z_i^{(r+1)} =\underset{z_i}{\arg\min} \|y_i-m(z_i;\theta^{(r)})\|^2.\]

Geometrically, this projects every cell onto its nearest point on the current trajectory. Since $Z^{(r+1)}$ minimizes over the assignments while $\theta^{(r)}$ stays fixed,

\[J(\theta^{(r)},Z^{(r+1)}) \leq J(\theta^{(r)},Z^{(r)}).\]

For the M-step, fix the new assignments and update the kinetic parameters:

\[\theta^{(r+1)} =\underset{\theta}{\arg\min} J(\theta,Z^{(r+1)}).\]

Therefore

\[J(\theta^{(r+1)},Z^{(r+1)}) \leq J(\theta^{(r)},Z^{(r+1)}).\]

Combining the two inequalities gives

\[J^{(0)}\geq J^{(1)}\geq J^{(2)}\geq\cdots\geq0.\]

The sequence of objective values is monotone and bounded below, so those values converge. This does not imply a unique fitted parameter vector: the problem is non-convex, and the time-rescaling symmetry below creates an additional ambiguity. A soft EM treatment replaces the nearest-point assignment by a posterior distribution over $z_i$. Return to the dynamical estimator.

F. Identifiability under a change of clock

Take any $c>0$ and define rescaled rates

\[\alpha'=c\alpha, \qquad \beta'=c\beta, \qquad \gamma'=c\gamma.\]

Evaluate the primed system at the rescaled time $t’=t/c$. Its steady-state values are unchanged:

\[u_\infty' =\frac{\alpha'}{\beta'} =\frac{c\alpha}{c\beta} =u_\infty,\]

and

\[s_\infty' =\frac{\alpha'}{\gamma'} =\frac{c\alpha}{c\gamma} =s_\infty.\]

The exponents are also unchanged:

\[\beta't' =(c\beta)\frac{t}{c} =\beta t, \qquad \gamma't' =(c\gamma)\frac{t}{c} =\gamma t.\]

Substitution into the unspliced solution gives

\[\begin{aligned} u'(t') &=u_\infty' +(u_0-u_\infty')e^{-\beta't'}\\ &=u_\infty +(u_0-u_\infty)e^{-\beta t}\\ &=u(t). \end{aligned}\]

For the spliced solution, the remaining coefficient is invariant as well:

\[\frac{\beta'}{\gamma'-\beta'} =\frac{c\beta}{c\gamma-c\beta} =\frac{\beta}{\gamma-\beta}.\]

Consequently,

\[\begin{aligned} s'(t') &=s_\infty' +(s_0-s_\infty')e^{-\gamma't'}\\ &\quad +\frac{\beta'(u_0-u_\infty')}{\gamma'-\beta'} \left(e^{-\beta't'}-e^{-\gamma't'}\right)\\ &=s_\infty +(s_0-s_\infty)e^{-\gamma t}\\ &\quad +\frac{\beta(u_0-u_\infty)}{\gamma-\beta} \left(e^{-\beta t}-e^{-\gamma t}\right)\\ &=s(t). \end{aligned}\]

The same point in the phase plane is therefore generated by rates $(\alpha,\beta,\gamma)$ at time $t$ and by rates $(c\alpha,c\beta,c\gamma)$ at time $t/c$.

The chain rule expresses the same fact directly at the ODE level. Since $t’=t/c$, we have $dt/dt’=c$, and hence

\[\begin{aligned} \frac{du}{dt'} &=\frac{du}{dt}\frac{dt}{dt'}\\ &=c(\alpha-\beta u)\\ &=\alpha'-\beta'u, \end{aligned}\]

with the identical calculation for $s$. Snapshot observations see the curve but not the speed at which it is traversed. They can identify ratios such as $\gamma/\beta$, not the common rate scale. Return to the identifiability discussion.