Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >单细胞拟时序/轨迹分析原理及monocle2流程学习和整理

单细胞拟时序/轨迹分析原理及monocle2流程学习和整理

原创
作者头像
凑齐六个字吧
发布于 2024-09-09 12:20:37
发布于 2024-09-09 12:20:37
1K02
代码可运行
举报
文章被收录于专栏:单细胞单细胞
运行总次数:2
代码可运行

在生命演进的过程中机体会随着时间的变化而产生不同的变化。从婴幼儿长大为成年人再到老年人的过程中,我们的身体机能经历了从"弱-强-弱"的变化过程(宽泛的说),以年为单位来看,有可能我们在10多岁的时候一年内一下子长高了几十厘米,也有可能在年过百半之后的某一年内突然感觉自己一下子精力大不如前;而以天为单位来看,虽然我们无法从肉眼上看出每个个体在短短24小时有什么显著变化,但事实上我们身体中的某些细胞有可能已经在这二十四小时内过完了它短暂的一生。

这种演进变化从表象来看可以粗暴的归结为“蛋白质的动态变化"(从中心法则来看蛋白质是表征生物体所有特征的最末尾环节),那么再往前推导一下,这种蛋白质的动态变化就是由于不同的基因表达(首先个体的基因组是不变的,但是从纵向来看随着时间的变化基因组的表达可能出现变化,从横向来看不同器官之间的基因组表达也截然不同,以此类推)而导致的。而探究这种演进变化,解码生物体的“动态变化的秘密”就是研究者所关注的重点。

通常情况下,研究者可以在实验的过程中通过多分组情况来构建不同时间点的生物模型,但即使铆足劲了进行分组,人工情况下也绝不可能进行大批量的实验。那么如何来模拟这种情况?拟时序(Pseudotime)/轨迹分析(Trajectory Analysis)就应运而生了。

这种分析方法可以通过测序细胞瞬态情况下的表达模式相似性构建出细胞的分化/生长/变化轨迹,来模拟细胞动态变化的过程。但这种方法也只能是进行“推断”,甚至很多时候还需要我们具有一定的先验知识去定义变化的起点(或者是选择轨迹)(那这个就挺主观了hhhh),并且要知道导入的数据其实也并不是真正具有时间维度的,只是表示细胞在某个生物过程中中的相对位置(位置由其基因表达模式决定,模拟出了时间维度)。所以笔者有时候觉得这种分析方法只是一种数据的呈现工具hhh,但不可否认的是,这种分析方法的出现也让我们能够进一步得去了解生物体的动态变化,也许在未来随着技术/数据量的提升之后可以做到真正的时序/轨迹分析。

此外我们还需要了解一下它的算法和生物学原理之间的联系,这块在youtube视频资料、曾老师和Hayley的笔记已经详细的整理了(链接见参考资料),笔者就稍作提炼。

1、轨迹分析的关键步骤是降维和轨迹建模,降维是把复杂的数据拆解为不同的关键部分,而这每个关键部分又可以跟生物学上不同的特征相映射在一起,之后再通过定义轨迹的起点和终点来构建出轨迹的形状

2、降维的方法主要包括线性降维(PCA,ICA)和非线性降维(TSNE,UMAP,DF)。无论是线性还是非线性降维,都是将数据解构,从混杂的信号中分离原始的多个生物信号并跟生物学特征进行映射,而这里面提到的各种方法从算法的角度来说都有其利和弊,只能由使用者自行权衡。

3、轨迹建模的方法也有很多种,目前常用的Monocle2/3分析采用的是反向图嵌入法中的DDRTree。这种方法是先对细胞进行聚类,然后再根据细胞群的平均值的中心点去构建轨迹。同时计算其他细胞到假定轨迹的距离,并将这些细胞分配到在假定轨迹上距离最近的细胞群。同时在这个环节,我们也需要根据先验知识去适当的调整起点位置

4、单细胞拟时序/轨迹分析把细胞群之间的差异进一步细化到单个细胞的水平并进行展示出来。

