單細胞之軌跡分析-3:monocle3


軌跡分析系列:


Monocle3和Monocle2并沒有本質(zhì)上的區(qū)別,只是把降維圖從DDRTree改成了UMAP捅膘。原因可能是包的作者認為UMAP比DDRTree降維更能反映高維空間的數(shù)據(jù)水评。

擬時分析的原理見:Trajectory inference analysis of scRNA-seq data
Monocle2的原理和應用已經(jīng)介紹過:monocle2

monocle3的三個主要功能:
1. 分群、計數(shù)細胞
2. 構(gòu)建細胞軌跡
3. 差異表達分析

monocle3的工作流程:

Monocle3的官網(wǎng):https://cole-trapnell-lab.github.io/monocle3/

1. 安裝
if (!requireNamespace("BiocManager", quietly = TRUE))
install.packages("BiocManager")
BiocManager::install(version = "3.10")
BiocManager::install(c('BiocGenerics', 'DelayedArray', 'DelayedMatrixStats',
                       'limma', 'S4Vectors', 'SingleCellExperiment',
                       'SummarizedExperiment', 'batchelor', 'Matrix.utils'))
install.packages("devtools")
devtools::install_github('cole-trapnell-lab/leidenbase')
devtools::install_github('cole-trapnell-lab/monocle3')
2. 數(shù)據(jù)準備绍申,創(chuàng)建CDS對象并進行降維。

注意:該數(shù)據(jù)集使用的是pbmc3k的數(shù)據(jù)集顾彰,由于pbmc都是分化成熟的免疫細胞极阅,理論上并不存在直接的分化關系,因此不適合用來做擬時軌跡分析涨享。這里僅作為學習演示筋搏。

library(Seurat)
library(monocle3)
library(tidyverse)
library(patchwork)
rm(list=ls())
dir.create("Monocle3")
setwd("Monocle3")

##創(chuàng)建CDS對象并預處理數(shù)據(jù)
pbmc <- readRDS("pbmc.rds")

data <- GetAssayData(pbmc, assay = 'RNA', slot = 'counts')
cell_metadata <- pbmc@meta.data
gene_annotation <- data.frame(gene_short_name = rownames(data))
rownames(gene_annotation) <- rownames(data)
cds <- new_cell_data_set(data,
                         cell_metadata = cell_metadata,
                         gene_metadata = gene_annotation)
3. 預處理
3.1 標準化和PCA降維

(RNA-seq是使用PCA,如果是處理ATAC-seq的數(shù)據(jù)用Latent Semantic Indexing)

#??preprocess_cds函數(shù)相當于seurat中NormalizeData+ScaleData+RunPCA
cds <- preprocess_cds(cds, num_dim = 50)
plot_pc_variance_explained(cds)
這里橫軸的50個PC就是preprocess_cds()中num_dim 設置的50個PC厕隧,如果這里設置的100奔脐,圖的橫軸也會展示100個PC。
3.2 可視化
  • umap降維
cds <- reduce_dimension(cds,preprocess_method = "PCA") #preprocess_method默認是PCA
plot_cells(cds)

color_cells_by參數(shù)設置umap圖的顏色吁讨,可以是colData(cds)中的任何一列髓迎。

colnames(colData(cds))
[1] "orig.ident"      "nCount_RNA"     
[3] "nFeature_RNA"    "percent.mt"     
[5] "RNA_snn_res.0.5" "seurat_clusters"
[7] "cell_type"       "Size_Factor" 
#以之前的Seurat分群來添加顏色,和原有的Seurat分群對比
p1 <- plot_cells(cds, reduction_method="UMAP", color_cells_by="seurat_clusters") + ggtitle('cds.umap')

##從seurat導入整合過的umap坐標
cds.embed <- cds@int_colData$reducedDims$UMAP
int.embed <- Embeddings(pbmc, reduction = "umap")
int.embed <- int.embed[rownames(cds.embed),]
cds@int_colData$reducedDims$UMAP <- int.embed
p2 <- plot_cells(cds, reduction_method="UMAP", color_cells_by="seurat_clusters") + ggtitle('int.umap')
p = p1|p2
ggsave("Reduction_Compare.pdf", plot = p, width = 10, height = 5)
左圖是monocle3重新降維的結(jié)果建丧,右圖是之前seurat降維的結(jié)果

如果細胞數(shù)目特別多(>10,000細胞或更多)排龄,可以設置一些參數(shù)來加快UMAP運行速度。在reduce_dimension()函數(shù)中設置umap.fast_sgd=TRUE可以使用隨機梯度下降方法(fast stochastic gradient descent method)加速運行茶鹃。還可以使用cores參數(shù)設置多線程運算涣雕。

可視化指定基因

ciliated_genes <- c("CD4","CD52","JUN")
plot_cells(cds,
           genes=ciliated_genes,
           label_cell_groups=FALSE,
           show_trajectory_graph=FALSE)
  • 也可以使用tSNE降維
