大家好摘能,好久沒有分享單細胞分析的流程啦沪饺,今天給大家分享一個單細胞中常見的分析--細胞發(fā)育軌跡分析者甲。之前也給大家分享過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 年北大徐成冉課題組發(fā)表在《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. 創(chuàng)建對象
2.1 創(chuàng)建monocle2的對象
# 創(chuàng)建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)
# 重新創(chuàng)建monocle對象
cd <- newCellDataSet(as(as.matrix(rpc_matrix),"sparseMatrix"),
phenoData = pd,
featureData = fd,
lowerDetectionLimit = 0.5,
expressionFamily = negbinomial.size())
根據表達量數據的類型選擇合適的分布(默認為文本計數數據輸入,適用于負二項分布才沧;FPKM/TPM 適用于對數正態(tài)分布)迈喉。
2.2 計算數據的size factors和dispersions
size factors有助于消除細胞間mRNA捕獲的差異;dispersions用于后續(xù)的差異表達分析
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 關鍵基因的篩選
發(fā)育過程中細胞處于動態(tài)變化的過程挨摸,細胞在不同狀態(tài)表達的基因表達譜有所差異,monocle根據每個細胞基因的表達譜的相似和連續(xù)變化對細胞構建發(fā)育軌跡岁歉。第一個步驟是挑選合適的基因得运,包括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軸是每個基因的離散程度非剃,紅線為擬合的基因離散程度隨著表達量變化的趨勢線置逻,黑色的點是用于后續(xù)分析的基因。
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)
其中黑色的點就是根據分類篩選出的差異基因并且用于后續(xù)的分析备绽。
3.1.3 根據已知標記基因對細胞進行排序
這種方法需要參考一些已發(fā)表的文獻或者先驗知識收集到的基因券坞。
3.2 細胞降維
# 選取的基因數目為每個細胞的維度鬓催,基于默認的'DDRTree'方法進行數據降維
cd <- reduceDimension(cd, max_components = 2, method = 'DDRTree')
3.3 細胞排序
# 對細胞進行排序,由于排序無法區(qū)分起點和終點恨锚,若分析所得時序與實際相反宇驾,根據“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代表計算的發(fā)育時間,值越小則表示該細胞作為發(fā)育起始蜗顽,值越大代表該細胞更接近發(fā)育終點
如果發(fā)現發(fā)育軌跡和真實的時間不一致布卡,那么可以通過運行cd <- orderCells(cd, reverse = F),其中reverse = T重新計算發(fā)育軌跡雇盖。
運行完上面的命令這樣就能構建好一個發(fā)育軌跡啦忿等,這期的內容就先到這里啦,下一期我們在繼續(xù)學習發(fā)育軌跡中的差異分析~