單細(xì)胞筆記7-scRNA-seq去除批次效應(yīng)的方法總結(jié)

Seurat

Seurat整合流程與原理

  1. 使用CCA分析將兩個(gè)數(shù)據(jù)集降維到同一個(gè)低維空間,因?yàn)镃CA降維之后的空間距離不是相似性而是相關(guān)性娃循,所以相同類(lèi)型與狀態(tài)的細(xì)胞可以克服技術(shù)偏倚重疊在一起炕檩。

  2. CCA降維之后細(xì)胞在低維空間有了可以度量的“距離”,MNN(mutual nearest neighbor)算法以此找到兩個(gè)數(shù)據(jù)集之間互相“距離”最近的細(xì)胞捌斧,Seurat將這些相互最近鄰細(xì)胞稱(chēng)為“錨點(diǎn)細(xì)胞”笛质。我們用兩個(gè)數(shù)據(jù)集A和B來(lái)說(shuō)明錨點(diǎn),假設(shè):

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

從圖中可以看出捞蚂,A3與B1是“相互“最近鄰的細(xì)胞妇押,而A3與B2、B3不是相互最近鄰細(xì)胞姓迅,A3+B1就是A敲霍、B兩個(gè)數(shù)據(jù)集中的錨點(diǎn)之一。實(shí)際數(shù)據(jù)中丁存,兩個(gè)數(shù)據(jù)集之間的錨點(diǎn)可能有幾百上千個(gè)肩杈。

  1. 理想情況下,相同類(lèi)型和狀態(tài)的細(xì)胞才能構(gòu)成配對(duì)錨點(diǎn)細(xì)胞解寝,但是異常的情況也會(huì)出現(xiàn)扩然,如C圖中query數(shù)據(jù)集中黑色的細(xì)胞團(tuán)。它在reference數(shù)據(jù)集沒(méi)有相同類(lèi)型的細(xì)胞编丘,但是它也找到了錨點(diǎn)配對(duì)細(xì)胞(紅色連線)与学。Seurat會(huì)通過(guò)兩步過(guò)濾這些不正確的錨點(diǎn):

    • 在CCA低維空間找到的錨點(diǎn)彤悔,返回到基因表達(dá)數(shù)據(jù)構(gòu)建的高維空間中驗(yàn)證,如果它們的轉(zhuǎn)錄特征相似性高則保留索守,否則過(guò)濾此錨點(diǎn)晕窑。
    • 檢查錨點(diǎn)細(xì)胞所在數(shù)據(jù)集最鄰近的30個(gè)細(xì)胞,查看它們重疊的錨點(diǎn)配對(duì)細(xì)胞的數(shù)量卵佛,重疊越多分值越高杨赤,代表錨點(diǎn)可靠性更高。
  2. 經(jīng)過(guò)層層過(guò)濾剩下的錨點(diǎn)細(xì)胞對(duì)截汪,可以認(rèn)為它們是相同類(lèi)型和狀態(tài)的細(xì)胞疾牲,它們之間的基因表達(dá)差異是技術(shù)偏倚引起的。Seurat計(jì)算它們的差異向量衙解,然后用此向量校正這個(gè)錨點(diǎn)錨定的細(xì)胞子集的基因表達(dá)值阳柔。校正后的基因表達(dá)值即消除了技術(shù)偏倚,實(shí)現(xiàn)了兩個(gè)單細(xì)胞數(shù)據(jù)集的整合蚓峦。

Seurat工作流程圖

Seurat工作流程

Seurat示例代碼

