scATAC分析神器ArchR初探-使用ArchR进行整合分析(15)

scATAC分析神器ArchR初探-简介(1)
scATAC分析神器ArchR初探-ArchR进行doublet处理(2)
scATAC分析神器ArchR初探-创建ArchRProject(3)
scATAC分析神器ArchR初探-使用ArchR降维(4)
scATAC分析神器ArchR初探--使用ArchR进行聚类(5)
scATAC分析神器ArchR初探-单细胞嵌入(6)
scATAC分析神器ArchR初探-使用ArchR计算基因活性值和标记基因(7)
scATAC分析神器ArchR初探-scRNA-seq确定细胞类型(8)
scATAC分析神器ArchR初探-ArchR中的伪批次重复处理(9)
scATAC分析神器ArchR初探-使用ArchR-peak-calling(10)
scATAC分析神器ArchR初探-使用ArchR识别标记峰(11)
scATAC分析神器ArchR初探-使用ArchR进行主题和功能丰富(12)
scATAC分析神器ArchR初探-利用ArchR丰富ChromVAR偏差(13)
scATAC分析神器ArchR初探-使用ArchR进行足迹(14)
scATAC分析神器ArchR初探-使用ArchR进行整合分析(15)
scATAC分析神器ArchR初探-使用ArchR进行轨迹分析(16)

15-使用ArchR进行整合分析

ArchR的主要优势之一是它能够集成多个级别的信息以提供新颖的见解。这可以采取仅ATAC-seq的分析形式,例如识别峰的可共同接近性以预测调节相互作用,或采用整合scRNA-seq数据的分析,例如通过峰-基因连锁分析预测增强子活性。无论哪种情况,ArchR都可以轻松地从scATAC-seq数据中获得更深刻的见解。

15.1创建单元格的低重叠聚合

ArchR促进了许多涉及特征相关性的综合分析。在稀疏的单细胞数据中执行这些计算会导致这些相关分析中的大量噪声。为了克服这一挑战,我们采用了Cicero引入的方法在这些分析之前创建单个细胞的低重叠聚集体。为了减少偏差,我们会过滤与其他任何聚合具有大于80%重叠的聚合。为了提高这种方法的速度,我们使用“ Rcpp”包开发了一种优化的迭代重叠检查例程的实现,以及C ++中快速特征关联的实现。这些优化的方法用于ArchR中,用于计算峰的可及性,峰与基因的链接以及其他链接分析。这些低重叠的聚合的使用是在引擎盖下进行的,但是为了清楚起见,我们在此提及。

15.2与ArchR的可共访问性
共可及性是许多单个细胞中两个峰之间可及性的关联。换句话说,当在单个单元中可以访问峰A时,通常也可以访问峰B。我们在下面以视觉方式说明了这一概念,表明Enhancer E3通常与Promoter P可以同时访问。


关于协同访问分析,要注意的一件事是,它经常将特定于细胞类型的峰鉴定为协同访问。这是因为这些峰通常在单个单元格类型中都可以一起访问,而在所有其他单元格类型中通常都不能访问。这会产生很强的相关性,但不一定意味着这些峰之间存在调节关系。

要计算ArchR中的可访问性,我们使用addCoAccessibility()将峰值可访问性信息存储在中的功能ArchRProject

projHeme5 <- addCoAccessibility(
    ArchRProj = projHeme5,
    reducedDims = "IterativeLSI"
)

我们可以ArchRProject通过getCoAccessibility()函数从中检索此可访问性信息,该函数返回DataFrame对象if returnLoops = FALSE

cA <- getCoAccessibility(
    ArchRProj = projHeme5,
    corCutOff = 0.5,
    resolution = 1,
    returnLoops = FALSE
)

其中DataFrame包含一些重要的信息。的queryHitssubjectHits列表示被发现相关联,这两个峰的索引。该correlation列给出了这两个峰之间可及性的数字相关性。

cA

这种可共访问性DataFrame还具有包含GRanges相关峰对象的元数据组件。上面提到的queryHits和的索引subjectHits适用于此GRanges对象。

metadata(cA)[[1]]

如果我们设置returnLoops = TRUE,则将getCoAccessibility()以循环跟踪的形式返回可访问性信息。在此GRanges对象中,IRanges每次互动的图谱的起点和终点分别指向两个不同的可同时访问的峰。该resolution参数设置这些循环的碱基对分辨率。当为时resolution = 1,这将创建连接每个峰中心的循环。

cA <- getCoAccessibility(
    ArchRProj = projHeme5,
    corCutOff = 0.5,
    resolution = 1,
    returnLoops = TRUE
)

我们可以将此GRanges对象与DataFrame上面生成的对象进行比较。

