【單細胞軌跡分析】monocle3

?

前面一篇文章介紹了monocle2使碾,今天介紹一下monocle3。其實拘鞋,Monocle3和Monocle2并沒有本質(zhì)上的區(qū)別矢门,只是把降維圖從DDRTree改成了UMAP。原因可能是包的作者認(rèn)為UMAP比DDRTree降維更能反映高維空間的數(shù)據(jù)隔躲。

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

其中宣旱,monocle3的三個主要功能:

1. 分群叛薯、計數(shù)細胞

2. 構(gòu)建細胞軌跡

3. 差異表達分析

工作流程如下圖:

===安裝===

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

===數(shù)據(jù)準(zhǔn)備====

我們還使用pbmc3k的數(shù)據(jù)集案训,由于pbmc都是分化成熟的免疫細胞强霎,理論上并不存在直接的分化關(guān)系蓉冈,因此不適合用來做擬時軌跡分析轩触,這里仍然僅作為學(xué)習(xí)演示。

library(Seurat)

library(monocle3)

library(tidyverse)

library(patchwork)

rm(list=ls())

dir.create("Monocle3")

setwd("Monocle3")

?

//創(chuàng)建CDS對象并預(yù)處理數(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)

===預(yù)處理====

1. 標(biāo)準(zhǔn)化和PCA降維

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

//preprocess_cds函數(shù)相當(dāng)于seurat中NormalizeData+ScaleData+RunPCA

cds <- preprocess_cds(cds, num_dim = 50)

plot_pc_variance_explained(cds)

注:圖中橫軸的50個PC就是preprocess_cds()中num_dim 設(shè)置的50個PC脱柱,如果這里設(shè)置的100,圖的橫軸也會展示100個PC拉馋。

2.?可視化

?

umap降維

cds <- reduce_dimension(cds,preprocess_method = "PCA")?

plot_cells(cds)

color_cells_by參數(shù)設(shè)置umap圖的顏色榨为,可以是colData(cds)中的任何一列。

cds <- cluster_cells(cds)?

colnames(colData(cds))

//以之前的Seurat分群來添加顏色煌茴,和原有的Seurat分群對比

p1 <- plot_cells(cds, reduction_method="UMAP", color_cells_by="seurat_clusters") + ggtitle('cds.umap')

//從seurat導(dǎo)入整合過的umap坐標(biāo)

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

注:左圖是monocle3重新降維的結(jié)果,右圖是之前seurat降維的結(jié)果蔓腐。

如果細胞數(shù)目特別多(>10,000細胞或更多)矩乐,可以設(shè)置一些參數(shù)來加快UMAP運行速度。在reduce_dimension()函數(shù)中設(shè)置umap.fast_sgd=TRUE可以使用隨機梯度下降方法(fast stochastic gradient descent method)加速運行回论。還可以使用cores參數(shù)設(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",preprocess_method = "PCA")

plot_cells(cds, reduction_method="tSNE", color_cells_by="seurat_clusters")

隨后也可使用Monocle3分cluster,鑒定每個cluster的marker基因并進行細胞注釋等等傀蓉。由于在Seurat的操作中已經(jīng)對數(shù)據(jù)進行了注釋欧漱,就不再使用Monocle3進行這些操作。

====構(gòu)建細胞軌跡===

  1. 軌跡學(xué)習(xí)Learn the trajectory graph(使用learn_graph()函數(shù))

## 識別軌跡

cds <- learn_graph(cds)

plot_cells(cds, color_cells_by = "cell_type", label_groups_by_cluster=FALSE,label_leaves=FALSE, label_branch_points=FALSE)

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

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

注:黑色的線顯示的是graph的結(jié)構(gòu)。數(shù)字帶白色圓圈表示不同的結(jié)局萨蚕,也就是葉子靶草。數(shù)字帶黑色圓圈代表分叉點,從這個點開始岳遥,細胞可以有多個結(jié)局奕翔。這些數(shù)字可以通過label_leaves和label_branch_points參數(shù)設(shè)置。

2. 細胞按擬時排序

?

在學(xué)習(xí)了graph之后浩蓉,我們就可以根據(jù)學(xué)習(xí)的發(fā)育軌跡(擬時序)排列細胞派继。

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

?

手動選擇root

cds <- order_cells(cds)

運行上面的代碼后,會跳出這個窗口认轨∩鹇纾可以手動在圖上選擇一個位置,然后點擊Done。(比如圖上我選擇的是右邊開始的位置的點)可以選擇多個位置恩急。

plot_cells(cds, color_cells_by = "pseudotime", label_cell_groups = FALSE, label_leaves = FALSE,? label_branch_points = FALSE)

saveRDS(cds, file = "cds.rds")

===差異表達分析=====

  1. ?尋找擬時軌跡差異基因

//graph_test分析最重要的結(jié)果是莫蘭指數(shù)(morans_I)杉畜,其值在-1至1之間,0代表此基因沒有

//空間共表達效應(yīng)衷恭,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)

2. 挑選top10畫圖展示

Track_genes_sig <- Track_genes %>%top_n(n=10, morans_I) %>% pull(gene_short_name) %>% as.character()

基因表達趨勢圖

plot_genes_in_pseudotime(cds[Track_genes_sig,],color_cells_by="seurat_clusters",min_expr=0.5, ncol= 2)

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

ggsave("Pseudotime_Seurat.pdf",plot = p, width = 8, height = 6)

saveRDS(pbmc, file ="sco_pseudotime.rds")

本文使用 文章同步助手 同步

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(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é)果婚禮上隧熙,老公的妹妹穿的比我還像新娘片挂。我一直安慰自己,他們只是感情好贞盯,可當(dāng)我...
    茶點故事閱讀 64,153評論 5 371
  • 文/花漫 我一把揭開白布音念。 她就那樣靜靜地躺著,像睡著了一般躏敢。 火紅的嫁衣襯著肌膚如雪闷愤。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 48,954評論 1 283
  • 那天件余,我揣著相機與錄音讥脐,去河邊找鬼遭居。 笑死,一個胖子當(dāng)著我的面吹牛攘烛,可吹牛的內(nèi)容都是我干的魏滚。 我是一名探鬼主播镀首,決...
    沈念sama閱讀 38,271評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼坟漱,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了更哄?” 一聲冷哼從身側(cè)響起芋齿,我...
    開封第一講書人閱讀 36,916評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎成翩,沒想到半個月后觅捆,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,382評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡麻敌,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,877評論 2 323
  • 正文 我和宋清朗相戀三年栅炒,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(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
  • 正文 我出身青樓沼琉,卻偏偏與公主長得像,于是被迫代替她去往敵國和親桩匪。 傳聞我的和親對象是個殘疾皇子打瘪,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,700評論 2 345

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