用途
scVelo 是单细胞 RNA 测序数据 RNA 速率分析的主流 Python 包。它通过建模 mRNA 剪接动力学,利用未剪接(前体 mRNA)与已剪接(成熟 mRNA)丰度的比例,判断每个细胞中基因处于上调还是下调状态,从而在无需时间序列数据的情况下重建发育轨迹并识别细胞命运决定。
适用场景包括:从快照数据推断轨迹方向、预测细胞命运、识别驱动基因、发育生物学建模(如造血、神经发生、上皮-间质转化)、潜在时间估计,以及为 Scanpy 的 UMAP 嵌入补充方向信息。
前置条件
scVelo 需要同时提供未剪接和已剪接 RNA 的计数矩阵,可由以下工具生成:
- STARsolo 或 kallisto|bustools 的 lamanno 模式
- velocyto CLI:velocyto run10x / velocyto run
- alevin-fry / simpleaf 的 spliced/unspliced 输出
数据存储在 AnnData 对象中,需包含 layers["spliced"] 和 layers["unspliced"]。
主要能力
- 速率估计:支持 stochastic(随机)、deterministic(确定性)与 dynamical(动力学)三种模型。随机模型速度快,适合探索性分析;动力学模型拟合完整剪接动力学,精度更高,适合发表级分析与驱动基因识别。
- 潜在时间与伪时间:动力学模型可计算共享潜在时间(latent_time),也可计算基于速率的伪时间(velocity_pseudotime)。
- 驱动基因分析:通过 rank_velocity_genes 识别速率拟合最高的基因,并计算速率长度与置信度。
- 可视化:支持 UMAP 上的速率箭头图、流线图、相图(phase portraits)、按潜在时间排序的热图,以及速率信息驱动的 PAGA 轨迹图。
使用方式
安装:uv pip install scvelo
标准工作流:
- 加载数据:使用 scv.read 读取 loom 文件,或用 scv.utils.merge 将 velocyto loom 与 Scanpy 处理后的 AnnData 合并。
- 预处理:scv.pp.filter_and_normalize 过滤基因并按细胞归一化(scVelo 0.3 起不再接受 n_top_genes,也不再做对数转换,对数步骤与高变基因选择由 Scanpy 完成);随后用 sc.pp.log1p、sc.pp.highly_variable_genes、sc.pp.neighbors,再用 scv.pp.moments 计算一阶与二阶矩。
- 速率估计:随机模型用 scv.tl.velocity(mode='stochastic') 与 scv.tl.velocity_graph;动力学模型先 scv.tl.recover_dynamics,再 scv.tl.velocity(mode='dynamical') 与 scv.tl.velocity_graph。
- 下游分析:scv.tl.latent_time、scv.tl.rank_velocity_genes、scv.tl.velocity_confidence、scv.tl.velocity_pseudotime、scv.tl.paga。
- 可视化:scv.pl.velocity_embedding_stream、scv.pl.velocity_embedding、scv.pl.scatter、scv.pl.heatmap、scv.pl.velocity、scv.pl.paga。
运行后 AnnData 会新增以下字段:layers 中的 velocity、fit_t;obsm 中的 velocity_umap;obs 中的 velocity_pseudotime、latent_time、velocity_length、velocity_confidence;var 中的 fit_likelihood、fit_alpha、fit_beta、fit_gamma;uns 中的 velocity_graph。
模型对比
- stochastic:速度快,精度中等,适合探索与大数据集。
- deterministic:速度中等,精度中等,适合简单线性动力学。
- dynamical:速度慢,精度高,适合发表级分析与驱动基因识别。
最佳实践
- 先用随机模式探索,最终分析切换到动力学模式。
- 需要良好的未剪接读段覆盖:短读长(< 100 bp)可能无法覆盖内含子。
- 建议至少 2,000 个细胞,细胞数过少时速率噪声较大。
- 速率应具有一致性:箭头应遵循已知生物学,随机性表明存在问题。
- k-NN 带宽需权衡:邻居过少导致速率噪声大,过多则过度平滑。
- 合理性检查:根细胞(祖细胞)的标记基因应具有较高的未剪接/已剪接比例。
- 动力学模型需要明确的动力学状态,最适合清晰的分化过程。
限制与故障排查
- 缺少 unspliced 层:需重新运行 velocyto,或使用 STARsolo 的 --soloFeatures Gene Velocyto。
- 速率基因过少:降低 min_shared_counts,检查测序深度。
- 箭头看起来随机:尝试不同的 n_neighbors 或速率模型。
- 动力学模型内存错误:设置 n_jobs=1,减少 n_top_genes。
- 速率处处为负:检查 spliced/unspliced 层是否被交换。
相关资源
- 文档:https://scvelo.readthedocs.io/
- 教程:https://scvelo.readthedocs.io/tutorials/
- GitHub:https://github.com/theislab/scvelo
- 论文:Bergen V et al. (2020) Nature Biotechnology. PMID: 32747759
- velocyto(预处理):http://velocyto.org/
- CellRank(命运预测,扩展 scVelo):https://cellrank.readthedocs.io/
- dynamo(代谢标记替代方案):https://dynamo-release.readthedocs.io/
相关技能:scanpy(标准单细胞 RNA 测序分析流程)、openpiv(OpenPIV 粒子图像测速分析)。