scRNA-Seq | 多樣本Seurat+CCA整合

一、前言

左邊的圖簡單地把多個單細(xì)胞的數(shù)據(jù)合并在一起趋惨,不考慮去除批次效應(yīng),樣本之間有明顯的分離現(xiàn)象惦蚊。右邊的圖是使用算法校正批次效應(yīng)器虾,不同的樣本基本融和在一起了讯嫂。scRNA數(shù)據(jù)校正批次效應(yīng)的算法有很多:MNN, CCA+MNN, Harmony, Scanorama, scMerge等,本文推薦發(fā)表在Cell上的CCA+MNN方法兆沙,通過Seurat包就可以實現(xiàn)欧芽。

1. Seurat數(shù)據(jù)整合功能簡介

Seurat早期版本整合數(shù)據(jù)的核心算法是CCA,文章發(fā)表在2018年的nature biotechnology葛圃,作者是Seurat的開發(fā)者Andrew Butler千扔。同年Haghverdi等人開發(fā)了MNN算法校正批次效應(yīng),文章也發(fā)表在了nature biotechnology库正。2019年Andrew等人將CCA與MNN算法結(jié)合起來昏鹃,并參考SNN算法的理念設(shè)計了“錨點”評分體系,使Seurat整合數(shù)據(jù)更強大更穩(wěn)健诀诊。它不僅可以校正實驗的批次效應(yīng)洞渤,還能跨平臺整合數(shù)據(jù),例如將10x單細(xì)胞數(shù)據(jù)属瓣、BD單細(xì)胞數(shù)據(jù)和SMART單細(xì)胞數(shù)據(jù)整合在一起载迄;也能整合單細(xì)胞多組學(xué)數(shù)據(jù),例如將單細(xì)胞ATAC抡蛙、空間轉(zhuǎn)錄組與單細(xì)胞轉(zhuǎn)錄組數(shù)據(jù)整合在一起护昧。本文只討論多樣本數(shù)據(jù)的合并與校正批次效應(yīng),多組學(xué)數(shù)據(jù)的整合以后專門寫篇文章介紹粗截。

2. Seurat整合流程與原理

(1)使用CCA分析將兩個數(shù)據(jù)集降維到同一個低維空間惋耙,因為CCA降維之后的空間距離不是相似性而是相關(guān)性,所以相同類型與狀態(tài)的細(xì)胞可以克服技術(shù)偏倚重疊在一起熊昌。CCA分析效果見下圖:

左圖使用PCA降維绽榛,細(xì)胞之間的距離體現(xiàn)的是轉(zhuǎn)錄特征相似性,批次效應(yīng)引入的系統(tǒng)誤差會使樣本分離婿屹。右圖使用CCA降維灭美,細(xì)胞之間的距離體現(xiàn)的是轉(zhuǎn)錄特征相關(guān)性,因此同類型且同狀態(tài)的細(xì)胞可以跨越技術(shù)差異重疊在一起昂利。

(2)CCA降維之后細(xì)胞在低維空間有了可以度量的“距離”届腐,MNN(mutual nearest neighbor)算法以此找到兩個數(shù)據(jù)集之間互相“距離”最近的細(xì)胞,Seurat將這些相互最近鄰細(xì)胞稱為“錨點細(xì)胞”蜂奸。我們用兩個數(shù)據(jù)集A和B來說明錨點犁苏,假設(shè):

  • A樣本中的細(xì)胞A3與B樣本中距離最近的細(xì)胞有3個(B1,B2,B3)
  • B樣本中的細(xì)胞B1與A樣本中距離最近的細(xì)胞有4個(A1,A2,A3,A4)
  • B樣本中的細(xì)胞B2與A樣本中距離最近的細(xì)胞有2個(A5,A6)
  • B樣本中的細(xì)胞B3與A樣本中距離最近的細(xì)胞有3個(A1,A2,A7)

那么A3與B1是相互最近鄰細(xì)胞,A3與B2扩所、B3不是相互最近鄰細(xì)胞围详,A3+B1就是A、B兩個數(shù)據(jù)集中的錨點之一碌奉。實際數(shù)據(jù)中短曾,兩個數(shù)據(jù)集之間的錨點可能有幾百上千個寒砖,如下圖所示:

圖中每條線段連接的都是相互最近鄰細(xì)胞