cA[[1]]

相反,如果我们降低到的循环的分辨率resolution = 1000,则可能有助于过度绘制协同访问交互。在下面,我们看到GRanges对象中的总条目比上面的少。

cA <- getCoAccessibility(
    ArchRProj = projHeme5,
    corCutOff = 0.5,
    resolution = 1000,
    returnLoops = TRUE
)

cA[[1]]

同样,如果我们进一步降低分辨率resolution = 10000,我们将确定更少的协同访问交互。

cA <- getCoAccessibility(
    ArchRProj = projHeme5,
    corCutOff = 0.5,
    resolution = 10000,
    returnLoops = TRUE
)

cA[[1]]

15.2.1绘制浏览器的可共通性轨迹

在向我们添加了可访问性信息后,我们ArchRProject就可以在绘制浏览器轨迹时将其用作循环轨迹。我们通过函数的loops参数来实现plotBrowserTrack()。在这里,我们使用的是默认参数getCoAccessibility(),其中包括corCutOff = 0.5resolution = 1000,和returnLoops = TRUE

markerGenes  <- c(
    "CD34", #Early Progenitor
    "GATA1", #Erythroid
    "PAX5", "MS4A1", #B-Cell Trajectory
    "CD14", #Monocytes
    "CD3D", "CD8A", "TBX21", "IL7R" #TCells
  )

p <- plotBrowserTrack(
    ArchRProj = projHeme5, 
    groupBy = "Clusters2", 
    geneSymbol = markerGenes, 
    upstream = 50000,
    downstream = 50000,
    loops = getCoAccessibility(projHeme5)
)

为了绘制浏览器轨迹,我们使用该grid.draw函数,并使用$访问器按名称选择特定的标记基因。

grid::grid.newpage()
grid::grid.draw(p$CD14)

要保存此图的可编辑矢量化版本,请使用plotPDF()

plotPDF(plotList = p, 
    name = "Plot-Tracks-Marker-Genes-with-CoAccessibility.pdf", 
    ArchRProj = projHeme5, 
    addDOC = FALSE, width = 5, height = 5)

15.3 Peak2Gene与ArchR的链接

与协同访问相似,ArchR也可以识别所谓的“峰到基因链接”。峰与基因之间的链接与共同访问之间的主要区别在于,共同访问是仅ATAC-seq的分析,用于寻找两个峰之间的可访问性的相关性,而峰到基因的链接则利用整合的scRNA-seq数据寻找峰可及性与基因表达之间的相关性。这些代表解决类似问题的正交方法。但是,由于峰与基因之间的联系将scATAC-seq和scRNA-seq数据相关联,因此我们经常认为这些联系与基因调控相互作用更为相关。

为了识别ArchR中的峰到基因链接,我们使用该addPeak2GeneLinks()函数。

projHeme5 <- addPeak2GeneLinks(
    ArchRProj = projHeme5,
    reducedDims = "IterativeLSI"
)

然后,我们可以使用类似于使用getPeak2GeneLinks()函数检索共通性交互的方式来检索这些峰-基因链接。如我们先前所见,此功能允许用户指定链接的关联和分辨率的截止值。

p2g <- getPeak2GeneLinks(
    ArchRProj = projHeme5,
    corCutOff = 0.45,
    resolution = 1,
    returnLoops = FALSE
)

returnLoops设置为false时,此函数将返回与所返回的DataFrame对象类似的DataFrame对象getCoAccessibility()。主要区别在于,scATAC-seq峰idxATAC的索引存储在列中,而scRNA-seq基因的索引存储在idxRNA列中。

p2g

这种峰到基因的链接DataFrame还具有包含GRanges相关峰对象的元数据组件。idxATAC上面提到的索引适用于此GRanges对象。

metadata(p2g)[[1]]

如果设置returnLoops = TRUEgetPeak2GeneLinks()则将返回GRanges连接峰和基因的循环跟踪对象。至于共通性,IRanges对象的开始和结束代表峰的位置和被链接的基因。当为时resolution = 1,这会将峰的中心链接到基因的单碱基TSS。

p2g <- getPeak2GeneLinks(
    ArchRProj = projHeme5,
    corCutOff = 0.45,
    resolution = 1,
    returnLoops = TRUE
)

p2g[[1]]

我们可以通过设置来降低这些链接的分辨率resolution = 1000。这在将链接绘制为浏览器轨迹时非常有用,因为在某些情况下,许多附近的峰都链接到同一基因,这可能很难可视化。

p2g <- getPeak2GeneLinks(
    ArchRProj = projHeme5,
    corCutOff = 0.45,
    resolution = 1000,
    returnLoops = TRUE
)