pbmc.list <- SplitObject(pbmc, split.by="batch")
for(i in 1:length(pbmc.list)) {
  pbmc.list[[i]] <- NormalizeData(pbmc.list[[i]],verbose=FALSE)
  pbmc.list[[i]] <- FindVariableFeatures(pbmc.list[[i]],selection.method="vst",verbose=FALSE)
}
AllBatch.anchors <- FindIntegrationAnchors(object.list = pbmc.list, dims = 1:20,k.filter=80)
pbmc <- IntegrateData(anchorset = AllBatch.anchors, dims = 1:20)
DefaultAssay(pbmc) <- "integrated"
pbmc <- ScaleData(pbmc, verbose = T, do.center=F,split.by = 'batch')
pbmc <- RunPCA(pbmc, npcs = 50, verbose = T)
pbmc <- RunUMAP(pbmc, reduction = "pca", dims = 1:20,
                reduction.name = 'seurat_umap', reduction.key = 'seurat_umap')
DimPlot(pbmc, reduction='seurat_umap', group.by='batch', pt.size=0.3,label=F)

參考

Tutorial:https://satijalab.org/seurat/articles/integration_mapping.html
Paper:https://www.cell.com/cell/fulltext/S0092-8674(19)30559-8


LIGER

LIGER原理

  • LIGER是從多個(gè)批次的數(shù)據(jù)中挑出一組共同的潛在因子舌剂,這些因子代表了每個(gè)數(shù)據(jù)集中相同的生物“信號(hào)”,但同時(shí)也保留了數(shù)據(jù)集的差異暑椰。為的是用這些因子聯(lián)合識(shí)別細(xì)胞類(lèi)型霍转,以及識(shí)別和保留細(xì)胞類(lèi)型特異性的差異。
  • LIGER首先采用綜合非負(fù)矩陣分解(iNMF)來(lái)學(xué)習(xí)低維空間一汽,首先對(duì)每個(gè)批次的單細(xì)胞基因表達(dá)矩陣經(jīng)過(guò)iNMF分解避消,可以得到三個(gè)矩陣:因子(行) x 細(xì)胞 (列)的H矩陣,數(shù)據(jù)集特有基因(行) x 因子 (列)的V矩陣召夹,以及數(shù)據(jù)集共有基因(行) x 因子 (列)的W矩陣岩喷。
iNMF原理
  • 我們知道NMF的優(yōu)化目標(biāo)是在迭代中優(yōu)化以下誤差
NMF優(yōu)化目標(biāo)
  • 而當(dāng)我們有多個(gè)數(shù)據(jù)集并想將其整合起來(lái)的時(shí)候,就需要使用iNMF戳鹅。設(shè)有k個(gè)待整合的數(shù)據(jù)集均驶,iNMF對(duì)NMF的形式進(jìn)行如下修正:
iNMF的優(yōu)化目標(biāo)
  • 我們可以假定待整合的不同數(shù)據(jù)集之間必然存在著共有的一些特征,也必然存在著一些獨(dú)特的特征枫虏。因此我們可以把原始W矩陣寫(xiě)成W矩陣與Vk矩陣的疊加妇穴,新的W矩陣則相當(dāng)于不同數(shù)據(jù)集之間共有的特征,而Vk矩陣則是第k個(gè)數(shù)據(jù)集獨(dú)特的特征隶债。另外引入λ正則化項(xiàng)腾它,λ的大小反映了數(shù)據(jù)集之間的相似性。當(dāng)λ等于0時(shí)死讹,VH的二范數(shù)對(duì)目標(biāo)函數(shù)沒(méi)有影響瞒滴,因此在優(yōu)化的過(guò)程中我們得到的W矩陣(也就是共有的特征)會(huì)趨向于0,而數(shù)據(jù)集獨(dú)特的特征則會(huì)使得Error項(xiàng)盡可能的小,因此數(shù)據(jù)集之間的差異(也就是數(shù)據(jù)集獨(dú)特的特征)就會(huì)盡可能的大妓忍。同理虏两,當(dāng)λ趨于正無(wú)窮大時(shí),減小VH的二范數(shù)對(duì)優(yōu)化目標(biāo)函數(shù)的權(quán)重極大世剖,在這種情況下定罢,W矩陣,也就是數(shù)據(jù)集共有的特征旁瘫,就會(huì)盡可能的大祖凫。

  • 因此在進(jìn)行非負(fù)矩陣分解的過(guò)程中,我們需要選擇合適的參數(shù)K和λ酬凳,注意惠况,這里的K指的是W矩陣的維度。在最理想的狀態(tài)下宁仔,數(shù)據(jù)集中的每一個(gè)真實(shí)存在的cluster將占據(jù)W矩陣的一個(gè)緯度稠屠,此時(shí)數(shù)據(jù)之間分散得越開(kāi),H矩陣的KL散度就越大翎苫。因此參數(shù)K的選擇可以基于H矩陣的KL散度進(jìn)行優(yōu)化完箩,當(dāng)KL散度剛剛飽和時(shí)的K應(yīng)當(dāng)是最優(yōu)的K。同理拉队,一般而言,我們希望在進(jìn)行數(shù)據(jù)整合之后阻逮,不同數(shù)據(jù)集之間能夠盡可能均勻的map在一起粱快,這種均勻的程度可以用Alignment score進(jìn)行衡量,隨著λ的增大叔扼,我們假定的數(shù)據(jù)集之間的相似性越高事哭,通常Alignment score就會(huì)越高。因此參數(shù)λ的選擇可以基于聚類(lèi)的Alignment score進(jìn)行優(yōu)化瓜富,當(dāng)Alignment score剛剛飽和時(shí)的λ應(yīng)當(dāng)是最優(yōu)的λ鳍咱。但必須要指出的是,這種參數(shù)的優(yōu)化僅僅基于通常無(wú)先驗(yàn)知識(shí)的情況与柑,我們更建議以此為參考谤辜,根據(jù)我們對(duì)數(shù)據(jù)的理解和先驗(yàn)知識(shí)選擇合適的參數(shù)。

  • iNMF分解矩陣后的“因子”价捧,相當(dāng)于PCA降維之后的"PC"軸丑念;但是iNMF的因子比 PCA的PC軸可解釋性更強(qiáng),在單細(xì)胞數(shù)據(jù)分析中结蟋,每個(gè)因子常常對(duì)應(yīng)一種細(xì)胞類(lèi)型脯倚。V矩陣和W矩陣中l(wèi)oading值靠前的基因,往往具有顯著的生物學(xué)意義。
  • Liger的聚類(lèi)算法也比較有意思推正,它并不基于單個(gè)細(xì)胞的坐標(biāo)(label)進(jìn)行聚類(lèi)恍涂,而是用單個(gè)細(xì)胞周?chē)鷎個(gè)鄰居細(xì)胞的坐標(biāo)(label)為該細(xì)胞賦予一個(gè)新的坐標(biāo),再根據(jù)曼哈頓距離或其他的范數(shù)距離進(jìn)行聚類(lèi)植榕。Liger作者的觀點(diǎn)是單個(gè)細(xì)胞被錯(cuò)誤分配坐標(biāo)(label)的概率要遠(yuǎn)大于其周?chē)鷎個(gè)鄰居細(xì)胞坐標(biāo)都被系統(tǒng)性地錯(cuò)誤分配的概率要高得多再沧,因此使用周?chē)鷎個(gè)鄰居細(xì)胞的坐標(biāo)來(lái)替代該細(xì)胞本身的坐標(biāo)會(huì)使聚類(lèi)的結(jié)果更加魯棒。

LIGER工作流程圖

LIGER工作流程

LIGER示例代碼

library(liger)
library(SeuratWrappers)
pbmc <- NormalizeData(pbmc)
pbmc <- FindVariableFeatures(pbmc)
pbmc <- ScaleData(pbmc, split.by = "batch", do.center = FALSE)
pbmc <- RunOptimizeALS(pbmc, k = 20, lambda = 5, split.by = "batch")
pbmc <- RunQuantileNorm(pbmc, split.by = "batch")
pbmc <- RunUMAP(pbmc, dims = 1:ncol(pbmc[["iNMF"]]), reduction = "iNMF",
                reduction.name = 'liger_umap', reduction.key = 'liger_umap')
