單細(xì)胞分析之發(fā)育軌跡分析(monocle2)

大家好,好久沒有分享單細(xì)胞分析的流程啦,今天給大家分享一個(gè)單細(xì)胞中常見的分析--細(xì)胞發(fā)育軌跡分析。之前也給大家分享過RNA velocity,今天就給大家介紹另一個(gè)軟件包(monocle)。

monocle更新得很快,目前已經(jīng)更新到3了,但是今天我們主要是講一個(gè)monocle2的使用方法。moncole2中進(jìn)行軌跡分析的流程主要分為以下幾個(gè)步驟:

圖片

1. 數(shù)據(jù)預(yù)處理

1.1 安裝monocle2

如果之前沒有安裝過monocl2,則需要先運(yùn)行以下命名,如果已經(jīng)安裝則忽略。

install.packages("BiocManager")
BiocManager::install("monocle")
install.packages("RColorBrewer") #畫圖配色板

1.2 加載安裝包

library(monocle)
library(RColorBrewer)
setwd("工作路徑")

1.3 讀取數(shù)據(jù)

測(cè)試數(shù)據(jù)來源于2017 年北大徐成冉課題組發(fā)表在《Hepatology》雜志上小鼠胚胎E10.5-E17.5雙潛能的成肝細(xì)胞分化為肝實(shí)質(zhì)細(xì)胞和肝內(nèi)膽管細(xì)胞的表達(dá)數(shù)據(jù)(GSE90047)。可以在GEO中通過輸入GSE90047下載單細(xì)胞的表達(dá)矩陣。


# TPM矩陣(行為基因名,列為細(xì)胞名)
expr_matrix <- read.table("0.data/scRNA-seq_TPM_GSE90047.xls",header=T,row.names=1, sep = "\t")
# 細(xì)胞注釋矩陣(行為細(xì)胞名)
sample_sheet <- read.table("0.data/XCR_paper_cell_anno_sub.txt",header=T,row.names=1, sep ="\t") 
# 基因注釋矩陣(行為基因名)
gene_annotation <- read.table("0.data/Mus_ref.txt",header=T,row.names=1, sep = "\t")
# 從注釋信息中篩選出有表達(dá)的基因
pos <- which(rownames(gene_annotation) %in% rownames(expr_matrix))
gene_annotation <- gene_annotation[pos,]
# 注意:expr_matrix中列名的順序和 sample_sheet中行名的順序必須一致
expr_matrix <- expr_matrix[rownames(gene_annotation),rownames(sample_sheet)]

pd <- new("AnnotatedDataFrame", data = sample_sheet)
fd <- new("AnnotatedDataFrame", data = gene_annotation)

2. 創(chuàng)建對(duì)象

2.1 創(chuàng)建monocle2的對(duì)象

# 創(chuàng)建monocle對(duì)象
cd <- newCellDataSet(as.matrix(expr_matrix), 
      phenoData = pd, 
      featureData = fd, 
      lowerDetectionLimit = 0.1, 
      expressionFamily = tobit(Lower = 0.1))
# expressionFamily: 數(shù)據(jù)為TPM/FPKM時(shí)設(shè)置為tobit(Lower = 0.1),數(shù)據(jù)為count時(shí)設(shè)置為negbinomial.size())

# 將FPKM/TPM數(shù)據(jù)轉(zhuǎn)換為UMI數(shù)據(jù)(read count)
rpc_matrix <- relative2abs(cd)

# 重新創(chuàng)建monocle對(duì)象
cd <- newCellDataSet(as(as.matrix(rpc_matrix),"sparseMatrix"), 
      phenoData = pd, 
      featureData = fd,
      lowerDetectionLimit = 0.5,
      expressionFamily = negbinomial.size())

根據(jù)表達(dá)量數(shù)據(jù)的類型選擇合適的分布(默認(rèn)為文本計(jì)數(shù)數(shù)據(jù)輸入,適用于負(fù)二項(xiàng)分布;FPKM/TPM 適用于對(duì)數(shù)正態(tài)分布)。

2.2 計(jì)算數(shù)據(jù)的size factors和dispersions

size factors有助于消除細(xì)胞間mRNA捕獲的差異;dispersions用于后續(xù)的差異表達(dá)分析

cd <- estimateSizeFactors(cd)
cd <- estimateDispersions(cd)

2.3 數(shù)據(jù)過濾

# 過濾低于1%細(xì)胞中檢出的基因,最低表達(dá)閾值為0.5
cd <- detectGenes(cd, min_expr = 0.5)
expressed_genes <- row.names(subset(fData(cd), num_cells_expressed > nrow(sample_sheet) * 0.01))
# 查看篩選后的基因個(gè)數(shù)(用于后面基因的篩選)
length(expressed_genes)

3. 構(gòu)建軌跡

3.1 關(guān)鍵基因的篩選

發(fā)育過程中細(xì)胞處于動(dòng)態(tài)變化的過程,細(xì)胞在不同狀態(tài)表達(dá)的基因表達(dá)譜有所差異,monocle根據(jù)每個(gè)細(xì)胞基因的表達(dá)譜的相似和連續(xù)變化對(duì)細(xì)胞構(gòu)建發(fā)育軌跡。第一個(gè)步驟是挑選合適的基因,包括3種方法,分別是:

1)挑選細(xì)胞間高度離散的基因