p2g[[1]]

降低分辨率甚至会进一步减少所识别的峰到基因链接的总数。

p2g <- getPeak2GeneLinks(
    ArchRProj = projHeme5,
    corCutOff = 0.45,
    resolution = 10000,
    returnLoops = TRUE
)

p2g[[1]]

15.3.1使用峰到基因链接绘制浏览器轨迹

要将这些峰到基因链接绘制为浏览器轨迹,我们使用上一部分中所示的可共访问性相同的工作流程。在这里我们使用plotBrowserTrack()功能

markerGenes  <- c(
    "CD34", #Early Progenitor
    "GATA1", #Erythroid
    "PAX5", "MS4A1", #B-Cell Trajectory
    "CD14", #Monocytes
    "CD3D", "CD8A", "TBX21", "IL7R" #TCells
  )

p <- plotBrowserTrack(
    ArchRProj = projHeme5, 
    groupBy = "Clusters2", 
    geneSymbol = markerGenes, 
    upstream = 50000,
    downstream = 50000,
    loops = getPeak2GeneLinks(projHeme5)
)

为了绘制浏览器轨迹,我们使用该grid.draw函数,并使用$访问器按名称选择特定的标记基因。

grid::grid.newpage()
grid::grid.draw(p$CD14)

To save an editable vectorized version of this plot, we use plotPDF().

plotPDF(plotList = p, 
    name = "Plot-Tracks-Marker-Genes-with-Peak2GeneLinks.pdf", 
    ArchRProj = projHeme5, 
    addDOC = FALSE, width = 5, height = 5)

15.3.2 Plotting a heatmap of peak-to-gene links

To visualize the correspondence of all of our peak-to-gene links, we can plot a peak-to-gene heatmap which contains two side-by-side heatmaps, one for our scATAC-seq data and one for our scRNA-seq data. To do this, we use the plotPeak2GeneHeatmap()

p <- plotPeak2GeneHeatmap(ArchRProj = projHeme5, groupBy = "Clusters2")

The heatmap rows are clustered using k-means clustering based on the value passed to the parameter k, which defaults to 25 as shown below.

p
15.4确定正TF调节器

ATAC-seq可以无偏鉴定TF,这些TF在包含其DNA结合基序的位点上,染色质可及性表现出很大的变化。但是,当通过位置权重矩阵(PWM)进行汇总时,TF家族(例如GATA因子)在其绑定图案中具有相似的功能。

这种基序相似性使其难以鉴定可能导致观察到的染色质可及性在其预测的结合位点发生变化的特定TF。为了规避这一挑战,我们先前使用了ATAC-seq和RNA-seq来鉴定其基因表达与其相应基序可及性变化呈正相关的TF。我们将这些TF称为“积极监管者”。但是,该分析依赖于并非在所有实验中都容易获得的匹配基因表达数据。为了克服这种依赖性,ArchR可以识别其推断的基因得分与其chromVAR TF偏差z得分相关的TF。为此,ArchR将TF基序的chromVAR偏差z分数与来自低重叠细胞聚集体的TF基因的基因活性得分相关联。将scRNA-seq与ArchR结合使用时,

15.4.1第1步。确定偏差TF图案

鉴定阳性TF调节剂的第一部分是鉴定异常TF基序。我们在上一章中进行了此分析,MotifMatrix为所有图案创建了一个chromVAR偏差和z分数偏差。我们可以使用getGroupSE()返回a 的函数来获得按聚类平均的数据SummarizedExperiment

seGroupMotif <- getGroupSE(ArchRProj = projHeme5, useMatrix = "MotifMatrix", groupBy = "Clusters2")

由于此SummarizedExperiment对象来自,因此MotifMatrix具有两个序列名称-“偏差”和“ z”-对应于chromVAR的原始偏差和z分数偏差。

seGroupMotif

我们可以将其子集化为SummarizedExperiment偏差z得分。

seZ <- seGroupMotif[rowData(seGroupMotif)$seqnames=="z",]

然后,我们可以确定所有群集之间z得分的最大增量。这将有助于根据跨群集观察到的变化程度对主题进行分层。

rowData(seZ)$maxDelta <- lapply(seq_len(ncol(seZ)), function(x){
  rowMaxs(assay(seZ) - assay(seZ)[,x])
}) %>% Reduce("cbind", .) %>% rowMaxs

15.4.2步骤2.识别相关的TF基序和TF基因得分/表达

为了鉴定其基序可及性与其自身基因活性相关的TF(通过基因评分或基因表达),我们使用该correlateMatrices()功能并提供我们感兴趣的两个矩阵,在这种情况下为GeneScoreMatrixMotifMatrix。如前所述,这些相关性是在reducedDims参数中指定的较低维空间中确定的许多低重叠单元聚合中确定的。