分析流程
1、导入
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
rm(list = ls())
library(Seurat)
library(monocle)
library(dplyr)
load("scRNA.Rdata")
table(Idents(scRNA))

table(scRNA$orig.ident)
head(scRNA@meta.data)

DimPlot(scRNA,label = T)+NoLegend()
2、数据预处理
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
scRNA$celltype = Idents(scRNA)
# 做拟时序分析通常不是拿全部的细胞,而是拿感兴趣的一部分。用subset提取子集即可。因为要使用差异基因来排序,所以要两类及以上细胞。基于背景知识选择有进化关系的细胞类型。
levels(Idents(scRNA)) #打出来细胞类型供复制
scRNA = subset(scRNA,idents = c("CD8+ T-cells","NK cells"))
table(Idents(scRNA))
## 
## CD8+ T-cells     NK cells 
##          544           92
set.seed(1234)
scRNA = subset(scRNA,downsample = 100)
# 如果只想做一类细胞的拟时序,有两个选择:二次分群再做(和提取两种细胞是一样的道理),或者是选择其他基因用于排序(在后面有)。
# 因为monocle和seurat是两个不同的体系,所以需要将seurat对象转换为monocle可以接受的CellDataSet对象。虽然monocle3已经出来很久了,但大家都不约而同的选择monocle2,大概就是习惯了吧。
3、创建CellDataSet对象
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# count矩阵,官方建议用count
ct <- scRNA@assays$RNA$counts
# 基因注释
gene_ann <- data.frame(
  gene_short_name = row.names(ct), 
  row.names = row.names(ct)
)
fd <- new("AnnotatedDataFrame",
          data=gene_ann)
# 临床信息
pd <- new("AnnotatedDataFrame",
          data=scRNA@meta.data)
#新建CellDataSet对象
sc_cds <- newCellDataSet(
  ct, 
  phenoData = pd,
  featureData =fd,
  expressionFamily = negbinomial.size(),
  lowerDetectionLimit=1)
sc_cds
4、构建细胞发育轨迹
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 用于估算每个细胞的大小因子,目的是归一化基因表达数据以纠正测序深度的差异
sc_cds <- estimateSizeFactors(sc_cds)
# 估算基因表达的离散度,帮助识别高变异的基因,用于差异基因分析和排序
sc_cds <- estimateDispersions(sc_cds)

# 差异基因分析
dd = "diff.Rdata"
# 完整模型考虑了细胞类型(celltype)和样本来源(orig.ident)
# 简化模型仅考虑样本来源(orig.ident),这样可以检测细胞类型对基因表达的独立影响
if(!file.exists(dd)){
  diff_test_res <- differentialGeneTest(sc_cds,
                                        fullModelFormulaStr = " ~ celltype + orig.ident", 
                                        reducedModelFormulaStr = " ~ orig.ident", 
                                        cores = 4)
  save(diff,file = dd)
}
load(dd)

# 筛选用于排序的基因
ordering_genes <- row.names(subset(diff_test_res, qval < 0.01))

#查看基因,筛选适合用于排序的,设置为排序要使用的基因
head(ordering_genes)
length(ordering_genes)

# 设置用于排序的基因
sc_cds <- setOrderingFilter(sc_cds, ordering_genes)
# 画出选择的基因
plot_ordering_genes(sc_cds)
# plot_ordering_genes画的图纵坐标是基因表达量的变异性(离散性),横坐标是每个基因在所有细胞种的平均表达量。
# 红线表示Monocle2基于横纵坐标的关系拟合的变异期望值,为用于排序的基因是黑色,其他基因是灰色。

# 对细胞进行降维和去批次,常用于将高维的基因表达数据转换为低维(如 2D)空间,便于可视化和后续分析
sc_cds <- reduceDimension(sc_cds,residualModelFormulaStr = "~orig.ident")
# 根据降维后的数据和排序基因,进行细胞的拟时序排序,推断细胞在轨迹中的位置
sc_cds <- orderCells(sc_cds)
#对比一下单样本和多样本的数据,differentialGeneTest和reduceDimension不一样,要考虑样本。因为我们是从count开始构建CellDataSet对象的,在seurat里面做的批次整合已经无效了,在monocle里面需要重新去除批次效应。

