scATAC分析神器ArchR初探-利用ArchR豐富ChromVAR偏差(13)

scATAC分析神器ArchR初探-簡介(1)
scATAC分析神器ArchR初探-ArchR進(jìn)行doublet處理(2)
scATAC分析神器ArchR初探-創(chuàng)建ArchRProject(3)
scATAC分析神器ArchR初探-使用ArchR降維(4)
scATAC分析神器ArchR初探--使用ArchR進(jìn)行聚類(5)
scATAC分析神器ArchR初探-單細(xì)胞嵌入(6)
scATAC分析神器ArchR初探-使用ArchR計算基因活性值和標(biāo)記基因(7)
scATAC分析神器ArchR初探-scRNA-seq確定細(xì)胞類型(8)
scATAC分析神器ArchR初探-ArchR中的偽批次重復(fù)處理(9)
scATAC分析神器ArchR初探-使用ArchR-peak-calling(10)
scATAC分析神器ArchR初探-使用ArchR識別標(biāo)記峰(11)
scATAC分析神器ArchR初探-使用ArchR進(jìn)行主題和功能豐富(12)
scATAC分析神器ArchR初探-利用ArchR豐富ChromVAR偏差(13)
scATAC分析神器ArchR初探-使用ArchR進(jìn)行足跡(14)
scATAC分析神器ArchR初探-使用ArchR進(jìn)行整合分析(15)
scATAC分析神器ArchR初探-使用ArchR進(jìn)行軌跡分析(16)

13-利用ArchR豐富ChromVAR偏差

如前幾章所示,TF基序富集可以幫助我們預(yù)測哪些調(diào)控因子在我們感興趣的細(xì)胞類型中最活躍。然而,這些富集不是基于每個細(xì)胞計算的,并且它們沒有考慮到Tn5轉(zhuǎn)座酶的插入序列偏差。chromVAR是Greenlead Lab打包的R,它是為解決這些問題而創(chuàng)建的。chromVAR用于根據(jù)稀疏染色質(zhì)可及性數(shù)據(jù)預(yù)測每個細(xì)胞的TF活性富集。chromVAR的兩個主要輸出是:

  1. “偏差”-偏差是對給定特征(即基序)的每個單元可訪問性與所有單元格或樣本均值的預(yù)期可訪問性相差多少的偏差校正度量。
  2. “ z分?jǐn)?shù)”-z分?jǐn)?shù)(也稱為“偏差分?jǐn)?shù)”)是所有像元上每個偏差校正偏差的z分?jǐn)?shù)。偏差評分的絕對值與每個單元的讀取深度相關(guān)。這是因為,隨著閱讀次數(shù)的增加,給定特征(即基序)在每個單元可訪問性方面與預(yù)期的差異要比偶然發(fā)生的差異更有把握。

chromVAR的主要局限性之一是它是在scATAC-seq數(shù)據(jù)生成的早期階段設(shè)計的,當(dāng)時實驗由數(shù)百個細(xì)胞組成。在這種實驗規(guī)模下,chromVAR可以輕松地將整個逐峰矩陣讀取到內(nèi)存中,以快速計算TF偏差。但是,當(dāng)前的實驗方法使用了成千上萬個單元,生成了逐個單元的矩陣,這些矩陣很難讀入內(nèi)存。即使對于大小適中的50,000個數(shù)據(jù)集,這也會導(dǎo)致運行時間和內(nèi)存使用量急劇增加。

為了避免這些限制,ArchR通過獨立分析樣本子矩陣來實施相同的chromVAR分析工作流程。


首先,ArchR讀取每個子樣本中所有單元格上每個峰的全局可訪問性。其次,對于每個峰,ArchR都會識別一組與GC含量和可及性相匹配的背景峰。第三,ArchR使用峰的背景設(shè)置和全局可訪問性來獨立計算每個樣本的帶有chromVAR的偏差校正偏差。此實現(xiàn)要求在任何給定時間僅將5,000-10,000個單元中的數(shù)據(jù)加載到內(nèi)存中,從而最大程度地減少內(nèi)存需求,使用chromVAR進(jìn)行可擴(kuò)展的分析并提高運行時性能。

13.1主題偏差

首先,請確保已在中添加了主題注釋ArchRProject。

if("Motif" %ni% names(projHeme5@peakAnnotation)){
    projHeme5 <- addMotifAnnotations(ArchRProj = projHeme5, motifSet = "cisbp", name = "Motif")
}

