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計(jì)算基因活性值和標(biāo)記基因(7)
scATAC分析神器ArchR初探-scRNA-seq確定細(xì)胞類型(8)
scATAC分析神器ArchR初探-ArchR中的偽批次重復(fù)處理(9)
scATAC分析神器ArchR初探-使用ArchR-peak-calling(10)
scATAC分析神器ArchR初探-使用ArchR識(shí)別標(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ì)胞類型中最活躍。然而寸痢,這些富集不是基于每個(gè)細(xì)胞計(jì)算的杰妓,并且它們沒有考慮到Tn5轉(zhuǎn)座酶的插入序列偏差侮邀。chromVAR是Greenlead Lab打包的R乔夯,它是為解決這些問題而創(chuàng)建的。chromVAR用于根據(jù)稀疏染色質(zhì)可及性數(shù)據(jù)預(yù)測每個(gè)細(xì)胞的TF活性富集狂鞋。chromVAR的兩個(gè)主要輸出是:
- “偏差”-偏差是對給定特征(即基序)的每個(gè)單元可訪問性與所有單元格或樣本均值的預(yù)期可訪問性相差多少的偏差校正度量著淆。
- “ z分?jǐn)?shù)”-z分?jǐn)?shù)(也稱為“偏差分?jǐn)?shù)”)是所有像元上每個(gè)偏差校正偏差的z分?jǐn)?shù)劫狠。偏差評分的絕對值與每個(gè)單元的讀取深度相關(guān)拴疤。這是因?yàn)椋S著閱讀次數(shù)的增加独泞,給定特征(即基序)在每個(gè)單元可訪問性方面與預(yù)期的差異要比偶然發(fā)生的差異更有把握呐矾。
chromVAR的主要局限性之一是它是在scATAC-seq數(shù)據(jù)生成的早期階段設(shè)計(jì)的,當(dāng)時(shí)實(shí)驗(yàn)由數(shù)百個(gè)細(xì)胞組成懦砂。在這種實(shí)驗(yàn)規(guī)模下蜒犯,chromVAR可以輕松地將整個(gè)逐峰矩陣讀取到內(nèi)存中,以快速計(jì)算TF偏差荞膘。但是罚随,當(dāng)前的實(shí)驗(yàn)方法使用了成千上萬個(gè)單元,生成了逐個(gè)單元的矩陣羽资,這些矩陣很難讀入內(nèi)存毫炉。即使對于大小適中的50,000個(gè)數(shù)據(jù)集,這也會(huì)導(dǎo)致運(yùn)行時(shí)間和內(nèi)存使用量急劇增加削罩。
為了避免這些限制,ArchR通過獨(dú)立分析樣本子矩陣來實(shí)施相同的chromVAR分析工作流程费奸。
首先弥激,ArchR讀取每個(gè)子樣本中所有單元格上每個(gè)峰的全局可訪問性。其次愿阐,對于每個(gè)峰微服,ArchR都會(huì)識(shí)別一組與GC含量和可及性相匹配的背景峰。第三缨历,ArchR使用峰的背景設(shè)置和全局可訪問性來獨(dú)立計(jì)算每個(gè)樣本的帶有chromVAR的偏差校正偏差以蕴。此實(shí)現(xiàn)要求在任何給定時(shí)間僅將5,000-10,000個(gè)單元中的數(shù)據(jù)加載到內(nèi)存中,從而最大程度地減少內(nèi)存需求辛孵,使用chromVAR進(jìn)行可擴(kuò)展的分析并提高運(yùn)行時(shí)性能丛肮。
13.1主題偏差
首先,請確保已在中添加了主題注釋ArchRProject
魄缚。
if("Motif" %ni% names(projHeme5@peakAnnotation)){
projHeme5 <- addMotifAnnotations(ArchRProj = projHeme5, motifSet = "cisbp", name = "Motif")
}
我們還需要添加一組背景峰宝与,用于計(jì)算偏差。使用該chromVAR::getBackgroundPeaks()
函數(shù)選擇背景峰冶匹,該函數(shù)根據(jù)GC含量的相似性和所有樣品之間的碎片數(shù)(使用馬氏距離)對峰進(jìn)行采樣习劫。
projHeme5 <- addBgdPeaks(projHeme5)
現(xiàn)在,我們準(zhǔn)備使用該addDeviationsMatrix()
函數(shù)計(jì)算所有圖案注釋中每個(gè)單元的偏差嚼隘。該函數(shù)有一個(gè)可選參數(shù)诽里,名為matrixName
,它使我們能夠定義將存儲(chǔ)在Arrow文件中的偏差矩陣的名稱飞蛹。如果我們沒有為該參數(shù)提供值谤狡,如下面的示例所示灸眼,此函數(shù)通過在的名稱上添加單詞“ Matrix”來創(chuàng)建矩陣名稱peakAnnotation
。下面的示例在我們每個(gè)名為“ MotifMatrix”的Arrow文件中創(chuàng)建一個(gè)偏差矩陣豌汇。
projHeme5 <- addDeviationsMatrix(
ArchRProj = projHeme5,
peakAnnotation = "Motif",
force = TRUE
)
要訪問這些偏差幢炸,我們使用getVarDeviations()
函數(shù)。如果我們希望該函數(shù)返回一個(gè)ggplot
對象拒贱,則進(jìn)行設(shè)置宛徊,plot = TRUE
否則,該函數(shù)將返回該DataFrame
對象逻澳。該head
說的DataFrame
對象是默認(rèn)運(yùn)行該功能時(shí)顯示闸天。
plotVarDev <- getVarDeviations(projHeme5, name = "MotifMatrix", plot = TRUE)
從的上述快照中DataFrame
,您可以看到seqnames
的MotifMatrix
不是染色體斜做。通常情況下苞氮,像矩陣TileMatrix
,PeakMatrix
和GeneScoreMatrix
我們保存在染色體上的信息seqnames
瓤逼。在MotifMatrix
不具有任何相應(yīng)的位置上的信息笼吟,但,相反霸旗,同時(shí)存儲(chǔ)從chromVAR了“devations”和“z分?jǐn)?shù)”到使用兩個(gè)不同seqnames相同的基質(zhì)- deviations
和z
贷帮。稍后,如果您嘗試在這類函數(shù)中使用MotifMatrix
(屬于類Sparse.Assays.Matrix
)诱告,這一點(diǎn)就變得很重要getMarkerFeatures()
撵枢。在這些類型的操作中,ArchR會(huì)希望您將其子集化為MotifMatrix
兩者之一seqnames
(即精居,選擇z得分或偏差以執(zhí)行計(jì)算)锄禽。
然后,我們可以繪制這些變量偏差靴姿。
plotVarDev
要保存此圖的可編輯矢量化版本沃但,我們使用plotPDF()
函數(shù)。
plotPDF(plotVarDev, name = "Variable-Motif-Deviation-Scores", width = 5, height = 5, ArchRProj = projHeme5, addDOC = FALSE)
如果我們想提取一個(gè)基序子集進(jìn)行下游分析該怎么辦佛吓?我們可以使用getFeatures()
函數(shù)來做到這一點(diǎn)绽慈。paste(motifs, collapse="|")
下面的語句創(chuàng)建了一個(gè)連接or
語句,該語句可以選擇所有主題辈毯。
motifs <- c("GATA1", "CEBPA", "EBF1", "IRF4", "TBX21", "PAX5")
markerMotifs <- getFeatures(projHeme5, select = paste(motifs, collapse="|"), useMatrix = "MotifMatrix")
markerMotifs
如上所述坝疼,MotifMatrix
包含seqnames
z得分和偏差,如上用“ 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)在我們有了我們感興趣的功能的名稱,我們可以繪制每個(gè)群集的chromVAR偏差評分的分布隆敢。請注意发皿,我們提供了我們在基因評分分析期間先前計(jì)算的估算權(quán)重。提醒一下拂蝎,這些估算權(quán)重使我們能夠使附近單元格上的信號(hào)平滑穴墅,這對于稀疏的scATAC-seq數(shù)據(jù)很有幫助。
p <- plotGroups(ArchRProj = projHeme5,
groupBy = "Clusters2",
colorBy = "MotifMatrix",
name = markerMotifs,
imputeWeights = getImputeWeights(projHeme5)
)
我們可以cowplot
在一個(gè)圖中繪制所有這些圖案的分布温自。
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嵌入中疊加每個(gè)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嵌入中繪制每個(gè)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é)合位點(diǎn)和來自批量ATAC-seq的峰集卵贱,以及(ii)用戶提供的自定義區(qū)域集。如果您尚未閱讀本節(jié)侣集,建議您這樣做以更好地了解峰注釋的工作方式键俱。
這些峰注釋可以與圖案相同的方式用于偏差計(jì)算中。在這里世分,我們提供了有關(guān)如何進(jìn)行這些分析的示例编振,但請注意,下游分析與上一節(jié)中有關(guān)主題的顯示相同臭埋,因此踪央,我們沒有在代碼的每個(gè)步驟中提供詳盡的細(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)建一個(gè)偏差矩陣累贤,將此峰注釋提供給peakAnnotation
參數(shù)。
projHeme5 <- addDeviationsMatrix(
ArchRProj = projHeme5,
peakAnnotation = "EncodeTFBS",
force = TRUE
)
我們可以創(chuàng)建排名偏差的點(diǎn)圖旗唁。
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é)合位點(diǎn)子集化為我們感興趣的特定基序,然后在UMAP嵌入中繪制每個(gè)單元的偏差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)行圖案偏差計(jì)算。
如果您尚未為“ EncodeTFBS”區(qū)域集添加注釋矩陣屎媳,請立即執(zhí)行夺溢。
if("ATAC" %ni% names(projHeme5@peakAnnotation)){
projHeme5 <- addArchRAnnotations(ArchRProj = projHeme5, collection = "ATAC")
}
然后,我們創(chuàng)建一個(gè)偏差矩陣烛谊,將此峰注釋提供給peakAnnotation
參數(shù)风响。
projHeme5 <- addDeviationsMatrix(
ArchRProj = projHeme5,
peakAnnotation = "ATAC",
force = TRUE
)
我們可以創(chuàng)建排名偏差的點(diǎn)圖。
plotVarDev <- getVarDeviations(projHeme5, plot = TRUE, name = "ATACMatrix")
plotVarDev
plotPDF(plotVarDev, name = "Variable-ATAC-Deviation-Scores", width = 5, height = 5, ArchRProj = projHeme5, addDOC = FALSE)
或者丹禀,我們可以在UMAP嵌入中為每個(gè)像元繪制每個(gè)單元格的偏差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")
}
然后,我們從該峰注釋中制作一個(gè)偏差矩陣村斟。
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))