纵坐标是基因表达量的变异性(离散性),横坐标是每个基因在所有细胞种的平均表达量。

红线表示Monocle2基于横纵坐标的关系拟合的变异期望值,为用于排序的基因是黑色,其他基因是灰色。

核心目的是展示用于排序基因的筛选过程。被选为排序的基因(黑色点)在给定表达水平上表现出比预期更高的变异性,这意味着它们能够更好地反映细胞状态的变化,因此适合作为驱动拟时序轨迹推断的关键基因

5、发育轨迹图
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
library(ggsci)
p1 = plot_cell_trajectory(sc_cds)+ scale_color_nejm()
p2 = plot_cell_trajectory(sc_cds, color_by = 'Pseudotime') 
p3 = plot_cell_trajectory(sc_cds, color_by = 'celltype')  + scale_color_npg()
library(patchwork)
p2+p1/p3


plot_cell_trajectory(sc_cds, color_by = 'orig.ident')

Pseudotime数值从小到大就是顺序就是推断的发育顺序。图上的点颜色越深,时间越早,颜色越浅,时间越晚。

state是发育的不同阶段,数值越小越靠前。

celltype则可以看到具体的细胞类型在时间轨迹图上的分布。

下图是以样本形式的着色轨迹图

6、拟时序热图
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
gene_to_cluster = diff_test_res %>% 
  arrange(qval) %>% 
  head(50) %>% 
  pull(gene_short_name)
head(gene_to_cluster)

plot_pseudotime_heatmap(sc_cds[gene_to_cluster,],
                        num_clusters = nlevels(Idents(scRNA)), 
                        show_rownames = TRUE,
                        cores = 4,return_heatmap = TRUE,
                        hmcols = colorRampPalette(c("navy", "white", "firebrick3"))(100))

行表示基因:

每一行代表一个基因,这些基因是通过前面差异基因分析筛选出来的显著基因,通常是驱动细胞发育或状态变化的关键基因。

基因名称显示在图的右侧,这些基因在不同的聚类中呈现出不同的表达特征。

列表示细胞顺序:

热图的列按照拟时序(Pseudotime)排序,细胞的排列反映了它们在发育轨迹中的位置,从发育的早期到晚期依次排列。

细胞的顺序反映了细胞在发育过程中逐渐转变的动态变化。

颜色表示基因表达水平:

蓝色:表示基因低表达。白色:表示基因中等表达。红色:表示基因高表达。

颜色的渐变可以帮助我们观察基因表达水平如何随着细胞在发育轨迹中的位置发生变化。

基因的聚类(左侧的树状图):

基因根据表达模式被聚类分组,聚类树(dendrogram)展示了基因之间的相似性。相似表达模式的基因被分在同一个簇中。

例如,图中有明显的两个主要聚类组,每组内的基因在发育过程中表现出类似的表达趋势。

不同的聚类组:

上部聚类组(如 Cluster 1):这些基因在早期(左侧)低表达,随着发育时间的推进(往右),它们逐渐上调(由蓝转红),说明这些基因可能在晚期细胞功能的执行中发挥重要作用。

下部聚类组(如 Cluster 2):这些基因在轨迹的早期高表达(红色),然后逐渐降低(变蓝),表明这些基因可能在早期阶段起重要作用,随后被抑制或关闭。

动态表达模式的生物学意义:

热图中的动态模式反映了细胞在发育过程中的关键转折点。不同簇中的基因可能分别与特定的生物学功能或细胞状态相关,例如细胞增殖、分化、功能成熟等。 通过这些模式,可以推断出哪些基因在特定时间点起调控作用,并识别出可能参与不同发育阶段的信号通路或基因网络。

7、基因轨迹图
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 用感兴趣的基因给轨迹图着色,gs可以换成你想换的基因。
gs = head(gene_to_cluster)
plot_cell_trajectory(sc_cds,markers=gs,
                     use_color_gradient=T)