2)挑選在指定類型間差異表達(dá)的基因

3)根據(jù)已知標(biāo)記基因?qū)?xì)胞進(jìn)行排序

3.1.1 挑選細(xì)胞間高度離散的基因

disp_table <- dispersionTable(cd)
# 高度離散基因的篩選標(biāo)準(zhǔn),可根據(jù)數(shù)據(jù)情況設(shè)置mean_expression的值
ordering_genes <- as.character(subset(disp_table,mean_expression >= 0.3 & dispersion_empirical >= dispersion_fit)$gene_id)
cd <- setOrderingFilter(cd, ordering_genes)
plot_ordering_genes(cd)
圖片

每一個(gè)點(diǎn)代表一個(gè)基因,X軸是每個(gè)基因的表達(dá)量均值,Y軸是每個(gè)基因的離散程度,紅線為擬合的基因離散程度隨著表達(dá)量變化的趨勢(shì)線,黑色的點(diǎn)是用于后續(xù)分析的基因。

3.1.2 挑選在指定類型間差異表達(dá)的基因

# 根據(jù)數(shù)據(jù)的某種分類(如本例中根據(jù)Stage的類型)進(jìn)行差異分析
diff_test_res <- differentialGeneTest(cd[expressed_genes,],fullModelFormulaStr = "~Stage")
# 篩選差異基因(q < 1e-5并且屬于之前計(jì)算的expressed_genes列表中)
ordering_genes <- row.names (subset(diff_test_res, qval < 1e-5))
ordering_genes <- intersect(ordering_genes, expressed_genes)
cd <- setOrderingFilter(cd, ordering_genes)
plot_ordering_genes(cd)
圖片

其中黑色的點(diǎn)就是根據(jù)分類篩選出的差異基因并且用于后續(xù)的分析。

3.1.3 根據(jù)已知標(biāo)記基因?qū)?xì)胞進(jìn)行排序

這種方法需要參考一些已發(fā)表的文獻(xiàn)或者先驗(yàn)知識(shí)收集到的基因。

3.2 細(xì)胞降維

# 選取的基因數(shù)目為每個(gè)細(xì)胞的維度,基于默認(rèn)的'DDRTree'方法進(jìn)行數(shù)據(jù)降維
cd <- reduceDimension(cd, max_components = 2, method = 'DDRTree')

3.3 細(xì)胞排序

# 對(duì)細(xì)胞進(jìn)行排序,由于排序無法區(qū)分起點(diǎn)和終點(diǎn),若分析所得時(shí)序與實(shí)際相反,根據(jù)“reverse”參數(shù)進(jìn)行調(diào)整,默認(rèn)reverse=F
cd <- orderCells(cd, reverse = F) 

3.4 軌跡可視化

# 排序好的細(xì)胞可以進(jìn)行可視化,可標(biāo)注細(xì)胞的各注釋信息"Stage", "Putative_cell_type", "Sort_by", "State", "Pseudotime"等)
# 查看細(xì)胞注釋信息
head(cd@phenoData@data)
圖片
# 設(shè)置顏色
color1 <- c(brewer.pal(6, "Set1"))
getPalette <- colorRampPalette(brewer.pal(6, "Set1"))
# 按照時(shí)間點(diǎn)進(jìn)行映射
plot_cell_trajectory(cd, show_cell_names = F, color_by = "Stage") + scale_color_manual(values = getPalette(length(unique(sample_sheet[,"Stage"]))))
圖片
# 按照細(xì)胞類型進(jìn)行映射(手動(dòng)設(shè)置顏色)
plot_cell_trajectory(cd, show_cell_names = F, color_by = "Putative_cell_type") + scale_color_manual(values = c("#E41A1C", "#999999"))
圖片
# 按照State進(jìn)行映射
plot(plot_cell_trajectory(cd, show_cell_names = F, color_by = "State") +  scale_color_manual(values = color1))
圖片
# 按照計(jì)算的Pseudotime進(jìn)行映射
plot(plot_cell_trajectory(cd, show_cell_names = F, color_by = "Pseudotime") + scale_color_viridis_c())
圖片

每一個(gè)點(diǎn)代表一個(gè)細(xì)胞,Pseudotime代表計(jì)算的發(fā)育時(shí)間,值越小則表示該細(xì)胞作為發(fā)育起始,值越大代表該細(xì)胞更接近發(fā)育終點(diǎn)

如果發(fā)現(xiàn)發(fā)育軌跡和真實(shí)的時(shí)間不一致,那么可以通過運(yùn)行cd <- orderCells(cd, reverse = F),其中reverse = T重新計(jì)算發(fā)育軌跡。

運(yùn)行完上面的命令這樣就能構(gòu)建好一個(gè)發(fā)育軌跡啦,這期的內(nèi)容就先到這里啦,下一期我們?cè)诶^續(xù)學(xué)習(xí)發(fā)育軌跡中的差異分析~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,732評(píng)論 6 539
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,214評(píng)論 3 426
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,781評(píng)論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,588評(píng)論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 72,315評(píng)論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,699評(píng)論 1 327
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,698評(píng)論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,882評(píng)論 0 289
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,441評(píng)論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 41,189評(píng)論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,388評(píng)論 1 372
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,933評(píng)論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,613評(píng)論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,023評(píng)論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,310評(píng)論 1 293
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 52,112評(píng)論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,334評(píng)論 2 377

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