我們還需要添加一組背景峰,用于計算偏差。使用該chromVAR::getBackgroundPeaks()函數(shù)選擇背景峰,該函數(shù)根據(jù)GC含量的相似性和所有樣品之間的碎片數(shù)(使用馬氏距離)對峰進(jìn)行采樣。

projHeme5 <- addBgdPeaks(projHeme5)

現(xiàn)在,我們準(zhǔn)備使用該addDeviationsMatrix()函數(shù)計算所有圖案注釋中每個單元的偏差。該函數(shù)有一個可選參數(shù),名為matrixName,它使我們能夠定義將存儲在Arrow文件中的偏差矩陣的名稱。如果我們沒有為該參數(shù)提供值,如下面的示例所示,此函數(shù)通過在的名稱上添加單詞“ Matrix”來創(chuàng)建矩陣名稱peakAnnotation。下面的示例在我們每個名為“ MotifMatrix”的Arrow文件中創(chuàng)建一個偏差矩陣。

projHeme5 <- addDeviationsMatrix(
  ArchRProj = projHeme5, 
  peakAnnotation = "Motif",
  force = TRUE
)

要訪問這些偏差,我們使用getVarDeviations()函數(shù)。如果我們希望該函數(shù)返回一個ggplot對象,則進(jìn)行設(shè)置,plot = TRUE否則,該函數(shù)將返回該DataFrame對象。該head說的DataFrame對象是默認(rèn)運行該功能時顯示。

plotVarDev <- getVarDeviations(projHeme5, name = "MotifMatrix", plot = TRUE)

從的上述快照中DataFrame,您可以看到seqnamesMotifMatrix不是染色體。通常情況下,像矩陣TileMatrixPeakMatrixGeneScoreMatrix我們保存在染色體上的信息seqnames。在MotifMatrix不具有任何相應(yīng)的位置上的信息,但,相反,同時存儲從chromVAR了“devations”和“z分?jǐn)?shù)”到使用兩個不同seqnames相同的基質(zhì)- deviationsz。稍后,如果您嘗試在這類函數(shù)中使用MotifMatrix(屬于類Sparse.Assays.Matrix),這一點就變得很重要getMarkerFeatures()。在這些類型的操作中,ArchR會希望您將其子集化為MotifMatrix兩者之一seqnames(即,選擇z得分或偏差以執(zhí)行計算)。

然后,我們可以繪制這些變量偏差。

plotVarDev

要保存此圖的可編輯矢量化版本,我們使用plotPDF()函數(shù)。

plotPDF(plotVarDev, name = "Variable-Motif-Deviation-Scores", width = 5, height = 5, ArchRProj = projHeme5, addDOC = FALSE)

如果我們想提取一個基序子集進(jìn)行下游分析該怎么辦?我們可以使用getFeatures()函數(shù)來做到這一點。paste(motifs, collapse="|")下面的語句創(chuàng)建了一個連接or語句,該語句可以選擇所有主題。

motifs <- c("GATA1", "CEBPA", "EBF1", "IRF4", "TBX21", "PAX5")
markerMotifs <- getFeatures(projHeme5, select = paste(motifs, collapse="|"), useMatrix = "MotifMatrix")
markerMotifs

如上所述,MotifMatrix包含seqnamesz得分和偏差,如上用“ z:”和“偏差:”所示。要僅獲取與z得分相對應(yīng)的特征,我們可以使用grep。不幸的是,在上面顯示的示例主題中,您可以看到,除了“ EBF1”之外,我們還選擇了“ SREBF1”,我們不想對其進(jìn)行分析。因此,我們在下面使用%ni%表達(dá)式(它是ArchR輔助函數(shù))將其刪除,該函數(shù)提供與%in%R 的反義詞。

markerMotifs <- grep("z:", markerMotifs, value = TRUE)
markerMotifs <- markerMotifs[markerMotifs %ni% "z:SREBF1_22"]
markerMotifs

現(xiàn)在我們有了我們感興趣的功能的名稱,我們可以繪制每個群集的chromVAR偏差評分的分布。請注意,我們提供了我們在基因評分分析期間先前計算的估算權(quán)重。提醒一下,這些估算權(quán)重使我們能夠使附近單元格上的信號平滑,這對于稀疏的scATAC-seq數(shù)據(jù)很有幫助。

p <- plotGroups(ArchRProj = projHeme5, 
  groupBy = "Clusters2", 
  colorBy = "MotifMatrix", 
  name = markerMotifs,
  imputeWeights = getImputeWeights(projHeme5)
)

我們可以cowplot在一個圖中繪制所有這些圖案的分布。