横轴与纵轴(Component 1 和 Component 2):

这两个轴是降维后的成分,反映了细胞在拟时序轨迹中的位置。细胞的排列基于其表达特征,展示了不同发育阶段之间的转变。

轨迹与节点(1、2、3):

黑色的轨迹线和标记的节点显示了细胞在拟时序中的轨迹路径。每个节点表示轨迹中的一个关键转折点,通常代表细胞状态的显著变化或分化点。

颜色编码(log10(value + 0.1)):

颜色表示每个基因的表达水平,颜色条从紫色(低表达)到黄色(高表达),并使用对数尺度(log10(value + 0.1))来平滑表达值的可视化。

颜色越接近黄色,表示基因在该细胞中的表达越高;颜色越接近紫色,表示表达越低。

各基因在轨迹中的表达模式:

  1. FGFBP2:表达相对较低(多数为紫色),但在轨迹的后期略有上升,表明其在发育晚期可能有一定功能。
  2. GNLY:在轨迹的第二和第三节点(2 和 3)之间表达显著升高(由紫色转为黄色),提示其在这一分化或状态转变中起到重要作用。
  3. GZMB:表达较为稳定,但在轨迹末端(晚期)略有增加,暗示其在晚期细胞活化或功能执行中可能具有作用。
  4. KLRD1:在早期有一定表达,随着轨迹推进呈现下降趋势,暗示其在早期阶段的功能性。
  5. NKG7:在轨迹后期(特别是节点 3 附近)表达显著升高,可能与晚期状态的功能关联。
  6. TYROBP:与 NKG7 类似,表达在轨迹后期升高,表明其在后期细胞功能中的潜在作用。
8、基因拟时序点图
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 横坐标是按照pseudotime排好顺序的。
plot_genes_in_pseudotime(sc_cds[gs,],
                  color_by = "celltype",
                  nrow= 3, 
                  ncol = NULL )

横轴(Pseudotime):

横轴表示拟时序(Pseudotime),反映了细胞在发育或状态转换中的相对顺序。数值越大,表示细胞处于发育或分化的更晚阶段。

纵轴(Relative Expression):

纵轴表示基因的相对表达水平。采用对数尺度(Log-scale),更好地展示基因表达的动态范围,尤其是低表达和高表达的差异。

不同的基因有不同的表达水平范围,从 1 到 100 或更高,显示了基因在不同阶段的活跃程度。

点的颜色(Celltype):

红色点:表示 CD8+ T-cells。蓝色点:表示 NK cells。

通过点的颜色,可以区分不同细胞类型中基因的表达情况,观察基因在不同细胞类型中的变化模式。

黑色曲线:

黑色曲线表示基因表达随拟时序变化的平滑趋势线。它帮助展示基因在细胞发育过程中的整体表达趋势。

参考资料:

1、生信技能树:

https://mp.weixin.qq.com/s/YHJXm17qPrxuCVsZivHHNw https://mp.weixin.qq.com/s/Q4Vp-bSzLnomggeq-FaMRw https://mp.weixin.qq.com/s/XVG7rXMtq37EW8CsTmwgag https://mp.weixin.qq.com/s/fjZ2rLHB-D64rShOwWxNQQ

2、单细胞天地:

https://mp.weixin.qq.com/s/wzn5Jdf5DR1LrhXecYg7Yw https://mp.weixin.qq.com/s/rgT5VCT0fqvhrTwZOtnaWA

3、Hayley笔记: https://www.jianshu.com/p/83c532234dc0

4、Trajectory inference analysis of scRNA-seq data: https://www.youtube.com/watch?v=XmHDexCtjyw&list=PLjiXAZO27elC_xnk7gVNM85I2IQl5BEJN&index=12

致谢:感谢曾老师、小洁老师以及生信技能树团队全体成员。

:若对内容有疑惑或者有发现明确错误的朋友,请联系后台(欢迎交流)。更多内容可关注公众号:生信方舟

