关于 single-trajectory-analysis
single-trajectory-analysis 是用于复现和扩展 omicverse 单细胞轨迹分析的技能,面向研究单细胞分化与细胞命运的分析人员。它结合图方法、RNA velocity 和命运评分,并说明多种 velocity 后端、验证与可视化流程。
主要功能
- 01PAGA、Palantir 与 VIA 轨迹分析
- 02VIA 与 scVelo velocity 耦合
- 03统一调用四种 velocity 后端
- 04比较伪时间与分支概率
- 05导出结果并可视化轨迹
适用场景
- 01分析单细胞分化路径与终末状态
- 02用 RNA velocity 校验轨迹方向
- 03比较不同 velocity 后端结果
- 04导出伪时间和命运概率供后续分析
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ omicverse/ omicverse --skill single-trajectory-analysis安装后在 Claude Code 中输入/single-trajectory-analysis确认已加载。
附带文件reference.md
详细介绍
单轨迹分析技能
概述
本技能介绍如何在 omicverse 中复现和扩展单轨迹分析工作流,结合基于图的轨迹推断、RNA velocity 耦合和下游命运评分笔记本。
轨迹设置
- PAGA(基于分区的图抽象)
- 在预处理后的 AnnData 对象上构建邻域图(
pp.neighbors)。 - 使用
tl.paga计算簇间连通性,并使用tl.draw_graph或tl.umap(设置init_pos='paga')进行嵌入。 - 解读边权重,以优先确定分支解析和种子路径。
- 在预处理后的 AnnData 对象上构建邻域图(
- Palantir
- 在扩散成分上运行
Palantir,并使用手动选择的起始细胞(例如初始 T 细胞)作为种子。 - 提取伪时间、分支概率和分化潜能,以便后续叠加分析。
- 在扩散成分上运行
- VIA
- 在 kNN 图上执行
via.VIA,通过自动选择根节点或用户指定根节点来识别谱系进程。 - 导出终末状态和伪时间,与 PAGA 和 Palantir 结果进行交叉验证。
- 在 kNN 图上执行
Velocity 耦合(VIA + scVelo)
- 使用
scv.pp.filter_and_normalize、scv.pp.moments和scv.tl.velocity生成 velocity 层。 - 将
adata.layers['velocity']提供给 VIA,以优化谱系方向性(via.VIA(..., velocity_weight=...))。 - 将 VIA 伪时间与 scVelo 潜在时间(
scv.tl.latent_time)进行比较,以验证方向性和根节点选择。
高级 RNA Velocity 后端(ov.single.Velo)
OmicVerse 提供统一的 Velo 类,封装了 4 种 velocity 后端。需要超越基础 scVelo 功能时可使用:
后端选择指南
| 后端 | 最适用场景 | GPU? | 前提条件 |
|---|---|---|---|
| scvelo | 标准 velocity 分析 | 否 | spliced/unspliced 层 |
| dynamo | 动力学建模、向量场 | 否 | spliced/unspliced 层 |
| latentvelo | 基于 VAE、批次校正、复杂动力学 | 是(torchdiffeq) | celltype_key,batch_key 可选 |
| graphvelo | 在任意后端之上进行精修 | 否 | 基础 velocity + connectivities |
统一的 Velo 流程
import omicverse as ov
velo = ov.single.Velo(adata)
# 1. Filter (scvelo backend) or preprocess (dynamo backend)
velo.filter_genes(min_shared_counts=20) # For scvelo
# velo.preprocess(recipe='monocle', n_neighbors=30, n_pcs=30) # For dynamo
# 2. Compute moments
velo.moments(backend='scvelo', n_pcs=30, n_neighbors=30)
# backend: 'scvelo' or 'dynamo'
# 3. Fit kinetic parameters
velo.dynamics(backend='scvelo')
# 4. Calculate velocity
velo.cal_velocity(method='scvelo')
# method: 'scvelo', 'dynamo', 'latentvelo', 'graphvelo'
# 5. Build velocity graph and project to embedding
velo.velocity_graph(basis='umap')
velo.velocity_embedding(basis='umap')
latentvelo 详情(深度学习 velocity)
latentvelo 使用 VAE + 神经 ODE 学习潜在动力学。与传统 scVelo 相比,它能更好地处理批次效应和复杂轨迹:
velo.cal_velocity(
method='latentvelo',
celltype_key='cell_type', # Optional: AnnotVAE uses cell type info
batch_key='batch', # Optional: batch correction
velocity_key='velocity_S',
n_top_genes=2000,
latentvelo_VAE_kwargs={}, # Pass custom VAE hyperparameters
)
# Requires: pip install torchdiffeq
# Uses GPU if available, falls back to CPU
graphvelo 详情(精修层)
GraphVelo 利用细胞图结构,优化任意基础方法得出的 velocity 估计值。在 scvelo 或 dynamo 之后运行:
# First: compute base velocity with scvelo or dynamo
velo.cal_velocity(method='scvelo')
# Then: refine with graphvelo
velo.graphvelo(
xkey='Ms', # Spliced moments key
vkey='velocity_S', # Base velocity key to refine
basis_keys=['X_umap', 'X_pca'], # Project to multiple embeddings
gene_subset=None, # Optional: restrict to gene subset
)
下游命运评分笔记本
- CellFateGenie:要发现与伪时间相关的基因,请使用
search_skills('CellFateGenie fate genes')加载专用的 CellFateGenie 技能。 t_metacells.ipynb:汇总元细胞轨迹,用于稳健性检查和元状态差异表达分析。
所需的预处理
- 质量控制:移除低质量细胞/基因,并进行双细胞过滤。
- 归一化和对数转换(
sc.pp.normalize_total、sc.pp.log1p)。 - 针对免疫数据集选择高变基因(
sc.pp.highly_variable_genes)。 - 必要时进行批次校正(例如
scvi-tools、bbknn)。 - 计算所有轨迹方法共用的 PCA、邻域图和嵌入(UMAP/FA)。
- 对于 velocity,在运行 VIA 耦合前,基于同一邻域图计算矩。
参数调优
- 应在 PAGA、VIA 和 Palantir 之间统一邻域图参数
n_neighbors和n_pcs,以保持一致性。 - 对于 VIA,可针对采样不均的数据集调整
knn、too_big_factor和root_user。 - Palantir 需要谨慎选择起始细胞;请使用标记基因和 velocity 箭头进行确认。
- 对于 PAGA,调整
threshold以控制边的稀疏度;确保连通分量反映生物学分支。 - Velocity 估计:比较 scVelo 中的
mode='stochastic'和mode='dynamical';如果终末状态与 VIA 不一致,则重新校准。
可视化与导出
- 在 UMAP 上叠加 PAGA 边(
scv.pl.paga),并标注分支标签。 - 在嵌入图上绘制 Palantir 拟时序和分支概率。
- 使用
via.plot_fates和via.plot_scatter可视化 VIA 轨迹。 - 将拟时序表和命运概率导出为 CSV,供下游 Notebook 使用。
- 保存高分辨率图(PNG/SVG)和 Notebook 产物,以便复现。
- 分享前,使用一致的配色方案和元数据列更新 Notebook。
防御性验证模式
# Before PAGA: verify neighbor graph exists
assert 'neighbors' in adata.uns, "Neighbor graph required. Run sc.pp.neighbors(adata) first."
# Before VIA velocity coupling: verify velocity layers exist
if 'velocity' not in adata.layers:
print("WARNING: velocity layer missing. Run scv.tl.velocity(adata) first for VIA coupling.")
assert 'spliced' in adata.layers and 'unspliced' in adata.layers, \
"Missing spliced/unspliced layers. Check loom/H5AD import preserved velocity layers."
# Before Palantir: verify PCA/diffusion components
assert 'X_pca' in adata.obsm, "PCA required. Run ov.pp.pca(adata) first."
故障排除提示
- 缺少速度层:重新运行
scv.pp.moments和scv.tl.velocity,确保存在adata.layers['spliced']/['unspliced'];验证 loom/H5AD 导入时保留了这些层。 - PAGA 图不连通:检查邻居图或调整
n_neighbors;确认批次校正没有将流形分割开。 - Palantir 收敛问题:减少扩散分量,或重新初始化起始细胞;确保数据矩阵中没有 NaN 值。
- VIA 终末状态不稳定:增加迭代次数(
cluster_graph_pruning_iter),或根据标记物表达提供手动终末状态提示。 - Notebook 内核内存错误:对细胞进行下采样,或在重新运行前预计算汇总数据(metacells)。
- latentvelo
ImportError: torchdiffeq:使用pip install torchdiffeq安装。神经 ODE 后端需要此依赖。 - graphvelo 返回 NaN 速度:确保已先计算基础速度(scvelo/dynamo)。graphvelo 用于细化速度,不会从头开始计算。
- dynamo
preprocess失败:dynamo 需要 spliced/unspliced 层。使用'spliced' in adata.layers验证。
评论
支持 Markdown