p2 <- lapply(seq_along(p), function(x){
  if(x != 1){
    p[[x]] + guides(color = FALSE, fill = FALSE) + 
    theme_ArchR(baseSize = 6) +
    theme(plot.margin = unit(c(0.1, 0.1, 0.1, 0.1), "cm")) +
    theme(
        axis.text.y=element_blank(), 
        axis.ticks.y=element_blank(),
        axis.title.y=element_blank()
    ) + ylab("")
  }else{
    p[[x]] + guides(color = FALSE, fill = FALSE) + 
    theme_ArchR(baseSize = 6) +
    theme(plot.margin = unit(c(0.1, 0.1, 0.1, 0.1), "cm")) +
    theme(
        axis.ticks.y=element_blank(),
        axis.title.y=element_blank()
    ) + ylab("")
  }
})
do.call(cowplot::plot_grid, c(list(nrow = 1, rel_widths = c(2, rep(1, length(p2) - 1))),p2))

要保存此圖的可編輯矢量化版本,我們使用plotPDF()函數(shù)。

plotPDF(p, name = "Plot-Groups-Deviations-w-Imputation", width = 5, height = 5, ArchRProj = projHeme5, addDOC = FALSE)

無需查看這些z分?jǐn)?shù)的分布,而是可以像我們之前對基因分?jǐn)?shù)所做的那樣,將z分?jǐn)?shù)覆蓋在我們的UMAP嵌入上。

p <- plotEmbedding(
    ArchRProj = projHeme5, 
    colorBy = "MotifMatrix", 
    name = sort(markerMotifs), 
    embedding = "UMAP",
    imputeWeights = getImputeWeights(projHeme5)
)

我們可以使用繪制所有這些圖案UMAP cowplot。

p2 <- lapply(p, function(x){
    x + guides(color = FALSE, fill = FALSE) + 
    theme_ArchR(baseSize = 6.5) +
    theme(plot.margin = unit(c(0, 0, 0, 0), "cm")) +
    theme(
        axis.text.x=element_blank(), 
        axis.ticks.x=element_blank(), 
        axis.text.y=element_blank(), 
        axis.ticks.y=element_blank()
    )
})
do.call(cowplot::plot_grid, c(list(ncol = 3),p2))

要查看這些TF偏差z分?jǐn)?shù)與通過相應(yīng)TF基因的基因得分推斷的基因表達(dá)相比如何,我們可以在UMAP嵌入中疊加每個TF的基因得分。

markerRNA <- getFeatures(projHeme5, select = paste(motifs, collapse="|"), useMatrix = "GeneScoreMatrix")
markerRNA <- markerRNA[markerRNA %ni% c("SREBF1","CEBPA-DT")]
markerRNA
p <- plotEmbedding(
    ArchRProj = projHeme5, 
    colorBy = "GeneScoreMatrix", 
    name = sort(markerRNA), 
    embedding = "UMAP",
    imputeWeights = getImputeWeights(projHeme5)
)
p2 <- lapply(p, function(x){
    x + guides(color = FALSE, fill = FALSE) + 
    theme_ArchR(baseSize = 6.5) +
    theme(plot.margin = unit(c(0, 0, 0, 0), "cm")) +
    theme(
        axis.text.x=element_blank(), 
        axis.ticks.x=element_blank(), 
        axis.text.y=element_blank(), 
        axis.ticks.y=element_blank()
    )
})
do.call(cowplot::plot_grid, c(list(ncol = 3),p2))

同樣,由于我們之前已將scATAC-seq數(shù)據(jù)與相應(yīng)的scRNA-seq數(shù)據(jù)鏈接在一起,因此我們可以在UMAP嵌入中繪制每個TF的鏈接基因表達(dá)。

markerRNA <- getFeatures(projHeme5, select = paste(motifs, collapse="|"), useMatrix = "GeneIntegrationMatrix")
markerRNA <- markerRNA[markerRNA %ni% c("SREBF1","CEBPA-DT")]
markerRNA
p <- plotEmbedding(
    ArchRProj = projHeme5, 
    colorBy = "GeneIntegrationMatrix", 
    name = sort(markerRNA), 
    embedding = "UMAP",
    continuousSet = "blueYellow",
    imputeWeights = getImputeWeights(projHeme5)
)
p2 <- lapply(p, function(x){
    x + guides(color = FALSE, fill = FALSE) + 
    theme_ArchR(baseSize = 6.5) +
    theme(plot.margin = unit(c(0, 0, 0, 0), "cm")) +
    theme(
        axis.text.x=element_blank(), 
        axis.ticks.x=element_blank(), 
        axis.text.y=element_blank(), 
        axis.ticks.y=element_blank()
    )
})
do.call(cowplot::plot_grid, c(list(ncol = 3),p2))
13.2 ArchR和自定義偏差