corGSM_MM <- correlateMatrices(
    ArchRProj = projHeme5,
    useMatrix1 = "GeneScoreMatrix",
    useMatrix2 = "MotifMatrix",
    reducedDims = "IterativeLSI"
)

此函数返回一个DataFrame对象,其中包含来自每个矩阵的元素以及低重叠单元格聚合之间的相关性。

corGSM_MM

我们可以使用GeneIntegrationMatrix代替进行相同的分析GeneScoreMatrix

corGIM_MM <- correlateMatrices(
    ArchRProj = projHeme5,
    useMatrix1 = "GeneIntegrationMatrix",
    useMatrix2 = "MotifMatrix",
    reducedDims = "IterativeLSI"
)
corGIM_MM

步骤3.将最大Delta偏差添加到相关数据帧

对于这些相关分析中的每一个,我们都可以使用在步骤1中计算出的聚类之间观察到的最大增量来注释每个基序。

corGSM_MM$maxDelta <- rowData(seZ)[match(corGSM_MM$MotifMatrix_name, rowData(seZ)$name), "maxDelta"]
corGIM_MM$maxDelta <- rowData(seZ)[match(corGIM_MM$MotifMatrix_name, rowData(seZ)$name), "maxDelta"]

步骤4.确定正TF调节器

我们可以使用所有这些信息来确定正TF调节器。在以下示例中,我们将正调节剂视为其基序与基因得分(或基因表达)之间的相关性大于0.5,且调整后的p值小于0.01,且z值偏差的最大簇间差异为正的那些TF在前四分之一。

我们应用这些选择标准,并进行一些文字处理以隔离TF名称。

corGSM_MM <- corGSM_MM[order(abs(corGSM_MM$cor), decreasing = TRUE), ]
corGSM_MM <- corGSM_MM[which(!duplicated(gsub("\\-.*","",corGSM_MM[,"MotifMatrix_name"]))), ]
corGSM_MM$TFRegulator <- "NO"
corGSM_MM$TFRegulator[which(corGSM_MM$cor > 0.5 & corGSM_MM$padj < 0.01 & corGSM_MM$maxDelta > quantile(corGSM_MM$maxDelta, 0.75))] <- "YES"
sort(corGSM_MM[corGSM_MM$TFRegulator=="YES",1])

从基因得分和基序偏差z分数中识别出这些阳性TF调节剂后,我们可以在点图中突出显示它们。

p <- ggplot(data.frame(corGSM_MM), aes(cor, maxDelta, color = TFRegulator)) +
  geom_point() + 
  theme_ArchR() +
  geom_vline(xintercept = 0, lty = "dashed") + 
  scale_color_manual(values = c("NO"="darkgrey", "YES"="firebrick3")) +
  xlab("Correlation To Gene Score") +
  ylab("Max TF Motif Delta") +
  scale_y_continuous(
    expand = c(0,0), 
    limits = c(0, max(corGSM_MM$maxDelta)*1.05)
  )

p

我们可以对从得出的相关性执行相同的分析GeneIntegrationMatrix

corGIM_MM <- corGIM_MM[order(abs(corGIM_MM$cor), decreasing = TRUE), ]
corGIM_MM <- corGIM_MM[which(!duplicated(gsub("\\-.*","",corGIM_MM[,"MotifMatrix_name"]))), ]
corGIM_MM$TFRegulator <- "NO"
corGIM_MM$TFRegulator[which(corGIM_MM$cor > 0.5 & corGIM_MM$padj < 0.01 & corGIM_MM$maxDelta > quantile(corGIM_MM$maxDelta, 0.75))] <- "YES"
sort(corGIM_MM[corGIM_MM$TFRegulator=="YES",1])
p <- ggplot(data.frame(corGIM_MM), aes(cor, maxDelta, color = TFRegulator)) +
  geom_point() + 
  theme_ArchR() +
  geom_vline(xintercept = 0, lty = "dashed") + 
  scale_color_manual(values = c("NO"="darkgrey", "YES"="firebrick3")) +
  xlab("Correlation To Gene Expression") +
  ylab("Max TF Motif Delta") +
  scale_y_continuous(
    expand = c(0,0), 
    limits = c(0, max(corGIM_MM$maxDelta)*1.05)
  )

p
参考材料:

https://www.archrproject.com/

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,445评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,889评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,047评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,760评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,745评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,638评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,011评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,669评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,923评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,655评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,740评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,406评论 4 320
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,995评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,961评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,023评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,483评论 2 342