對于非常大的數(shù)據(jù)集撑蚌,標(biāo)準(zhǔn)工作流程有時可能計算成本高得令人望而卻步。在此工作流程中搏屑,我們可采用如下兩種方法提高效率和運(yùn)行時間:
- 互惠 PCA (RPCA)
- 基于參考的整合
主要的效率改進(jìn)是使用了FindIntegrationAnchors()。首先睬棚,我們使用互惠 PCA (RPCA) 而不是 CCA 來尋找錨點第煮。在使用互惠的 PCA 確定任意兩個數(shù)據(jù)集之間的錨點時抑党,我們將每個數(shù)據(jù)集投影到其他 PCA 空間中,并根據(jù)相同的鄰近要求約束錨點底靠。所有下游整合步驟保持不變害晦,我們能夠"更正"(或協(xié)調(diào))數(shù)據(jù)集暑中。
此外,我們使用基于參考的整合鳄逾。在標(biāo)準(zhǔn)工作流中稻轨,我們識別所有數(shù)據(jù)集之間的錨點雕凹。雖然這給數(shù)據(jù)集在下游整合中同等的權(quán)重殴俱,但它也可能使計算變得密集。例如线欲,在整合10 個不同的數(shù)據(jù)集時明场,我們需要執(zhí)行 45 次不同的對比李丰。作為替代方案,我們在此介紹了指定一個或多個數(shù)據(jù)集作為整合分析的"參考"趴泌,其余數(shù)據(jù)集被指定為"查詢"數(shù)據(jù)集舟舒。在此工作流中踱讨,我們不會在成對查詢數(shù)據(jù)集之間識別錨點魏蔗,從而減少比較次數(shù)痹筛。例如廓鞠,在將整合10 個數(shù)據(jù)集將其中指定的 1 個數(shù)據(jù)集集成為參考時,我們僅執(zhí)行 9 次比較床佳∽淘纾基于參考的整合可應(yīng)用于log標(biāo)準(zhǔn)化或 SCTransform標(biāo)準(zhǔn)化的數(shù)據(jù)集。
可選的工作流程包括以下步驟:
- 創(chuàng)建一個seurat對象用來整合
- 針對每個數(shù)據(jù)集分別執(zhí)行標(biāo)準(zhǔn)化杆麸、基因選擇和歸一化
- 在列表中的每個對象上運(yùn)行 PCA
- 整合數(shù)據(jù)集,并進(jìn)行聯(lián)合分析
總的來說浪感,我們觀察到標(biāo)準(zhǔn)工作流程和此處演示的工作流程之間驚人的相似結(jié)果,但計算時間和內(nèi)存顯著減少影兽。如果數(shù)據(jù)集存在高度差異(例如揭斧,跨模式映射或跨物種映射)峻堰,則只能使用一小部分基因來進(jìn)行整合讹开,您可以使用 CCA 得到更好的結(jié)果捐名。
例如,我們將使用來自人類細(xì)胞圖集的"免疫細(xì)胞圖譜"數(shù)據(jù)镶蹋,這些數(shù)據(jù)可以在這里找到成艘。
library(Seurat)
獲取數(shù)據(jù)后,我們首先執(zhí)行標(biāo)準(zhǔn)化和變異基因選擇狰腌。
bm280k.data <- Read10X_h5("../data/ica_bone_marrow_h5.h5")
bm280k <- CreateSeuratObject(counts = bm280k.data, min.cells = 100, min.features = 500)
bm280k.list <- SplitObject(bm280k, split.by = "orig.ident")
bm280k.list <- lapply(X = bm280k.list, FUN = function(x) {
x <- NormalizeData(x, verbose = FALSE)
x <- FindVariableFeatures(x, verbose = FALSE)
})
接下來除破,選擇基因用來后續(xù)整合琼腔,并在列表中的每個對象上運(yùn)行 PCA。
features <- SelectIntegrationFeatures(object.list = bm280k.list)
bm280k.list <- lapply(X = bm280k.list, FUN = function(x) {
x <- ScaleData(x, features = features, verbose = FALSE)
x <- RunPCA(x, features = features, verbose = FALSE)
})
由于此數(shù)據(jù)集包含男性和女性丹莲,我們將選擇一男一女(BM1 和 BM2)用于基于參考的工作流程光坝。通過檢查XIST基因的表達(dá)來確定性別甥材。
anchors <- FindIntegrationAnchors(object.list = bm280k.list, reference = c(1, 2), reduction = "rpca",
dims = 1:50)
bm280k.integrated <- IntegrateData(anchorset = anchors, dims = 1:50)
bm280k.integrated <- ScaleData(bm280k.integrated, verbose = FALSE)
bm280k.integrated <- RunPCA(bm280k.integrated, verbose = FALSE)
bm280k.integrated <- RunUMAP(bm280k.integrated, dims = 1:50)
DimPlot(bm280k.integrated, group.by = "orig.ident")