单细胞轨迹分析旨在重建细胞从一种状态(如干细胞)转变为另一种状态(如分化终末细胞)的连续过程。 传统方法如Monocle、PAGA、RNA velocity面临:
# 使用scVelo + GNN增强RNA velocity
import scvelo as scv
import torch_geometric
adata = scv.read('data.h5ad')
scv.pp.filter_and_normalize(adata)
scv.pp.moments(adata)
# 标准velocity分析
scv.tl.velocity(adata, mode='stochastic')
scv.tl.velocity_graph(adata)
# 用GNN优化velocity图
# (需要额外的GNN模块,此处为示意)
from deepvelo import GNNRefiner
refined_graph = GNNRefiner.refine(adata.uns['velocity_graph'])
import palantir
# 预处理
adata = sc.read_h5ad('hematopoiesis.h5ad')
sc.pp.neighbors(adata, n_neighbors=30)
sc.tl.diffmap(adata)
# 运行Palantir
pr_res = palantir.core.run_palantir(
adata,
early_cell='HSC_001', # 指定起始细胞
num_waypoints=500
)
# 可视化分化势能和伪时序
palantir.plot.plot_palantir_results(pr_res, adata)
import cellrank as cr
# 计算细胞转换核(transition kernel)
cr.tl.terminal_states(adata, cluster_key='celltype')
cr.tl.initial_states(adata, cluster_key='celltype')
# 计算吸收概率(细胞最终分化到各终末状态的概率)
cr.tl.lineages(adata)
# 可视化Waddington景观
cr.pl.lineages(adata, same_plot=True)
CellRank整合了RNA velocity、细胞-细胞相似性和实验时间信息, 使用马尔可夫链建模细胞状态转换,支持多种计算后端(velocity、伪时序、Waddington-OT)。
import scanpy as sc
import scvelo as scv
import cellrank as cr
# 1. 加载数据并预处理
adata = sc.datasets.pbmc3k()
sc.pp.filter_cells(adata, min_genes=200)
sc.pp.filter_genes(adata, min_cells=3)
sc.pp.normalize_total(adata)
sc.pp.log1p(adata)
# 2. 降维和聚类
sc.pp.highly_variable_genes(adata)
sc.tl.pca(adata)
sc.pp.neighbors(adata)
sc.tl.umap(adata)
sc.tl.leiden(adata)
# 3. RNA velocity分析
scv.pp.moments(adata, n_pcs=30, n_neighbors=30)
scv.tl.velocity(adata, mode='dynamical')
scv.tl.velocity_graph(adata)
# 4. CellRank推断细胞命运
cr.tl.terminal_states(adata, cluster_key='leiden', method='leiden')
cr.tl.initial_states(adata, cluster_key='leiden')
cr.tl.lineages(adata)
# 5. 识别关键转换驱动基因
cr.tl.lineage_drivers(adata)
# 6. 可视化
cr.pl.lineages(adata, same_plot=False)
scv.pl.velocity_embedding_stream(adata, basis='umap', color='leiden')
# 使用Cyclum检测周期性轨迹
from cyclum import Cyclum
cy = Cyclum(adata.X)
theta = cy.fit_predict() # 返回每个细胞在周期中的相位
adata.obs['cell_cycle_phase'] = theta
# 使用CellRank比较两个条件的轨迹差异
cr.tl.terminal_states(adata, cluster_key='celltype', method='eigengap')
cr.tl.lineages(adata, cluster_key='celltype')
# 分别计算每个条件的吸收概率
for condition in ['control', 'treated']:
adata_subset = adata[adata.obs['condition'] == condition]
cr.tl.lineages(adata_subset)
© 2025 知识库 | 返回首页