software

scVelo 的箭头朝哪儿?用一张剪接相图检查 RNA 速度

作者:发布于 2026-11-14约 7 分钟阅读
为什么少于十,也能向上走。教学算例|成熟量为十,降解流出为五,加工流入随未剪接量改变。8 − 5,成熟量趋于上升,加工流入八个单位,抵消流出后净增三个。5 − 5,瞬时净变化为零,这里是教学模型的平衡位置。2 − 5,成熟量趋于下降,同样从十个单位出发,这一点净减三个。

在一张胰腺发育图上,两簇细胞之间画着从左向右的流线。要向实验同事解释它,先回到一个更小的问题。对其中一个基因,为什么模型估计成熟转录本正在增加?只要能画出这一个基因的剪接相图,再检查哪些细胞和样本支持这个趋势,就有办法区分一条值得验证的发育假说和一条纯粹好看的流线。下面从读入的两层计数开始,一直算到箭头改变方向的条件。

从两层计数追溯到同一个细胞

常用的单细胞表达矩阵给每个基因一个总量。RNA 速度还需要区分已剪接和未剪接分子,常保存在对象的 spliced 和 unspliced 两层。总量相同的两个细胞可能具有不同的剪接构成。只有一张普通表达表时,无法从一个总数唯一拆分出这两种分子。接手数据先问清上游如何定义外显子、内含子和模糊读段,再查两层是不是来自同一文库、同一版注释和同一组条形码。scVelo 的基础教程

合并已有图谱和速度文件时,先在每份文库内核对条形码,再核对基因的稳定编号。不同文库可能重复使用同一个条形码,单纯删掉文库前缀会让本来应当分开的细胞重名。按文库和细胞类型分别统计两层中非零分子的数量。某一整批几乎没有未剪接分子,优先检查建库方案、参考注释和上游计数方式。把这样的批次与其他批次一起平滑,邻居的支持可能掩盖它原本缺少观测这一事实。

手算一条基因的方向

设在简化模型中,成熟分子的瞬时变化取决于未剪接分子的加工流入量,减去成熟分子的降解流出量。用同一套归一化单位做一个教学算例,令加工速率为一、降解速率为二分之一。如果当前有十个单位的成熟分子,那么每个时间单位流出的量为五。此时未剪接量为八,净变化就是正三。若未剪接量为二,净变化就是负三。两种情况里未剪接量都低于成熟量,变化方向却恰好相反。

成熟量 未剪接量 加工流入减降解流出 这一基因的趋势
10 8 8 − 5 = 3 成熟量在该点趋于上升
10 5 5 − 5 = 0 模型给出的瞬时净变化为零
10 2 2 − 5 = −3 成熟量在该点趋于下降
为什么少于十,也能向上走。教学算例|成熟量为十,降解流出为五,加工流入随未剪接量改变。8 − 5,成熟量趋于上升,加工流入八个单位,抵消流出后净增三个。5 − 5,瞬时净变化为零,这里是教学模型的平衡位置。2 − 5,成熟量趋于下降,同样从十个单位出发,这一点净减三个。
教学算例|成熟量为十,降解流出为五,加工流入随未剪接量改变。

对应到相图,把成熟量放在横轴,未剪接量放在纵轴。在这个算例里,净变化为零的线穿过横坐标十、纵坐标五的位置。点在这条线上方还是下方,比直接比较两个轴的数值大小更有意义。真实动力学分析会估计基因特异的速率、尺度和潜在状态,不能将教学例中的斜率当作软件的固定常数。看实际相图时,把用于拟合的细胞着色,留意正负趋势是否有一片连续的细胞支持,还是仅靠边缘几个异常点决定。

看平滑是在谁和谁之间进行

速度流程通常在表达邻居图上计算局部矩,以缓解单个细胞计数稀疏的问题。它的代价是邻居选错时,也会把不同来源的信号混在一起。假如两个谱系同处增殖期,因共同细胞周期程序而变成近邻,流线就可能从一条谱系跨向另一条。对感兴趣的一段轨迹,把细胞的近邻分别按谱系、取材时间和供体计数,比只调绘图的线条密度更能定位问题。

