如果说单细胞转录组数据分析中的聚类是寻找细胞的离散属性,那么轨迹推断就是寻找细胞分化连续性的尝试。

细胞多样性不能通过离散的分类系统(例如细胞聚类)充分描述。观察到的细胞异质性发展的生物进程是一个连续过程。因此,为了捕获细胞身份之间的过渡状态,我们需要动态的基因表达模型。这类方法称为轨迹推断(trajectory inference,TI)。

轨迹推断方法将单细胞数据视为连续过程的一个个快照。这一过程通过最小化相邻细胞之间的转录改变构建细胞空间的转换路径。这些路径上的细胞排序由伪时间变量 (pseudotime variable)描述。此变量是基于与根细胞的转录距离计算的,通常被解释为发育时间的代名词。

自Monocle和Wanderlust建立了TI(trajectory inference)领域以来,可用的TI方法数量激增。当前可用的TI方法的差别在于构建的发育轨迹模型拓扑结构复杂性不同,从简单的线性轨迹或二分支轨迹到复杂树形轨迹、多分支轨迹或组合多种拓扑结构轨迹。在最近对TI方法进行的全面比较中,发现没有一种单独的方法可以在所有类型的轨迹分析中都表现最优。相反,应根据预期轨迹的复杂性选择TI方法,研究比较表明Slingshot在简单轨迹分析如从线性轨迹到二分支和多分轨迹表现最佳。如果预期数据对应更复杂的轨迹,建议使用PAGA。如果知道精确的轨迹模型,则可以选择使用更特定的方法来提高性能。通常,应使用多种方法来确定评估推断出的轨迹,以避免方法偏差。

