4.1 轨迹分析与拟时序 本节摘要:轨迹分析把一份"快照"里的连续状态细胞重新排成一条带方向的伪时间轴,回答"细胞沿什么路径在变"。它依赖两个前提——数据覆盖了连续的分化过程、且双联体与应激已被控制——否则会产出漂亮却虚假的路径。本节讲清原理、工具选择与完整的 Scanpy 拟时序流程。 把时间找回来 单细胞测序杀死细胞才能读它,所以每份样本只是一瞬间的人群快照。但分化是连续过程:造血干细胞变成前体、再变成成熟血细胞,路径上每个过渡状态的细胞都会同时出现在样本里——数量足够大时,快照等于把一条时间路径上的所有站点同时拍了下来。轨迹分析(trajectory inference)的思路就是把这些"站点"按转录组相似性重新连起来,给每个细胞算一个进度值:离起点近的靠前、离起点远的靠后。
本节摘要:轨迹分析把一份"快照"里的连续状态细胞重新排成一条带方向的伪时间轴,回答"细胞沿什么路径在变"。它依赖两个前提——数据覆盖了连续的分化过程、且双联体与应激已被控制——否则会产出漂亮却虚假的路径。本节讲清原理、工具选择与完整的 Scanpy 拟时序流程。
单细胞测序杀死细胞才能读它,所以每份样本只是一瞬间的人群快照。但分化是连续过程:造血干细胞变成前体、再变成成熟血细胞,路径上每个过渡状态的细胞都会同时出现在样本里——数量足够大时,快照等于把一条时间路径上的所有站点同时拍了下来。轨迹分析(trajectory inference)的思路就是把这些"站点"按转录组相似性重新连起来,给每个细胞算一个进度值:离起点近的靠前、离起点远的靠后。这个进度值与真实时间没有换算关系,所以叫伪时间(pseudotime)——它有序、但不以小时计。
先判断你的数据适不适合做轨迹,比学算法重要。适合的形态是:UMAP 图上细胞呈连续渐变的"流"状(造血、发育、重编程、上皮间质转化),而非离散分块的"岛"状(外周血的成熟细胞类型混合)。后者硬做轨迹,得到的"路径"只是把没有过渡关系的细胞类型串成线,解读起来全是误导。
import scanpy as sc # 只取参与连续过程的细胞(示例:单核细胞到树突细胞的分化段) sub = adata[adata.obs["celltype"].isin(["Monocyte", "DC precursor", "DC"])].copy() sc.pp.pca(sub) sc.pp.neighbors(sub) sc.tl.diffmap(sub) # 扩散映射:轨迹的骨架空间 sc.tl.dpt(sub, n_branchings=1, n_dcs=10) # 拟时序 sc.pl.umap(sub, color=["dpt_pseudotime"])
Seurat 生态里常用 Monocle 系列完成同样的事:把 Seurat 对象转成 Monocle 的 cell_data_set,learn_graph 学主图、order_cells 指定起点后输出拟时序。起点(root)的选择是拟时序的第一决策:通常取已知最原始状态的细胞群(如造血数据里的造血干细胞),起点选错整条时间轴就反了方向——这是拟时序结果必须人工核验的第一处。

轨迹工具比任何其他单细胞分支都多,但可以按"用谁的信息定方向"归成三类。第一类只用当前表达谱:Monocle 系列在降维空间学一条主图再排序,扩散拟时(DPT)沿扩散映射的成分排序,Slingshot 沿主曲线排——这类方法假设"转录组相似度顺序即时间顺序",多数场景够用。第二类引入图拓扑:PAGA 把粗粒度的群间连通性算出来,先看"群与群之间有没有过渡通道"再谈排序,适合与上述方法组合使用。第三类借用新的分子证据:RNA velocity(RNA 速率)比较每个基因的剪接与未剪接读段比例——未剪接分子富集意味着该基因正在上调、细胞正走向表达它更高的状态,从而给路径装上方向箭头;scVelo 的动态模型是当前的主流实现。
方向是轨迹解读的生命线,所以 RNA 速率值得当第二意见:常规拟时序定顺序、速率检验方向,两者一致时结论才敢写进论文。注意速率分析对测序深度与内含子注释敏感,图谱类浅测序数据上噪声不小,参考价值打折扣。
轨迹分析翻车有固定剧本。第一种是双联体驱动的假过渡:嵌合细胞的表达谱恰好在两类细胞之间,轨迹算法把它们连成"过渡态",于是 A 型到 B 型的"直接分化"路径凭空出现——回看 3.2 节的剔除记录与群间桥位置的检查,是唯一的防线。第二种是应激驱动的假连续:解离应激基因让所有细胞类型共享一层"应激轴",轨迹会误把它当成主干;看拟时序与应激得分的相关性,高相关即警报。第三种是起点选错导致方向颠倒:拟时序与已知时序标记(比如发育数据的胚胎日龄、造血数据的干性得分)对照一遍,反向就重选起点。三条防线共同的底层逻辑是:轨迹是解释,不是事实——它必须与独立的生物学证据(时序标记、谱系示踪、时间梯度样本)交叉验证后才算数。
拟时序坐标之外,轨迹分析还有一层常被忽略的产出:沿时间轴的表达变化。做法是把细胞按拟时序排成一列,对每个基因拟合表达随伪时间的平滑曲线,找出"随时间上升""下降""分支特异性"的基因——这些就是路径上的分子事件。再往上一层,把上升基因送进 4.3 节的富集分析,能把"这条路径上发生了什么"从基因名单升级成通路叙事(比如早期富集细胞周期、晚期富集基质互作)。分支处的差异比较(两个命运分支的细胞在分歧点附近的表达差)则是命运决定基因的候选来源,与 4.2 节的调控网络分析天然衔接:分支差异基因里富集的转录因子结合基序,就是命运主控的线索。
单靠转录组不能——伪时间只是转录状态的排序,与钟表时间没有内在换算。有真实时间锚点时可以间接校准:多时间点采样(第几天、第几周)给快照盖上时间戳,把每段拟时序锚定在真实时间轴上,甚至能估算细胞状态转换的速率。没有时间梯度时,只能靠已知的时间依赖事件(比如某标记只在特定发育日表达)做粗略标定,解读时要明确标注"这是推断的时间顺序,不是测量的小时数"。
两者都基于邻居图,回答的问题不同。UMAP 把图压成二维给人看,边与距离都是变形过的视觉近似;PAGA(分区图抽象)把图粗粒化成"群与群之间的连通性网络"——它问的是哪两个 cluster 之间存在持续的细胞过渡、哪些群之间根本没有通道。做轨迹前先看 PAGA 图是值得养成的习惯:连通骨架清晰的样本适合继续排拟时序,连通性散乱的样本(各群互不相连)说明数据是离散混合,硬排出来的路径不可信。一句话分工:PAGA 判断"有没有路",拟时序决定"路有多长、往哪走"。
轨迹回答"细胞在变成什么",下一个问题是"细胞之间此刻在交流什么"。配体受体共表达如何变成一张信号网络,这是下一节的主题。