- END -

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
monocle多样本拟时序分析
做拟时序分析是为了探索自己感兴趣的几种细胞之间的发育关系,一般不是用全部类型的细胞来做的。例如本例中选择了CD14和CD16单核细胞。
用户11414625
2024/12/20
2610
monocle多样本拟时序分析
单细胞测序—拟时序分析综合
拟时序分析(Pseudotime Analysis)在单细胞测序(Single-cell RNA-seq)中是一个重要的分析步骤,主要用于研究细胞在发育过程或其他生物学过程中所经历的状态变化。与传统的时间序列不同,拟时序分析不依赖于实际的时间信息,而是通过单细胞转录组数据来推测出细胞状态的动态变化轨迹。以下是进行拟时序分析的几个主要原因:
sheldor没耳朵
2024/08/30
1K0
单细胞测序—拟时序分析综合
monocle多样本拟时序分析
前面已经是介绍了单个样品的单细胞转录组表达量矩阵的monocle分析,接下来分享一下多样品的时候如何注意个体差异因素。
生信技能树
2024/07/05
2990
monocle多样本拟时序分析
为什么做拟时序(拟时序一本通01)
参考我五年前介绍过的 CNS图表复现08—肿瘤单细胞数据第一次分群通用规则,这3大单细胞亚群构成了肿瘤免疫微环境的复杂。绝大部分文章都是抓住免疫细胞亚群进行细分,包括淋巴系(T,B,NK细胞)和髓系(单核,树突,巨噬,粒细胞)的两大类作为第二次细分亚群。但是也有不少文章是抓住stromal 里面的 fibro 和endo进行细分,并且编造生物学故事的。而且我们已经积累了心肝脾肺肾等多个器官的上皮细胞的细分亚群, 以及免疫细胞里面的髓系和B细胞细分亚群:
生信技能树
2024/03/25
5550
为什么做拟时序(拟时序一本通01)
monocle2拟时序实战细节剖析(拟时序一本通04)
这个纯粹就是生物信息学领域的“马太效应”,大家都用monocle2做拟时序,所以后来者就简单的追随即可,而且绝大部分人其实并不关心算法细节,仅仅是为了做拟时序而做,那么就无所谓选择哪个软件了。我们也简单的展示了目前的可以做拟时序分析的软件的测评,详见:拟时序的多种算法大比拼(拟时序一本通03) 。但是,测评归测评,最终大家还是得使用monocle2做拟时序分析,所以不得不把重点放它的细节剖析上面,我们后面也会介绍一下其它软件和方法:
生信技能树
2024/03/26
1.8K0
monocle2拟时序实战细节剖析(拟时序一本通04)
单细胞实战之CytoTRACE2和monocle3——入门到进阶(高级篇2)
接下来将回顾学习CytoTRACE2和monocle3两个工具,CytoTRACE2通过预测细胞发育潜能分数和分类,辅助研究者定位发育轨迹的起始点;而monocle3则基于图论算法构建细胞伪时间分化轨迹,动态模拟细胞状态沿时间轴的演化路径,揭示分化分支、过渡态细胞及关键驱动基因。
凑齐六个字吧
2025/04/20
4370
单细胞实战之CytoTRACE2和monocle3——入门到进阶(高级篇2)
单细胞5 拟时序分析
拟时序分析是为了探索自己感兴趣的几种细胞之间的发育关系,一般不是用全部类型的细胞来做的。实在不行问问ai,回答可详细
用户10300557
2024/06/26
3000
单细胞拟时序/轨迹分析monocle3流程学习和整理
拟时序/轨迹分析的基础知识和Monocle2流程可见推文: https://mp.weixin.qq.com/s/aVUpRIkDi83B8_Y_BSBkVA
凑齐六个字吧
2024/09/11
4940
单细胞拟时序/轨迹分析monocle3流程学习和整理
单细胞monocle3分析流程再整理
重读上一篇关于monocle3的推文的时候感觉内容冗长繁琐,因此笔者把关键部分代码稍作了整理。
凑齐六个字吧
2024/09/22
2990
单细胞monocle3分析流程再整理
拟时序分析就是差异分析的细节剖析
很多小伙伴在后台表示对单细胞数据分析里面的拟时序分析不理解,恰好最近看到了一个超级清晰明了的展现拟时序分析的作用的文献,分享给大家。它完美的展现了差异分析为什么不够,为什么拟时序分析就是差异分析的细节剖析。
生信技能树
2021/12/27
3K0
拟时序分析就是差异分析的细节剖析
monocle单样本拟时序分析
做拟时序分析是为了探索自己感兴趣的几种细胞之间的发育关系,一般不是用全部类型的细胞来做的。例如本例中选择了CD14和CD16单核细胞。
生信技能树
2024/07/05
2720
monocle单样本拟时序分析
monocle单样本拟时序分析
做拟时序分析是为了探索自己感兴趣的几种细胞之间的发育关系,一般不是用全部类型的细胞来做的。例如本例中选择了CD14和CD16单核细胞。
用户11414625
2024/12/20
1750
monocle单样本拟时序分析
Monocle2 踩坑教程(1)
拟时(pseudotime)分析,又称细胞轨迹(cell trajectory)分析,通过拟时分析可以推断出发育过程细胞的分化轨迹或细胞亚型的演化过程,在发育相关研究中使用频率较高。主要基于关键基因的表达模式,在拟时间中对单个细胞进行排序,模拟出时间发育过程的动态变化。
生信技能树jimmy
2020/03/30
8.2K0
单细胞转录组之拟时序分析
详见此链接:https://www.jianshu.com/p/34c23dbd9dc1
青青青山
2022/07/09
3.6K0
单细胞转录组之拟时序分析
使用monocle做拟时序分析(单细胞谱系发育)
因为是第一个课程,所以并没有提到单细胞转录组的部分新颖分析要点,比如构建细胞谱系发育,虽然我其实在课程里面也稍微提到过一点,不过怕大家印象不深刻,所以还是有必要单独拿出来讲解一下。
生信技能树jimmy
2020/03/30
8K0
monocle3轨迹分析
https://mp.weixin.qq.com/s/UsDC-t1j7NHaLTnI6xCATQ
生信探索
2023/04/23
8100
跟着NC学pseudotime| monocle2 拟时序分析 + 树形图
拟时(pseudotime)分析,又称细胞轨迹(cell trajectory)分析,根据不同细胞亚群基因表达量随时间的变化情况通过拟时分析可以来推断发育过程细胞的分化轨迹或细胞亚型的演化过程。并非一定要不同时间段做实验的结果,因为细胞本身存在拟时序变化,细胞是有变化的,可以做拟时序分析。
生信补给站
2022/01/07
17.8K0
跟着NC学pseudotime| monocle2 拟时序分析 + 树形图
单细胞分析 | 使用 Monocle 3 进行发育轨迹分析
在本指南[1]中,会展示如何利用Monocle 3软件和单细胞ATAC-seq数据来构建细胞发展轨迹。
数据科学工厂
2024/12/30
4360
单细胞分析 | 使用 Monocle 3 进行发育轨迹分析
马上都2023了,但是CNS级别单细胞文章仍然是使用monocle2
其实大家简单的搜索就能发现 trapnell 实验室虽然出了 monocle3 ,而且写的很清楚:Monocle 2 and Monocle 3 alpha are deprecated, Please use our new package, Monocle 3 ,如下所示的链接 :
生信技能树
2022/12/16
3.4K0
马上都2023了,但是CNS级别单细胞文章仍然是使用monocle2
单细胞转录组 | 拟时序分析
拟时序分析(Pseudotime analysis)是一种在单细胞RNA测序(scRNA-seq)数据中重建细胞发育轨迹的计算方法。它基于一个关键假设:在样本中捕获的细胞代表了不同发育阶段的快照,通过计算这些细胞之间的相似性,可以推断出细胞状态变化的顺序,构建出一条或多条发育轨迹。
天意生信云
2025/03/13
3330
单细胞转录组 | 拟时序分析
相关推荐
monocle多样本拟时序分析
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验