大家好,好久沒有分享單細胞分析的流程啦,今天給大家分享一個單細胞中常見的分析--細胞發育軌跡分析。之前也給大家分享過RNA velocity,今天就給大家介紹另一個軟件包(monocle)。
monocle更新得很快,目前已經更新到3了,但是今天我們主要是講一個monocle2的使用方法。moncole2中進行軌跡分析的流程主要分為以下幾個步驟:
1. 數據預處理
1.1 安裝monocle2
如果之前沒有安裝過monocl2,則需要先運行以下命名,如果已經安裝則忽略。
install.packages("BiocManager")
BiocManager::install("monocle")
install.packages("RColorBrewer") #畫圖配色板
1.2 加載安裝包
library(monocle)
library(RColorBrewer)
setwd("工作路徑")
1.3 讀取數據
測試數據來源于2017 年北大徐成冉課題組發表在《Hepatology》雜志上小鼠胚胎E10.5-E17.5雙潛能的成肝細胞分化為肝實質細胞和肝內膽管細胞的表達數據(GSE90047)。可以在GEO中通過輸入GSE90047下載單細胞的表達矩陣。
# TPM矩陣(行為基因名,列為細胞名)
expr_matrix <- read.table("0.data/scRNA-seq_TPM_GSE90047.xls",header=T,row.names=1, sep = "\t")
# 細胞注釋矩陣(行為細胞名)
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")
# 從注釋信息中篩選出有表達的基因
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. 創建對象
2.1 創建monocle2的對象
# 創建monocle對象
cd <- newCellDataSet(as.matrix(expr_matrix),
phenoData = pd,
featureData = fd,
lowerDetectionLimit = 0.1,
expressionFamily = tobit(Lower = 0.1))
# expressionFamily: 數據為TPM/FPKM時設置為tobit(Lower = 0.1),數據為count時設置為negbinomial.size())
# 將FPKM/TPM數據轉換為UMI數據(read count)
rpc_matrix <- relative2abs(cd)
# 重新創建monocle對象
cd <- newCellDataSet(as(as.matrix(rpc_matrix),"sparseMatrix"),
phenoData = pd,
featureData = fd,
lowerDetectionLimit = 0.5,
expressionFamily = negbinomial.size())
根據表達量數據的類型選擇合適的分布(默認為文本計數數據輸入,適用于負二項分布;FPKM/TPM 適用于對數正態分布)。
2.2 計算數據的size factors和dispersions
size factors有助于消除細胞間mRNA捕獲的差異;dispersions用于后續的差異表達分析
cd <- estimateSizeFactors(cd)
cd <- estimateDispersions(cd)
2.3 數據過濾
# 過濾低于1%細胞中檢出的基因,最低表達閾值為0.5
cd <- detectGenes(cd, min_expr = 0.5)
expressed_genes <- row.names(subset(fData(cd), num_cells_expressed > nrow(sample_sheet) * 0.01))
# 查看篩選后的基因個數(用于后面基因的篩選)
length(expressed_genes)
3. 構建軌跡
3.1 關鍵基因的篩選
發育過程中細胞處于動態變化的過程,細胞在不同狀態表達的基因表達譜有所差異,monocle根據每個細胞基因的表達譜的相似和連續變化對細胞構建發育軌跡。第一個步驟是挑選合適的基因,包括3種方法,分別是:
1)挑選細胞間高度離散的基因
2)挑選在指定類型間差異表達的基因
3)根據已知標記基因對細胞進行排序
3.1.1 挑選細胞間高度離散的基因
disp_table <- dispersionTable(cd)
# 高度離散基因的篩選標準,可根據數據情況設置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)
每一個點代表一個基因,X軸是每個基因的表達量均值,Y軸是每個基因的離散程度,紅線為擬合的基因離散程度隨著表達量變化的趨勢線,黑色的點是用于后續分析的基因。
3.1.2 挑選在指定類型間差異表達的基因
# 根據數據的某種分類(如本例中根據Stage的類型)進行差異分析
diff_test_res <- differentialGeneTest(cd[expressed_genes,],fullModelFormulaStr = "~Stage")
# 篩選差異基因(q < 1e-5并且屬于之前計算的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)
其中黑色的點就是根據分類篩選出的差異基因并且用于后續的分析。
3.1.3 根據已知標記基因對細胞進行排序
這種方法需要參考一些已發表的文獻或者先驗知識收集到的基因。
3.2 細胞降維
# 選取的基因數目為每個細胞的維度,基于默認的'DDRTree'方法進行數據降維
cd <- reduceDimension(cd, max_components = 2, method = 'DDRTree')
3.3 細胞排序
# 對細胞進行排序,由于排序無法區分起點和終點,若分析所得時序與實際相反,根據“reverse”參數進行調整,默認reverse=F
cd <- orderCells(cd, reverse = F)
3.4 軌跡可視化
# 排序好的細胞可以進行可視化,可標注細胞的各注釋信息"Stage", "Putative_cell_type", "Sort_by", "State", "Pseudotime"等)
# 查看細胞注釋信息
head(cd@phenoData@data)
# 設置顏色
color1 <- c(brewer.pal(6, "Set1"))
getPalette <- colorRampPalette(brewer.pal(6, "Set1"))
# 按照時間點進行映射
plot_cell_trajectory(cd, show_cell_names = F, color_by = "Stage") + scale_color_manual(values = getPalette(length(unique(sample_sheet[,"Stage"]))))
# 按照細胞類型進行映射(手動設置顏色)
plot_cell_trajectory(cd, show_cell_names = F, color_by = "Putative_cell_type") + scale_color_manual(values = c("#E41A1C", "#999999"))
# 按照State進行映射
plot(plot_cell_trajectory(cd, show_cell_names = F, color_by = "State") + scale_color_manual(values = color1))
# 按照計算的Pseudotime進行映射
plot(plot_cell_trajectory(cd, show_cell_names = F, color_by = "Pseudotime") + scale_color_viridis_c())
每一個點代表一個細胞,Pseudotime代表計算的發育時間,值越小則表示該細胞作為發育起始,值越大代表該細胞更接近發育終點
如果發現發育軌跡和真實的時間不一致,那么可以通過運行cd <- orderCells(cd, reverse = F),其中reverse = T重新計算發育軌跡。
運行完上面的命令這樣就能構建好一個發育軌跡啦,這期的內容就先到這里啦,下一期我們在繼續學習發育軌跡中的差異分析~