前言
??好久沒寫簡書了,這兩年多一直在做著單細胞的數據分析,有單細胞數據分析需求的朋友可以私信我。
??目前單細胞轉錄組單個樣本的成本不斷降低,發表一篇高分文章的樣本要求也越來越高,不可避免的我們會遇到多樣本合并的問題。今天來介紹下目前單細胞轉錄組分析使用Seurat進行多樣本合并的幾種方法。
方法選擇
??當我們手里拿到多個樣本數據時首先需要判斷批次效應的大小,判斷方法是我們先不考慮批次效應直接合并走單樣本聚類分群流程。可以參考我之前的文章Seurat學習與使用(一)。
??左圖是三個樣本直接合并按照單樣本分析流程的聚類圖,右圖是三個樣本合并后使用Harmony方法的聚類圖。從兩個圖可以看到,左圖樣本間存在比較大的批次效應,相同細胞類型基本按照樣本來分群。而右圖可以看到相同細胞類型各樣本很好的重疊在一起。目前scRNA數據校正批次效應的算法有很多種:主流的有CCA、MNN、CCA+MNN、RPCA、Harmony,當然還有其他的一些如Scanorama、LIGER、Conos等。下面我主要介紹CCA+MNN、MNN、RPCA、Harmony四種常用的方法。
CCA/CCA+MNN
??CCA是早期Seurat(v2)整合數據的核心算法。文章發表在2018年的nature biotechnology,作者是Seurat的開發者Andrew Butler。同年在NBT雜志上Haghverdi等人開發了MNN的算法校正批次效應。之后在2019年Andrew等人在Cell發表文章,將CCA與MNN算法結合起來,并參考SNN算法的理念設計了“錨點”評分體系,使Seurat整合數據能力更強大更穩健。使用CCA方法時我們推薦CCA+MNN的方法,Seurat版本在v3及以上。CCA+MNN的使用方法可以參考我之前的文章Seurat學習與使用(一)中多個樣本分析部分內容。
MNN
??MNN,即相互近鄰Mutual nearest neighbors,由Haghverdi提出。開發的思想是對一個批次中的細胞找到它們在另一個批次中對應的最相鄰細胞集合。目前SeuratWrappers包已經包含了可以使用MNN方法的RunFastMNN函數。運行操作也很簡單,如下:
library(SeuratWrappers)
merge_data<-merge(x = sample1, y=c(sample2,sample3) , add.cell.ids = c('S1','S1','S3'))#合并單個樣本數據
merge_data<- RunFastMNN(object.list = SplitObject(merge_data, split.by = 'orig.ident'))#去批次
merge_data<- FindNeighbors(merge_data, reduction = 'mnn',dims = 1:15)#注意使用的是mnn數據
merge_data<- FindClusters(merge_data, resolution = 0.5)
merge_data<- RunUMAP(merge_data, reduction = 'mnn', dims = 1:15)#注意使用的是mnn數據
DimPlot(merge_data,label = T,reduction = 'umap')#可視化
RPCA
??RPCA,即reciprocal PCA,是目前Seurat主推的一種去批次整合的方法。基于RPCA的整合運行得更快,同時與CCA方法相比,也是一種更保守的方法,不同生物狀態的細胞在整合后不太可能“對齊”。在實際項目分析過程中我也發現RPCA的效果是要優于CCA,大家可以對比試試。詳細使用方法可以點擊reciprocal PCA鏈接。
Harmony
??與其他整合方法相比,Harmony運行時比較快速,內存低,整合效果沒CCA那么暴力,對稀有細胞的敏感性也比較好。同時在亞群細分時可以提取子集后再運行Harmony這樣也比CCA的方法要方便。
??Harmony算法概述如上圖所示:用顏色表示數據集,用形狀表示不同的細胞類型。首先,Harmony 應用PCA主成分分析將轉錄組范圍的表達譜嵌入到降維空間中。然后我們應用一個迭代過程來移除數據集的特定效果。 (A) Harmony 將細胞概率性地分配給集群,最大限度地提高每個集群內數據集的多樣性。 (B) Harmony 計算每個集群的所有數據集的全局質心,以及特定于數據集的質心。 (C) 在每個集群內,Harmony 根據質心計算每個數據集的校正因子。 (D) 最后,Harmony 使用基于 C 的細胞特定因子校正每個細胞。由于Harmony使用軟聚類,每個單獨的細胞可以通過與 A 中軟聚類分配比例的多個因素的線性組合進行校正。 Harmony 重復步驟 A 到 D 直到收斂。集群分配和數據集之間的依賴性隨著每一輪而減少。操作命令如下:
library(harmony)
merge_data<-merge(x = sample1, y=c(sample2,sample3) , add.cell.ids = c('S1','S1','S3'))#合并單個樣本數據
merge_data<- merge_data %>% Seurat::NormalizeData(verbose = FALSE) %>% FindVariableFeatures(selection.method = 'vst', nfeatures = 2000) %>% ScaleData(verbose = FALSE) %>% RunPCA(verbose = FALSE)#標準化
merge_data<- RunHarmony(merge_data, 'orig.ident')#去批次
merge_data<- FindNeighbors(merge_data, reduction = 'harmony',dims = 1:15)#注意使用的是harmony數據
merge_data<- FindClusters(merge_data, resolution = 0.5)
merge_data<- RunUMAP(merge_data, reduction = 'harmony', dims = 1:15)#注意使用的是harmony數據
DimPlot(merge_data,label = T,reduction = 'umap')#可視化
總結
??每種去批次的方法各有優劣,需要根據自己樣本的實際情況選定。如果自己樣本批次效應非常大(例如不同平臺、不同組織),建議選用CCA的方法,如果批次效應較小(同一平臺、相同組織),可以選擇RPCA或者Harmony的方法。當然,樣本整合的最終效果還得看分出來的群是否清晰無重疊、群與群之間的marker很特異,這都需要花費大量時間反復調整整合參數,最終才能得到理想的分群結果。