(3)理想情況下相同類型和狀態(tài)的細(xì)胞才能構(gòu)成配對錨點細(xì)胞,但是異常的情況也會出現(xiàn)嫉拐,如上圖中query數(shù)據(jù)集中黑色的細(xì)胞團哩都。它在reference數(shù)據(jù)集沒有相同類型的細(xì)胞,但是它也找到了錨點配對細(xì)胞(紅色連線)婉徘。Seurat會通過兩步過濾這些不正確的錨點:

  1. 在CCA低維空間找到的錨點漠嵌,返回到基因表達(dá)數(shù)據(jù)構(gòu)建的高維空間中驗證,如果它們的轉(zhuǎn)錄特征相似性高則保留盖呼,否則過濾此錨點儒鹿。

  2. 檢查錨點細(xì)胞所在數(shù)據(jù)集最鄰近的30個細(xì)胞,查看它們重疊的錨點配對細(xì)胞的數(shù)量几晤,重疊越多分值越高约炎,代表錨點可靠性更高。原理見下圖:

左邊query數(shù)據(jù)集的一個錨點細(xì)胞能在reference數(shù)據(jù)集鄰近區(qū)域找到多個配對錨點細(xì)胞蟹瘾,可以得到更高的錨點可靠性評分圾浅;右邊一個錨點細(xì)胞只能在reference數(shù)據(jù)集鄰近區(qū)域找到一個配對錨點細(xì)胞,錨點可靠性評分則較低憾朴。

4狸捕、經(jīng)過層層過濾剩下的錨點細(xì)胞對,可以認(rèn)為它們是相同類型和狀態(tài)的細(xì)胞众雷,它們之間的基因表達(dá)差異是技術(shù)偏倚引起的灸拍。Seurat計算它們的差異向量,然后用此向量校正這個錨點錨定的細(xì)胞子集的基因表達(dá)值砾省。校正后的基因表達(dá)值即消除了技術(shù)偏倚鸡岗,實現(xiàn)了兩個單細(xì)胞數(shù)據(jù)集的整合。

深究技術(shù)細(xì)節(jié)的朋友可以參閱原文:Tim S, Andrew Butler, Paul Hoffman , et al. Comprehensive integration of single cell data[J].Cell,2019.

二纯蛾、整合

1. 讀入數(shù)據(jù)

GSE162631纤房,4個膠質(zhì)瘤樣本,總計5萬多個細(xì)胞翻诉。

library(dplyr)
library(Seurat)
library(patchwork)



dirs = dir(pattern = "^R")
f = "dat.Rdata"
if(!file.exists(f)){
  scelist = list()
}

2. 讀取樣本,創(chuàng)建 Seurat 對象

在讀取樣本的同時直接設(shè)置樣本的篩選條件捌刮,如RNA碰煌,UMI,線粒體等绅作。

for(i in 1:length(dirs)){
  x = Read10X(data.dir = dirs[[i]])
  scelist[[i]] <- CreateSeuratObject(counts = x, project = paste0("R",i))
  scelist[[i]][["percent.mt"]] <- PercentageFeatureSet(scelist[[i]], pattern = "^MT-")
  scelist[[i]] <- subset(scelist[[i]], subset = percent.mt < 10)
}
names(scelist)  = paste0("R",1:4)
sum(sapply(scelist, function(x)ncol(x@assays$RNA@counts)))

3. 對數(shù)據(jù)先進(jìn)行標(biāo)準(zhǔn)化芦圾,并識別 variable feature

# normalize and identify variable features for each dataset independently
scelist <- lapply(X = scelist, FUN = function(x) {
    x <- NormalizeData(x)
    x <- FindVariableFeatures(x, selection.method = "vst", nfeatures = 3000)
  })

4. 整合數(shù)據(jù)

Seurat提供了一組Integration方法來去除批次效應(yīng),這些方法首先識別處于匹配生物學(xué)狀態(tài)(anchors)的跨數(shù)據(jù)集細(xì)胞對俄认,然后基于這些anchors校正數(shù)據(jù)集之間的批次效應(yīng)


首先提取用來進(jìn)行Integration的基因个少,然后找到anchors洪乍,基于anchors進(jìn)行批次效應(yīng)矯正

使用FindIntegrationAnchors函數(shù)識別錨點。參數(shù)默認(rèn)夜焦。

然后我們將這些錨點傳遞給IntegrateData函數(shù)壳澳,該函數(shù)返回一個Seurat對象。