cds <- reduce_dimension(cds, reduction_method="tSNE")
plot_cells(cds, reduction_method="tSNE", color_cells_by="seurat_clusters")
  • 隨后也可使用Monocle3分cluster,鑒定每個cluster的marker基因并進行細胞注釋等等闭翩。由于在Seurat的操作中已經(jīng)對數(shù)據(jù)進行了注釋挣郭,就不再使用Monocle3進行這些操作殊鞭。
plot_cells(cds, reduction_method="UMAP", color_cells_by="cell_type") 
4. Cluster your cells

這里的cluster其實是做分區(qū)滓走,不同分區(qū)的細胞會進行單獨的軌跡分析。

cds <- cluster_cells(cds)
plot_cells(cds, color_cells_by = "partition")
5. 構(gòu)建細胞軌跡
5.1 軌跡學習Learn the trajectory graph(使用learn_graph()函數(shù))
## 識別軌跡
cds <- learn_graph(cds)
p = plot_cells(cds, color_cells_by = "cell_type", label_groups_by_cluster=FALSE,
           label_leaves=FALSE, label_branch_points=FALSE)
ggsave("Trajectory.pdf", plot = p, width = 8, height = 6)

上面這個圖將被用于許多下游分析登淘,比如分支分析和差異表達分析。

plot_cells(cds, color_cells_by = "cell_type", label_groups_by_cluster=FALSE,
+                label_leaves=TRUE, label_branch_points=TRUE,graph_label_size=1.5)

黑色的線顯示的是graph的結(jié)構(gòu)流译。數(shù)字帶白色圓圈表示不同的結(jié)局逞怨,也就是葉子。數(shù)字帶黑色圓圈代表分叉點福澡,從這個點開始叠赦,細胞可以有多個結(jié)局。這些數(shù)字可以通過label_leaveslabel_branch_points參數(shù)設置革砸。

5.2 細胞按擬時排序

在學習了graph之后除秀,我們就可以根據(jù)學習的發(fā)育軌跡(擬時序)排列細胞。

為了對細胞進行排序算利,我們首先需要告訴Monocle哪里是這個過程的起始點册踩。也就是需要指定軌跡的'roots'。

  • 手動選擇root
# 解決order_cells(cds)報錯"object 'V1' not found"
# rownames(cds@principal_graph_aux[["UMAP"]]$dp_mst) <- NULL
# colnames(cds@int_colData@listData$reducedDims@listData$UMAP) <- NULL
cds <- order_cells(cds)
運行上面的代碼后效拭,會跳出這個窗口暂吉。可以手動在圖上選擇一個位置缎患,然后點擊Done慕的。(比如圖上我選擇的紅點。)可以選擇多個位置较锡。
p = plot_cells(cds, color_cells_by = "pseudotime", label_cell_groups = FALSE, 
               label_leaves = FALSE,  label_branch_points = FALSE)
ggsave("Trajectory_Pseudotime.pdf", plot = p, width = 8, height = 6)
saveRDS(cds, file = "cds.rds")
以剛剛選擇的點為root繪制的軌跡圖业稼。注意圖上有一些灰色的部分盗痒,是因為這些細胞和我們選擇的起點沒有分化關系蚂蕴,因此這部分細胞的擬時軌跡沒有被定義。
6. 差異表達分析

There are two approaches for differential analysis in Monocle:

  • Regression analysis: using fit_models(), you can evaluate whether each gene depends on variables such as time, treatments, etc.
  • Graph-autocorrelation analysis: using graph_test(), you can find genes that vary over a trajectory or between clusters.
6.1 尋找擬時軌跡差異基因
#graph_test分析最重要的結(jié)果是莫蘭指數(shù)(morans_I)俯邓,其值在-1至1之間骡楼,0代表此基因沒有
#空間共表達效應,1代表此基因在空間距離相近的細胞中表達值高度相似稽鞭。
Track_genes <- graph_test(cds, neighbor_graph="principal_graph", cores=6)
Track_genes <- Track_genes[,c(5,2,3,4,1,6)] %>% filter(q_value < 1e-3)
write.csv(Track_genes, "Trajectory_genes.csv", row.names = F)
6.2 挑選top10畫圖展示
Track_genes_sig <- Track_genes %>% top_n(n=10, morans_I) %>%
  pull(gene_short_name) %>% as.character()

基因表達趨勢圖

p <- plot_genes_in_pseudotime(cds[Track_genes_sig,], color_cells_by="seurat_clusters", 
                              min_expr=0.5, ncol = 2)
ggsave("Genes_Jitterplot.pdf", plot = p, width = 8, height = 6)

FeaturePlot圖

p <- plot_cells(cds, genes=Track_genes_sig, show_trajectory_graph=FALSE,
                label_cell_groups=FALSE,  label_leaves=FALSE)