DimPlot(pbmc, group.by = "batch", label=F, reduction = 'liger_umap')

參考

Tutorial:https://htmlpreview.github.io/?https://github.com/satijalab/seurat.wrappers/blob/master/docs/liger.html
Paper:https://www.cell.com/cell/fulltext/S0092-8674%2819%2930504-5
https://www.plob.org/article/24538.html


Harmony

Harmony原理

  • Harmony需要輸入低維空間的坐標(biāo)值(embedding)内贮,一般使用PCA的降維結(jié)果产园。Harmony導(dǎo)入PCA的降維數(shù)據(jù)后,會(huì)采用soft k-means clustering算法將細(xì)胞聚類(lèi)夜郁。常用的聚類(lèi)算法僅考慮細(xì)胞在低維空間的距離什燕,但是soft clustering算法會(huì)考慮我們提供的校正因素。
  • 例如竞端,細(xì)胞c2距離cluster1有點(diǎn)遠(yuǎn)屎即,本來(lái)不能算作cluster1的一份子;但是c2和cluster1的細(xì)胞來(lái)自不同的數(shù)據(jù)集事富,因?yàn)槲覀兤谕煌臄?shù)據(jù)集融合技俐,所以破例讓它加入cluster1了。
  • 聚類(lèi)之后统台,先計(jì)算每個(gè)cluster內(nèi)各個(gè)數(shù)據(jù)集的細(xì)胞的中心點(diǎn)雕擂,然后根據(jù)這些中心點(diǎn)計(jì)算各個(gè)cluster的中心點(diǎn)。最后通過(guò)算法讓cluster內(nèi)的細(xì)胞向中心聚集贱勃,實(shí)在收斂不了的離群細(xì)胞就過(guò)濾掉井赌。調(diào)整之后的數(shù)據(jù)重復(fù):聚類(lèi)—計(jì)算cluster中心點(diǎn)—收斂細(xì)胞—聚類(lèi)的過(guò)程,不斷迭代直至聚類(lèi)效果趨于穩(wěn)定贵扰。

Harmony工作流程圖

harmony工作流程

Harmony示例代碼

library(harmony)
pbmc <- NormalizeData(pbmc)
pbmc <- FindVariableFeatures(pbmc)
pbmc <- ScaleData(pbmc, split.by = "batch", do.center = FALSE)
pbmc <- RunPCA(pbmc, npcs = 50, verbose = FALSE)
pbmc <- RunHarmony(pbmc, group.by.vars = "batch")
pbmc <- RunUMAP(pbmc, reduction = "harmony", dims = 1:20,
                reduction.name = 'harmony_umap', reduction.key = 'harmony_umap')
DimPlot(pbmc, reduction='harmony_umap', label=F, group.by = 'batch')

參考

Tutorial:http://htmlpreview.github.io/?https://github.com/immunogenomics/harmony/blob/master/docs/SeuratV3.html
Paper:https://www.nature.com/articles/s41592-019-0619-0


BEER

BEER的主要步驟包含兩步

  1. 首先對(duì)每個(gè)批次的單細(xì)胞矩陣進(jìn)行降維仇穗,對(duì)相似的10個(gè)細(xì)胞進(jìn)行分組,產(chǎn)生一個(gè)代表性的表達(dá)譜戚绕,然后找出兩個(gè)批次中所有相似的細(xì)胞組(Mutual Nearest, MN)纹坐。
  2. 將兩個(gè)批次整合,然后進(jìn)行PCA舞丛。對(duì)于一對(duì)MN耘子,如果沒(méi)有批次效應(yīng),那么他們?cè)谀硞€(gè)PC上應(yīng)該具有相似的值球切;BEER刪除那些在一對(duì)MN具有低相關(guān)性的PC拴还,以達(dá)到去除批次效應(yīng)的目的。

BEER工作流程圖

BEER工作流程

BEER示例代碼

