多样本monocle拟时序分析

0.背景知识

做拟时序分析是为了探索自己感兴趣的几种细胞之间的发育关系,一般不是用全部类型的细胞来做的。例如本例中选择了CD14和CD16单核细胞。

如果让ai来说拟时序的目的那就比我说的多:

拟时序分析(Pseudo-time analysis)是一种用于理解细胞状态和细胞命运变化的计算生物学方法。这种分析通常用于单细胞测序数据,其目的是重建细胞发育或疾病进程中的时间序列,即使实际的时间信息不可用。以下是进行拟时序分析的几个主要目的:

  1. 细胞状态推断:通过分析单个细胞的基因表达模式,推断细胞在生物学过程中所处的状态。
  2. 细胞轨迹追踪:重建细胞从一种状态转变到另一种状态的路径,这有助于理解细胞分化、发育或疾病进展的过程。
  3. 细胞命运预测:预测细胞随时间可能采取的发育轨迹,尤其是在干细胞分化或癌症发展的研究中。
  4. 动态过程建模:创建细胞状态变化的动态模型,这有助于揭示细胞行为的内在规律和调控机制。
  5. 细胞亚群识别:在复杂的细胞群体中识别不同的细胞亚群,并理解它们在生物学过程中的作用。
  6. 基因调控网络推断:通过分析基因表达随“拟时间”的变化,推断基因调控网络和信号传导途径。
  7. 疾病机理探索:在疾病研究中,拟时序分析有助于揭示疾病发生和发展的分子机制。
  8. 药物作用机制研究:通过观察药物处理前后细胞状态的变化,研究药物的作用机制和效果。 拟时序分析是一种强大的工具,它可以帮助研究者在没有直接时间标记的情况下,通过基因表达数据来探索细胞状态的变化和动态过程。这种方法在单细胞生物学、发育生物学、癌症生物学和神经科学等领域有着广泛的应用。

今天的代码是处理多样本数据的,单样本的在前一篇。

使用的数据sce.all.Rdata是Seurat降维聚类分群注释的结果,有两个样本。在生信星球聊天框回复“959monocle”可以拿到我的示例数据

rm(list = ls())
library(Seurat)
library(monocle)
library(dplyr)
load("../monocle_one_sample/sce.all.Rdata")
table(sce.all$celltype)

## 
##            B  B Activated    CD14 Mono    CD16 Mono CD4 Memory T  CD4 Naive T 
##          975          386         4355         1044         1762         2501 
##        CD8 T           DC           Mk           NK          pDC  T activated 
##          814          472          236          618          132          631

scRNA = subset(sce.all,idents = c("CD14 Mono","CD16 Mono"))
table(scRNA$celltype)

## 
## CD14 Mono CD16 Mono 
##      4355      1044

table(scRNA$orig.ident)

## 
## IMMUNE_CTRL IMMUNE_STIM 
##        2718        2681

本文的输入数据是seurat做完降维聚类分群注释的数据,并将注释的结果添加到了meta表格里面成为了celltype列。

因为只想要CD14和CD16单核细胞,所以提取出来相应的子对象。

因为monocle和seurat是两个不同的体系,所以需要将seurat对象转换为monocle可以接受的CellDataSet对象。虽然monocle3已经出来很久了,但大家都不约而同的选择monocle2,大概就是习惯了吧。。

ct <- scRNA@assays$RNA$counts

gene_ann <- data.frame(
  gene_short_name = row.names(ct), 
  row.names = row.names(ct)
)

pd <- new("AnnotatedDataFrame",
          data=scRNA@meta.data)
fd <- new("AnnotatedDataFrame",
          data=gene_ann)

sc_cds <- newCellDataSet(
  ct, 
  phenoData = pd,
  featureData =fd,
  expressionFamily = negbinomial.size(),
  lowerDetectionLimit=1)
sc_cds

## CellDataSet (storageMode: environment)
## assayData: 14053 features, 5399 samples 
##   element names: exprs 
## protocolData: none
## phenoData
##   sampleNames: AAACATACATTTCC.1 AAACATACCAGAAA.1 ... TTTGACTGCCCTAC.1
##     (5399 total)
##   varLabels: orig.ident nCount_RNA ... Size_Factor (19 total)
##   varMetadata: labelDescription
## featureData
##   featureNames: AL627309.1 RP11-206L10.2 ... LRRC3DN (14053 total)
##   fvarLabels: gene_short_name
##   fvarMetadata: labelDescription
## experimentData: use 'experimentData(object)'
## Annotation:

1.构建细胞发育轨迹

选择基因有不同的策略,比如 1.使用seurat给出的高变化基因 2.按照平均表达量大于某个数字(比如0.1,官网用的是这个)的基因 3.使用不同细胞类型之间的差异基因,differentialGeneTest计算。 我们默认使用的是最后一个策略。

sc_cds <- estimateSizeFactors(sc_cds)
sc_cds <- estimateDispersions(sc_cds)
table(scRNA@meta.data$celltype)

## 
## CD14 Mono CD16 Mono 
##      4355      1044

fdif = "diff_test_res.Rdata"
if(!file.exists(fdif)){
  diff_test_res <- differentialGeneTest(sc_cds,
                                        fullModelFormulaStr = " ~ celltype + orig.ident", 
                                           reducedModelFormulaStr = " ~ orig.ident", 

                                        cores = 8)
  save(diff_test_res,file = fdif)
}
load(fdif)
ordering_genes <- row.names (subset(diff_test_res, qval < 0.01))
#然后是查看基因,设置为排序要使用的基因
head(ordering_genes)

## [1] "NOC2L"        "ISG15"        "AGRN"         "RP4-758J18.2" "SSU72"       
## [6] "GNB1"

sc_cds <- setOrderingFilter(sc_cds, ordering_genes)
plot_ordering_genes(sc_cds)
#降维
sc_cds <- reduceDimension(sc_cds,residualModelFormulaStr = "~orig.ident")
#细胞排序
sc_cds <- orderCells(sc_cds)

2.绘图展示

发育轨迹图

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

这三种着色方式放在一起非常的带劲,很清晰的展示了pseudotime、state和celltype是怎样变化的。

以orig.ident着色可以看出,不同样本中的细胞基本是均匀分布在轨迹上的,说明前面的代码很好的去除了样本间的批次效应

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

经典的拟时序热图

展示了一些基因是如何随着时间轨迹的变化而渐变的,这个渐变不同于findmarkers,是体现变化过程的,而不是直接给出差异表达的基因。

gene_to_cluster = diff_test_res %>% arrange(qval) %>% head(50) %>% pull(gene_short_name);head(gene_to_cluster)

## [1] "S100A9" "S100A8" "FCGR3A" "IL8"    "PLAC8"  "TMSB4X"

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))

用感兴趣的基因给轨迹图着色,gs可以换成你想换的基因

gs = head(gene_to_cluster)
plot_cell_trajectory(sc_cds,markers=gs,
                     use_color_gradient=T)

也可以是jitter

plot_genes_jitter(sc_cds[gs,],
                  grouping = "celltype",
                  color_by = "celltype",
                  nrow= 3,
                  ncol = NULL )
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,491评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,856评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,745评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,196评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,073评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,112评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,531评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,215评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,485评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,578评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,356评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,215评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,583评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,898评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,497评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,697评论 2 335

推荐阅读更多精彩内容