下面用内置胰腺对象说明,先检查两层是否存在,再做筛选、计算邻域矩、拟合动力学和构建速度图。示例的近邻数用于演示。对小的候选谱系,应检查剩余细胞数和数据维度,再选择有意义的局部尺度。已执行这些处理的对象另存一份,避免在取对数后的数据上重新跑一遍预处理。动力学拟合及输出

import scvelo as scv

adata = scv.datasets.pancreas()
assert {"spliced", "unspliced"} <= set(adata.layers)
scv.pp.filter_and_normalize(adata, min_shared_counts=20)
scv.pp.moments(adata, n_pcs=30, n_neighbors=30)
scv.tl.recover_dynamics(adata)
scv.tl.velocity(adata, mode="dynamical")
scv.tl.velocity_graph(adata)

还有一种情况容易被误判为方向相反。设一位供体恰好贡献了全部早期细胞,另一位只贡献成熟细胞。画在一起,第一位的细胞看似缺成熟分子、第二位看似缺未剪接分子,拟合出的两段恰能拼成一条顺畅的曲线。把同一个基因相图按供体拆开,各供体内部却几乎没有状态跨度。此时需要的是同一供体或平行培养批次内覆盖多个时间点的材料。只把供体颜色从图上隐藏,无法补上缺失的观测。可以先给每一段标出含几个独立供体、各自最早与最晚的采样时间,让读者直接看到哪段方向有独立重复支持。

实跑经验|有真实时间顺序的模拟细胞也会出现反向边

我们安装 scVelo 0.3.4,用它的模拟器产生一百六十个细胞和二十四个基因,保留软件生成的真实时间作为验收参照。分析时只用表达和剪接层,在十个主成分上找十二个邻居,对十二个指定基因拟合动力学,再计算速度和有向速度图。十二个基因全部得到有限的转录率估计。速度图里共有 1,622 条正权重边,其中 1,408 条从较早细胞指向较晚细胞,占约 86.8%。若每条边按自己的权重计,指向较晚细胞的权重合计约占 93.6%。同一张图这两个比例都合理,一个按边数,一个按权重。它们都没有达到百分之百。

这套小实验给了一个比只看箭头更直接的检查。先看同一个起始细胞的几条候选边,弱的反向关系对整体方向的影响可能很小,再查是哪个基因或哪个邻域支持这些边。这里为了检验程序保留了较宽松的拟合筛选,数字只描述这次模拟。真实组织没有模拟器提供的真实时间,需用已知采样时点、标记和独立实验来复核。环境也影响能否复现,最初的 pandas 3.1.1 会在内部去重基因列表时中止,使用独立环境的 pandas 2.3.3、AnnData 0.12.19 后跑通。若拟合还没有开始就报类型错误,先记录版本和调用栈,再回头调邻居数。

一条看似跨过分支的箭头怎样复核

先选在分叉附近有连续覆盖的基因,画它们在相图中的点云,再把相同的细胞标到嵌入图上。若训练材料只有早期和末期两个时间点,中间过渡细胞几乎没有,即使平滑后能连出一条漂亮曲线,仍然缺少对中间状态的直接观测。检查每个时间点有多少细胞分布在分叉前后,特别要找出图中央的过渡区域是否由同一个供体或一次异常解离贡献。

可以设计一次有明确预期的对照。固定细胞集合、剪接计数和二维坐标,只改变邻居尺度,观察高维邻域支持的方向是否翻转。再固定邻域,将明显由同一应激程序驱动的基因暂时排除,重新拟合,记录哪一段消失。前者帮助定位跨谱系邻居,后者检验某一类基因是否主导投影。两项变化分开进行,才能向同事解释方向改变的来源。画流线时所用的图形网格还会进一步平滑,建议保留细胞级结果和相图供复查。

写图注时可以明确到这样的程度,早期样本富集区指向含较晚取材细胞的分支,若干剪接覆盖充分的基因给出一致趋势,某个供体缺少过渡细胞因此单独列明。若要进一步主张细胞确实经历了这条分化路线,还应寻找谱系示踪、脉冲标记或更多独立时间点的证据。待上游计数和验证方案确定后,需要给多份文库重复拟合时,可了解云生信的生物信息分析服务器。

把知识用于当前任务

下一步可以直接开始分析

按研究目标查找在线工具、课程、计算资源或完整分析服务。

按目标找方案仍有疑问,联系客服 ↗