source("../BEER-master/BEER.R")
DATA <- pbmc@assays$RNA@counts
DATA.BATCH <- pbmc$batch
RM1=read.table('../data/Apoptosis.txt',sep='\t',header=FALSE)[,1]
RM2=read.table('../data/CellCycle.txt',sep='\t',header=FALSE)[,1]
RM3=read.table('../data/Ribosome.txt',sep='\t',header=FALSE)[,1]
RMG=c(as.character(RM1),as.character(RM2),as.character(RM3))
mybeer <- BEER(DATA, DATA.BATCH, GNUM=30, PCNUM=50, ROUND=1, GN=2000, SEED=1, COMBAT=TRUE, RMG=RMG)
mybeer <- ReBEER(mybeer, GNUM=30, PCNUM=50, ROUND=1, SEED=1, RMG=RMG) 
PCUSE <- mybeer$select
PCUSE <- PCUSE[which(PCUSE <= 20)]
# PCUSE=.selectUSE(mybeer, CUTR=0.8, CUTL=0.8, RR=0.5, RL=0.5)
mybeer$seurat@meta.data <- pbmc@meta.data
pbmc0 <- mybeer$seurat
pbmc0 <- RunUMAP(object = pbmc0, reduction='pca',dims = PCUSE, check_duplicates=FALSE,
                 reduction.name = "beer_umap",reduction.key = "beer_umap",
                 min.dist = 0.3, n.neighbors = 200L)
DimPlot(pbmc0, reduction='beer_umap', group.by='batch', pt.size=0.1) + NoLegend()

參考

Tutorial:https://github.com/jumphone/BEER
Paper:https://www.nature.com/articles/s41421-019-0114-x


參考

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末欧聘,一起剝皮案震驚了整個(gè)濱河市片林,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖费封,帶你破解...
    沈念sama閱讀 206,126評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件焕妙,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡弓摘,警方通過(guò)查閱死者的電腦和手機(jī)焚鹊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)韧献,“玉大人末患,你說(shuō)我怎么就攤上這事〈敢ぃ” “怎么了璧针?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,445評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)渊啰。 經(jīng)常有香客問(wèn)我探橱,道長(zhǎng),這世上最難降的妖魔是什么绘证? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,185評(píng)論 1 278
  • 正文 為了忘掉前任隧膏,我火速辦了婚禮,結(jié)果婚禮上嚷那,老公的妹妹穿的比我還像新娘胞枕。我一直安慰自己,他們只是感情好魏宽,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布曲稼。 她就那樣靜靜地躺著,像睡著了一般湖员。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上瑞驱,一...
    開(kāi)封第一講書(shū)人閱讀 48,970評(píng)論 1 284
  • 那天娘摔,我揣著相機(jī)與錄音,去河邊找鬼唤反。 笑死凳寺,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的彤侍。 我是一名探鬼主播肠缨,決...
    沈念sama閱讀 38,276評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼盏阶!你這毒婦竟也來(lái)了晒奕?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 36,927評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎脑慧,沒(méi)想到半個(gè)月后魄眉,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,400評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡闷袒,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評(píng)論 2 323
  • 正文 我和宋清朗相戀三年坑律,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片囊骤。...
    茶點(diǎn)故事閱讀 37,997評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡晃择,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出也物,到底是詐尸還是另有隱情宫屠,我是刑警寧澤,帶...
    沈念sama閱讀 33,646評(píng)論 4 322
  • 正文 年R本政府宣布焦除,位于F島的核電站激况,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏膘魄。R本人自食惡果不足惜乌逐,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望创葡。 院中可真熱鬧浙踢,春花似錦、人聲如沸灿渴。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,204評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)骚露。三九已至蹬挤,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間棘幸,已是汗流浹背焰扳。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,423評(píng)論 1 260
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留误续,地道東北人吨悍。 一個(gè)月前我還...
    沈念sama閱讀 45,423評(píng)論 2 352
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像蹋嵌,于是被迫代替她去往敵國(guó)和親育瓜。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評(píng)論 2 345

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