在“峰注釋富集”一章中,我們介紹了如何為任何一組基因組區(qū)域創(chuàng)建峰注釋。這包括(i)ArchR支持的區(qū)域集,例如來自ENCODE的精選TF結(jié)合位點和來自批量ATAC-seq的峰集,以及(ii)用戶提供的自定義區(qū)域集。如果您尚未閱讀本節(jié),建議您這樣做以更好地了解峰注釋的工作方式。

這些峰注釋可以與圖案相同的方式用于偏差計算中。在這里,我們提供了有關(guān)如何進(jìn)行這些分析的示例,但請注意,下游分析與上一節(jié)中有關(guān)主題的顯示相同,因此,我們沒有在代碼的每個步驟中提供詳盡的細(xì)節(jié)。在Arrow文件中創(chuàng)建偏差矩陣后,其余部分相同。

13.2.1編碼TFBS

如果您尚未為“ EncodeTFBS”區(qū)域集添加注釋矩陣,請立即執(zhí)行。

if("EncodeTFBS" %ni% names(projHeme5@peakAnnotation)){
    projHeme5 <- addArchRAnnotations(ArchRProj = projHeme5, collection = "EncodeTFBS")
}

然后,我們創(chuàng)建一個偏差矩陣,將此峰注釋提供給peakAnnotation參數(shù)。

projHeme5 <- addDeviationsMatrix(
  ArchRProj = projHeme5, 
  peakAnnotation = "EncodeTFBS",
  force = TRUE
)

我們可以創(chuàng)建排名偏差的點圖。

plotVarDev <- getVarDeviations(projHeme5, plot = TRUE, name = "EncodeTFBSMatrix")
plotVarDev

plotPDF(plotVarDev, name = "Variable-EncodeTFBS-Deviation-Scores", width = 5, height = 5, ArchRProj = projHeme5, addDOC = FALSE)

或者,我們可以將這些TF結(jié)合位點子集化為我們感興趣的特定基序,然后在UMAP嵌入中繪制每個單元的偏差z分?jǐn)?shù)。

tfs <- c("GATA_1", "CEBPB", "EBF1", "IRF4", "TBX21", "PAX5")
getFeatures(projHeme5, select = paste(tfs, collapse="|"), useMatrix = "EncodeTFBSMatrix")
markerTFs <- getFeatures(projHeme5, select = paste(tfs, collapse="|"), useMatrix = "EncodeTFBSMatrix")
markerTFs <- sort(grep("z:", markerTFs, value = TRUE))
TFnames <- stringr::str_split(stringr::str_split(markerTFs, pattern = "\\.", simplify=TRUE)[,2], pattern = "-", simplify = TRUE)[,1]
markerTFs <- markerTFs[!duplicated(TFnames)]
markerTFs
p <- plotEmbedding(
    ArchRProj = projHeme5, 
    colorBy = "EncodeTFBSMatrix", 
    name = markerTFs, 
    embedding = "UMAP",
    imputeWeights = getImputeWeights(projHeme5)
)
p2 <- lapply(p, function(x){
    x + guides(color = FALSE, fill = FALSE) + 
    theme_ArchR(baseSize = 6.5) +
    theme(plot.margin = unit(c(0, 0, 0, 0), "cm")) +
    theme(
        axis.text.x=element_blank(), 
        axis.ticks.x=element_blank(), 
        axis.text.y=element_blank(), 
        axis.ticks.y=element_blank()
    )
})
do.call(cowplot::plot_grid, c(list(ncol = 3),p2))
13.2.2批量ATAC序列

同樣,我們可以使用ArchR固化的批量ATAC-seq峰集進(jìn)行圖案偏差計算。

如果您尚未為“ EncodeTFBS”區(qū)域集添加注釋矩陣,請立即執(zhí)行。

if("ATAC" %ni% names(projHeme5@peakAnnotation)){
    projHeme5 <- addArchRAnnotations(ArchRProj = projHeme5, collection = "ATAC")
}

然后,我們創(chuàng)建一個偏差矩陣,將此峰注釋提供給peakAnnotation參數(shù)。

projHeme5 <- addDeviationsMatrix(
  ArchRProj = projHeme5, 
  peakAnnotation = "ATAC",
  force = TRUE
)

我們可以創(chuàng)建排名偏差的點圖。

