Velocity produces a figure full of arrows, and an arrow figure is persuasive whether or not the model behind it fits. This run on public data (scVelo pancreas endocrinogenesis (Bastidas-Ponce et al. 2019, public)) is reported the way it should be: with the three numbers that decide whether the arrows mean anything.
Velocity infers direction from the ratio of unspliced to spliced RNA. Below roughly 10% unspliced there is not enough signal and the method should not be run — but it will still produce arrows if you ask it to. Here unspliced reads are 16.3%, which is workable. This number belongs in the report; most velocity figures never mention it.
Velocity confidence measures how consistent a cell's inferred direction is with its neighbours. Median here is 0.729, and 6.4% of cells fall below 0.5 — those regions should not carry a narrative, however convincing the arrows look.
Pancreatic endocrinogenesis runs ductal → Ngn3-low → Ngn3-high → pre-endocrine → the four endocrine fates. The velocity pseudotime reproduces exactly that ordering, without being told:
| Cell type | Median velocity pseudotime |
|---|---|
| Ductal | 0.151 |
| Ngn3 low EP | 0.227 |
| Ngn3 high EP | 0.718 |
| Pre-endocrine | 0.922 |
| Beta | 0.953 |
| Alpha | 0.927 |
| Delta | 0.905 |
| Epsilon | 0.902 |
If the arrows had pointed from endocrine cells back to progenitors, the honest conclusion would be that the model did not fit — not that we had discovered de-differentiation. Recovering a known trajectory is the minimum bar before anyone reports an unexpected one.
The stochastic velocity mode in the current scVelo release crashes against recent NumPy versions; this run uses the deterministic mode, which takes a different code path. We mention it because it is the kind of thing that decides whether a delivery arrives on time — and because it is a reason to run the analysis rather than copy a tutorial.