features <- SelectIntegrationFeatures(object.list = scelist)
immune.anchors <- FindIntegrationAnchors(object.list = scelist, anchor.features = features)
immune.combined <- IntegrateData(anchorset = immune.anchors)
DefaultAssay(immune.combined) <- "integrated"

immune.combined 是兩個樣品經(jīng)過批次效應(yīng)矯正后合并的Seurat 對象茫经,對這個對象進(jìn)行分群分析

然后我們可以使用這個新的表達(dá)矩陣進(jìn)行下游分析和可視化巷波。

5. 下游分析

按照單樣本的流程繼續(xù)分析,包括進(jìn)行標(biāo)準(zhǔn)化卸伞,運行PCA抹镊,并使用UMAP可視化結(jié)果。

# Run the standard workflow for visualization and clustering
immune.combined <- ScaleData(immune.combined, verbose = FALSE)
immune.combined <- RunPCA(immune.combined, npcs = 30, verbose = FALSE)
immune.combined <- RunUMAP(immune.combined, reduction = "pca", dims = 1:30)
immune.combined <- FindNeighbors(immune.combined, reduction = "pca", dims = 1:30)
immune.combined <- FindClusters(immune.combined, resolution = 0.5)
save(immune.combined,file = f)


load(f)
p1 <- DimPlot(immune.combined, reduction = "umap", group.by = "orig.ident")
p2 <- DimPlot(immune.combined, reduction = "umap", label = TRUE, repel = TRUE)
p1 + p2

可以看到經(jīng)過批次矯正后荤傲,4個樣品的大部分細(xì)胞在UMAP上都是重疊的垮耳。

6. 注釋

測試樣品經(jīng)過批次矯正后,相同類型的細(xì)胞都聚到了一起遂黍,這樣更有利于對細(xì)胞類型進(jìn)行鑒定终佛。實際分析時,我們可以對自己的樣品同時做這兩種分析妓湘,根據(jù)結(jié)果來判斷是否需要進(jìn)行批次矯正查蓉。

library(celldex)
library(SingleR)
#ref <- celldex::HumanPrimaryCellAtlasData()
ref <- get(load("../single_ref/ref_Human_all.RData"))
library(BiocParallel)
pred.scRNA <- SingleR(test = immune.combined@assays$integrated@data, 
                      ref = ref,
                      labels = ref$label.main, 
                      clusters = immune.combined@active.ident)
pred.scRNA$pruned.labels
##  [1] "Macrophage"        "Macrophage"        "Monocyte"         
##  [4] "Macrophage"        "Macrophage"        "Macrophage"       
##  [7] "Macrophage"        "Monocyte"          "Neutrophils"      
## [10] "Neutrophils"       "Endothelial_cells" "Monocyte"         
## [13] "Macrophage"        "Macrophage"        "Tissue_stem_cells"
## [16] "NK_cell"           "Monocyte"          "B_cell"
plotScoreHeatmap(pred.scRNA, clusters=pred.scRNA@rownames, fontsize.row = 9,show_colnames = T)

image
new.cluster.ids <- pred.scRNA$pruned.labels
names(new.cluster.ids) <- levels(immune.combined)
levels(immune.combined)
##  [1] "0"  "1"  "2"  "3"  "4"  "5"  "6"  "7"  "8"  "9"  "10" "11" "12" "13" "14"
## [16] "15" "16" "17"
immune.combined <- RenameIdents(immune.combined,new.cluster.ids)
levels(immune.combined)
## [1] "Macrophage"        "Monocyte"          "Neutrophils"      
## [4] "Endothelial_cells" "Tissue_stem_cells" "NK_cell"          
## [7] "B_cell"
UMAPPlot(object = immune.combined, pt.size = 0.5, label = TRUE)

代碼主要來自:https://satijalab.org/seurat/articles/integration_introduction.html

參考:
http://www.reibang.com/p/9d798e95fb65
https://www.bilibili.com/read/cv15514134
http://www.reibang.com/p/d323d0291dd4
https://baijiahao.baidu.com/s?id=1707789923750679171&wfr=spider&for=pc
https://mp.weixin.qq.com/s/PA_xTrqVYiZCOscP43CgUw
https://mp.weixin.qq.com/s/FWvOEJSNb9epNZmxwFkhkg
https://www.genenergy.cn/news/156/2379.html

最后編輯于
?著作權(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
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蓝纲,“玉大人阴孟,你說我怎么就攤上這事∷懊裕” “怎么了永丝?”我有些...
    開封第一講書人閱讀 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