p$facet$params$ncol <- 5
ggsave("Genes_Featureplot.pdf", plot = p, width = 20, height = 8)

尋找共表達基因模塊

Track_genes <- read.csv("Trajectory_genes.csv")
genelist <- pull(Track_genes, gene_short_name) %>% as.character()
gene_module <- find_gene_modules(cds[genelist,], resolution=1e-1, cores = 6)
write.csv(gene_module, "Genes_Module.csv", row.names = F)
cell_group <- tibble::tibble(cell=row.names(colData(cds)), 
                             cell_group=colData(cds)$seurat_clusters)
agg_mat <- aggregate_gene_expression(cds, gene_module, cell_group)
row.names(agg_mat) <- stringr::str_c("Module ", row.names(agg_mat))
p <- pheatmap::pheatmap(agg_mat, scale="column", clustering_method="ward.D2")
ggsave("Genes_Module.pdf", plot = p, width = 8, height = 8)

提取擬時分析結(jié)果返回seurat對象

pseudotime <- pseudotime(cds, reduction_method = 'UMAP')
pseudotime <- pseudotime[rownames(pbmc@meta.data)]
pbmc$pseudotime <- pseudotime
p = FeaturePlot(pbmc, reduction = "umap", features = "pseudotime")
# pseudotime中有無限值鸟整,無法繪圖。
ggsave("Pseudotime_Seurat.pdf", plot = p, width = 8, height = 6)
saveRDS(pbmc, file = "sco_pseudotime.rds")
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
禁止轉(zhuǎn)載朦蕴,如需轉(zhuǎn)載請通過簡信或評論聯(lián)系作者篮条。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市吩抓,隨后出現(xiàn)的幾起案子涉茧,更是在濱河造成了極大的恐慌,老刑警劉巖疹娶,帶你破解...
    沈念sama閱讀 206,013評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件伴栓,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機钳垮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,205評論 2 382
  • 文/潘曉璐 我一進店門惑淳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人饺窿,你說我怎么就攤上這事歧焦。” “怎么了肚医?”我有些...
    開封第一講書人閱讀 152,370評論 0 342
  • 文/不壞的土叔 我叫張陵倚舀,是天一觀的道長。 經(jīng)常有香客問我忍宋,道長痕貌,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,168評論 1 278
  • 正文 為了忘掉前任糠排,我火速辦了婚禮舵稠,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘入宦。我一直安慰自己哺徊,他們只是感情好,可當我...
    茶點故事閱讀 64,153評論 5 371
  • 文/花漫 我一把揭開白布乾闰。 她就那樣靜靜地躺著落追,像睡著了一般。 火紅的嫁衣襯著肌膚如雪涯肩。 梳的紋絲不亂的頭發(fā)上轿钠,一...
    開封第一講書人閱讀 48,954評論 1 283
  • 那天,我揣著相機與錄音病苗,去河邊找鬼疗垛。 笑死,一個胖子當著我的面吹牛硫朦,可吹牛的內(nèi)容都是我干的贷腕。 我是一名探鬼主播,決...
    沈念sama閱讀 38,271評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼咬展,長吁一口氣:“原來是場噩夢啊……” “哼泽裳!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起破婆,我...
    開封第一講書人閱讀 36,916評論 0 259
  • 序言:老撾萬榮一對情侶失蹤涮总,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后荠割,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體妹卿,經(jīng)...
    沈念sama閱讀 43,382評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡旺矾,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,877評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了夺克。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片箕宙。...
    茶點故事閱讀 37,989評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖铺纽,靈堂內(nèi)的尸體忽然破棺而出柬帕,到底是詐尸還是另有隱情,我是刑警寧澤狡门,帶...
    沈念sama閱讀 33,624評論 4 322
  • 正文 年R本政府宣布陷寝,位于F島的核電站,受9級特大地震影響其馏,放射性物質(zhì)發(fā)生泄漏凤跑。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,209評論 3 307
  • 文/蒙蒙 一叛复、第九天 我趴在偏房一處隱蔽的房頂上張望仔引。 院中可真熱鬧,春花似錦褐奥、人聲如沸咖耘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,199評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽儿倒。三九已至,卻和暖如春呜笑,著一層夾襖步出監(jiān)牢的瞬間夫否,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,418評論 1 260
  • 我被黑心中介騙來泰國打工蹈垢, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留慷吊,地道東北人。 一個月前我還...
    沈念sama閱讀 45,401評論 2 352
  • 正文 我出身青樓曹抬,卻偏偏與公主長得像,于是被迫代替她去往敵國和親急鳄。 傳聞我的和親對象是個殘疾皇子谤民,可洞房花燭夜當晚...
    茶點故事閱讀 42,700評論 2 345

推薦閱讀更多精彩內(nèi)容