在典型的分析流程中,轨迹推断(TI)方法应用于降维后的数据。如果使用的TI工具自带了降维功能,则可以基于校正后的数据进行分析。由于通常在细胞内同时发生多种生物学过程,因此消除其他生物过程的影响对鉴定预期轨迹可能很有用。例如,T细胞在成熟过程中可能会经历细胞周期转换。此外,由于几种性能最好的TI方法依赖于聚类后的数据,因此TI通常在聚类之后执行。轨迹中的细胞簇可能表示稳态或亚稳态细胞。随后,可以将RNA velocities (RNA速度)叠加到轨迹上确认发育方向。(注:新生转录本成熟过程中需要进行剪接操作。对于一个稳定表达的基因,总会在细胞中找到存在一定比例的未剪接的非成熟RNA形式,用于补充老的转录本的降解。如果一个基因刚被激活,短时间内将会有高比例的未成熟转录本。相反,当一个基因被抑制时,转录过程会早于转录本降解过程而被抑制,未成熟转录本的比例会降低。因此对于细胞中每个基因,未剪接的mRNA相对于剪接的mRNA的比例(RNA velocity)可以推断瞬时表达动力学,进一步推演组织内发生的细胞转变。

推断的轨迹不一定要完全对应生物发育过程。首先,推断的轨迹仅表示转录相似性。很少有TI方法在其模型中包括不确定性评估。因此,需要更多的信息来验证是否确实捕获了生物过程。这些信息可以来源于干扰实验、推断的调控基因动力学以及RNA velocity数据的支持等。

下面是基于scanpy的细胞分化轨迹推断实例,首先,从scanpy加载用于重建骨髓和血红细胞分化的数据:

import numpy as np
import pandas as pd
import matplotlib.pyplot as pl
from matplotlib import rcParams
import scanpy as sc
%matplotlib inlinesc.settings.verbosity = 3  # verbosity: errors (0), warnings (1), info (2), hints (3)
sc.logging.print_versions()
results_file = './write/paul15.h5ad'
sc.settings.set_figure_params(dpi=80, frameon=False, facecolor='white')  # low dpi (dots per inch) yields small inline figuresadata = sc.datasets.paul15()
"""
adata
AnnData object with n_obs × n_vars = 2730 × 3451obs: 'paul15_clusters'uns: 'iroot'
"""

我们使用比默认的’float32’更高的精度,以确保在不同计算平台上获得相同的结果:

adata.X = adata.X.astype('float64')  # this is not required and results will be comparable without it

下一步进行预处理和可视化,这里采用一个简单的预处理方法:

sc.pp.recipe_zheng17(adata)
sc.tl.pca(adata, svd_solver='arpack')
sc.pp.neighbors(adata, n_neighbors=4, n_pcs=20)
sc.tl.draw_graph(adata)
sc.pl.draw_graph(adata, color='paul15_clusters', legend_loc='on data')

上面的结果看起来非常混乱,为了去除噪声,我们将数据从PCA空间表达到扩散映射空间(diffusion map space),使用少量的扩散组件计算距离实现去噪:

sc.tl.diffmap(adata)
sc.pp.neighbors(adata, n_neighbors=10, use_rep='X_diffmap')
sc.tl.draw_graph(adata)
sc.pl.draw_graph(adata, color='paul15_clusters', legend_loc='on data')

对数据进行聚类:

sc.tl.louvain(adata, resolution=1.0)

使用标记基因注释聚类的簇:

简单起见,对于粗粒度可视化,计算PAGA图(一种粗粒度的简图),不重要的边会根据阈值被移除。

sc.tl.paga(adata, groups='louvain')
sc.pl.paga(adata, color=['louvain', 'Hba-a2', 'Elane', 'Irf8'])

sc.pl.paga(adata, color=['louvain', 'Itga2b', 'Prss34', 'Cma1'])


可以看到上面的框架图,其实是无向图,点的颜色代表不同的簇,点的大小代表该簇细胞的数量,连线只有一种颜色,线的宽度代表两个簇之间的相关性。这个简图是没有时间概念的,然而每个细胞都有自己的分化方向,因此,要在这个基础上推断一个具有顺序信息的结构。

首先,重新注释PAGA图中的簇:

adata.obs['louvain'].cat.categories
"""
Index(['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12','13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23', '24'],dtype='object')
"""
adata.obs['louvain_anno'] = adata.obs['louvain']
adata.obs['louvain_anno'].cat.categories = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10/Ery', '11', '12','13', '14', '15', '16/Stem', '17', '18', '19/Neu', '20/Mk', '21', '22/Baso', '23', '24/Mo']sc.tl.paga(adata, groups='louvain_anno')
sc.pl.paga(adata, threshold=0.03, show=False)


使用PAGA初始化重新计算embedding:

sc.tl.draw_graph(adata, init_pos='paga')
sc.pl.draw_graph(adata, color=['louvain_anno', 'Itga2b', 'Prss34', 'Cma1'], legend_loc='on data')


设置颜色:

pl.figure(figsize=(8, 2))
for i in range(28):pl.scatter(i, 1, c=sc.pl.palettes.zeileis_28[i], s=200)
pl.show()zeileis_colors = np.array(sc.pl.palettes.zeileis_28)
new_colors = np.array(adata.uns['louvain_anno_colors'])new_colors[[16]] = zeileis_colors[[12]]  # Stem colors / green
new_colors[[10, 17, 5, 3, 15, 6, 18, 13, 7, 12]] = zeileis_colors[[5, 5, 5, 5, 11, 11, 10, 9, 21, 21]]  # Ery colors / red
new_colors[[20, 8]] = zeileis_colors[[17, 16]]  # Mk early Ery colors / yellow
new_colors[[4, 0]] = zeileis_colors[[2, 8]]  # lymph progenitors / grey
new_colors[[22]] = zeileis_colors[[18]]  # Baso / turquoise
new_colors[[19, 14, 2]] = zeileis_colors[[6, 6, 6]]  # Neu / light blue
new_colors[[24, 9, 1, 11]] = zeileis_colors[[0, 0, 0, 0]]  # Mo / dark blue
new_colors[[21, 23]] = zeileis_colors[[25, 25]]  # outliers / greyadata.uns['louvain_anno_colors'] = new_colorssc.pl.paga_compare(adata, threshold=0.03, title='', right_margin=0.2, size=10, edge_width_scale=0.5,legend_fontsize=12, fontsize=12, frameon=False, edges=True, save=True)


为一组给定的基因重建沿 PAGA 路径的基因变化,为扩散伪时间选择一个根cell:

adata.uns['iroot'] = np.flatnonzero(adata.obs['louvain_anno']  == '16/Stem')[0]
sc.tl.dpt(adata)

选择一些mark基因名称:

gene_names = ['Gata2', 'Gata1', 'Klf1', 'Epor', 'Hba-a2',  # erythroid'Elane', 'Cebpe', 'Gfi1',                    # neutrophil'Irf8', 'Csf1r', 'Ctsg']                     # monocyte

在原始数据上可视化:

左图是细胞聚类的分布,右图即呈现了细胞分化过程的分布。

Scanpy(四).细胞分化轨迹推断相关推荐

  1. NBT|45种单细胞轨迹推断方法比较,110个实际数据集和229个合成数据集

    摘要 轨迹推断(Trajectory Inference,TI),是分析从千上万单细胞的组学数据中推断细胞发育轨迹的重要方法,也被称为伪时序分析 (pseudotime analysis),该方法根据 ...

  2. Scanpy(四)使用ingest和BBKNN整合数据

    目录 PBMCs Mapping PBMCs using ingest Using BBKNN 总结 Pancreas 查看批次效应 BBKNN 使用ingest映射到reference批次 一致性评 ...

  3. origin数据平滑_独门绝技!Origin挑战绘制细胞分化轨迹热图

    |撰文:莫北 热图是组学文章中最常见的展示基因表达模式的图表. 在单细胞转录组拟时分析中最令人印象深刻的是细胞分化轨迹热图. 那么,这种复杂热图,Origin可以绘制吗?答案是肯定可以!绘制效果如下: ...

  4. Java 编程问题:四、类型推断

    原文:Java Coding Problems 协议:CC BY-NC-SA 4.0 贡献者:飞龙 本文来自[ApacheCN Java 译文集],自豪地采用谷歌翻译. 本章包括 21 个涉及 JEP ...

  5. 六自由度机器人(机械臂)运动学建模及运动规划系列(四)——轨迹规划

    本篇目录 一.轨迹规划概述 二.关节空间规划 1. 点对点规划 2. 多节点规划 示例程序 三.笛卡尔空间规划 1. 速度规划 2. 位置规划 3. 姿态插补 4. 基于几何解法的一种简化位置规划方法 ...

  6. Slingshot|单细胞轨迹推断r包

    看Cross-tissue organization of the fibroblast lineage的时候发现作者使用了Slingshot这个r包来做拟时序分析,尝试使用了一下. 一.加载数据,转 ...

  7. 运动规划四:轨迹优化

    最小 SNAP 轨迹产生 1. Introduction 2. Minimum Snap Optimization 2.1 微分平坦 2.2 Minimum-snap 2.1 问题描述 3. Clos ...

  8. 无人驾驶车辆模型预测控制第四章轨迹跟踪代码(圆形篇)下

    目录 4.Simulink框图搭建 5.MPC代码 注解:克罗内克积 代码详解与推导过程一致:线性时变模型预测控制推导_更适合青年研究者的资源库!公众号:杰哥的无人驾驶便利店-CSDN博客_线性系统模 ...

  9. 轨迹分析_单细胞轨迹分析知多少拟时间分析比较

    轨迹推断(TI,trajectory inference)可以根据测序细胞之间表达模式的相似性对单细胞沿着轨迹进行排序,以此来模拟细胞动态变化的过程,是单细胞研究应用中一种常用且重要的方法,轨迹推断也 ...

最新文章

  1. PWA即将推向所有Chrome平台
  2. 3.1 基础-抛小球
  3. 牛客题霸 [ 寻找峰值] C++题解/答案
  4. Protocol Buffers的应用与分析
  5. C/C++只做经典编程语言
  6. 2020字符串的插入(C++,stringchar*)
  7. Linux中的软硬连接
  8. 内核常见锁的机制与实现分析1
  9. android大智慧安装目录,大智慧新一代目录文件结构
  10. html5移动web开发实战必读书记
  11. SQLPro for SQLite for Mac(数据库管理软件)
  12. 多个完整设计的单片机、8086、STM32制作教程和资料-转发分享
  13. Windows上使用 OpenOCD 给 STM32 下载程序
  14. sunlight的中文_DianaVickersSunlight中文歌词
  15. 计算机的格式刷,“excle怎样取消格式刷“电脑上格式刷怎么用excel2000
  16. MyBatis系列之--Java 项目(非SpringBoot)集成MyBatis
  17. 旅行好帮手:精准可靠的航班动态数据服务
  18. 仪控功能测试仿真设备ETest
  19. (RS485 232串口通信数据解析实用干货(1)
  20. vue使用百度地图 vue-baidu-map

热门文章

  1. 当前主流、最新技术回眸(三)
  2. Kubernetes 集群无损升级实践
  3. 因论文《致谢》走红全网的中科院博士,如今已是腾讯大佬!
  4. 图解|打工人看腾讯这道多线程面试题
  5. 腾讯信息流热点挖掘技术实践
  6. 阿里文娱搜索算法实践与思考
  7. 查询太慢?看看ES是如何把索引的性能压榨到极致的!
  8. 使用BigQuery ML预测天气(6.19)
  9. 六月第一枪:股市震荡,下一步该做什么?
  10. 远程办公让企业生产力大打折扣?那是你的打开方式错了