plotVarDev <- getVarDeviations(projHeme5, plot = TRUE, name = "ATACMatrix")
plotVarDev
plotPDF(plotVarDev, name = "Variable-ATAC-Deviation-Scores", width = 5, height = 5, ArchRProj = projHeme5, addDOC = FALSE)

或者,我們可以在UMAP嵌入中為每個像元繪制每個單元格的偏差z分?jǐn)?shù)。

ATACPeaks <- c("Heme_HSC", "Heme_LMPP", "Heme_Ery", "Heme_Mono", "Heme_CD4", "Heme_CD8", "Heme_B", "Heme_NK", "IAtlas_DC_Plasmacytoid")
getFeatures(projHeme5, select = paste(ATACPeaks, collapse="|"), useMatrix = "ATACMatrix")
markerATAC <- getFeatures(projHeme5, select = paste(ATACPeaks, collapse="|"), useMatrix = "ATACMatrix")
markerATAC <- sort(grep("z:", markerATAC, value = TRUE))
markerATAC
p <- plotEmbedding(
    ArchRProj = projHeme5, 
    colorBy = "ATACMatrix", 
    name = markerATAC, 
    embedding = "UMAP",
    imputeWeights = getImputeWeights(projHeme5)
)
p2 <- lapply(p, function(x){
    x + guides(color = FALSE, fill = FALSE) + 
    theme_ArchR(baseSize = 6.5) +
    theme(plot.margin = unit(c(0, 0, 0, 0), "cm")) +
    theme(
        axis.text.x=element_blank(), 
        axis.ticks.x=element_blank(), 
        axis.text.y=element_blank(), 
        axis.ticks.y=element_blank()
    )
})
do.call(cow
13.2.3自定義偏差

代替使用上述的ArchR固化區(qū)域集,我們可以提供自己的自定義區(qū)域集作為峰注解。這些自定義注釋的使用方式與ArchR-curated注釋的使用方式完全相同。

首先,如果您尚未在上一章中創(chuàng)建此“ EncodePeaks”注釋,請通過下載一些ENCODE峰集并調(diào)用來創(chuàng)建它addPeakAnnotations()。

EncodePeaks <- c(
  Encode_K562_GATA1 = "https://www.encodeproject.org/files/ENCFF632NQI/@@download/ENCFF632NQI.bed.gz",
  Encode_GM12878_CEBPB = "https://www.encodeproject.org/files/ENCFF761MGJ/@@download/ENCFF761MGJ.bed.gz",
  Encode_K562_Ebf1 = "https://www.encodeproject.org/files/ENCFF868VSY/@@download/ENCFF868VSY.bed.gz",
  Encode_K562_Pax5 = "https://www.encodeproject.org/files/ENCFF339KUO/@@download/ENCFF339KUO.bed.gz"
)
if("ChIP" %ni% names(projHeme5@peakAnnotation)){
    projHeme5 <- addPeakAnnotations(ArchRProj = projHeme5, regions = EncodePeaks, name = "ChIP")
}

然后,我們從該峰注釋中制作一個偏差矩陣。

projHeme5 <- addDeviationsMatrix(
  ArchRProj = projHeme5, 
  peakAnnotation = "ChIP",
  force = TRUE
)

分析工作流程的其余部分與上面多次介紹的內(nèi)容相同。

我們可以繪制排名偏差。

plotVarDev <- getVarDeviations(projHeme5, plot = TRUE, name = "ChIPMatrix")
plotVarDev
plotPDF(plotVarDev, name = "Variable-ChIP-Deviation-Scores", width = 5, height = 5, ArchRProj = projHeme5, addDOC = FALSE)

我們可以繪制覆蓋在我們的UMAP嵌入中的偏差z得分。

markerChIP <- getFeatures(projHeme5, useMatrix = "ChIPMatrix")
markerChIP <- sort(grep("z:", markerChIP, value = TRUE))
markerChIP
p <- plotEmbedding(
    ArchRProj = projHeme5, 
    colorBy = "ChIPMatrix", 
    name = markerChIP, 
    embedding = "UMAP",
    imputeWeights = getImputeWeights(projHeme5)
)
p2 <- lapply(p, function(x){
    x + guides(color = FALSE, fill = FALSE) + 
    theme_ArchR(baseSize = 6.5) +
    theme(plot.margin = unit(c(0, 0, 0, 0), "cm")) +
    theme(
        axis.text.x=element_blank(), 
        axis.ticks.x=element_blank(), 
        axis.text.y=element_blank(), 
        axis.ticks.y=element_blank()
    )
})
do.call(cowplot::plot_grid, c(list(ncol = 2),p2))
參考材料:

https://www.archrproject.com/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容