ArchR官网教程学习笔记12:Motif和Feature富集

系列回顾:
ArchR官网教程学习笔记1:Getting Started with ArchR
ArchR官网教程学习笔记2:基于ArchR推测Doublet
ArchR官网教程学习笔记3:创建ArchRProject
ArchR官网教程学习笔记4:ArchR的降维
ArchR官网教程学习笔记5:ArchR的聚类
ArchR官网教程学习笔记6:单细胞嵌入(Single-cell Embeddings)
ArchR官网教程学习笔记7:ArchR的基因评分和Marker基因
ArchR官网教程学习笔记8:定义与scRNA-seq一致的聚类
ArchR官网教程学习笔记9:ArchR的伪批量重复
ArchR官网教程学习笔记10:ArchR的call peak
ArchR官网教程学习笔记11:鉴定Marker峰

在确定了一个峰集之后,我们通常想要预测哪些转录因子可能会介导产生这些可接近的染色质位点的结合事件。这有助于评估marker峰或差异峰,以了解这些峰是否富集于特定转录因子的结合位点。例如,我们经常发现,在细胞类型特异的可接近染色质区域中,定义关键谱系的TFs得到了富集。以类似的方式,我们希望测试不同的峰组,以富集其他已知特征。例如,我们想知道A细胞的细胞类型特异的ATAC-seq峰是否富集于另一组基因组区域,如ChIP-seq峰。本章详细说明了如何在ArchR中执行这些富集。

(一)差异峰的motif富集

继续我们对前一章的差异峰的分析,我们可以在各种细胞类型中寻找在上调的峰上或下调的峰富集的motif。要做到这一点,我们必须首先将这些motif注解添加到我们的ArchRProject中。创建一个二进制矩阵,其中存在于在每个峰的motif是用数字表示的。我们使用addMotifAnnotations()函数来实现这一点,该函数决定了motif是否在ArchRProject中存储的峰集中存在。

> devtools::install_github("GreenleafLab/chromVARmotifs")
> projHeme5 <- addMotifAnnotations(ArchRProj = projHeme5, motifSet = "cisbp", name = "Motif")

然后,我们可以使用在前一章中生成的SummarizedExperiment对象markerTest的差异测试来定义我们感兴趣的显著差异峰的集合测试motif富集。在本例中,我们寻找FDR <= 0.1和Log2FC >= 0.5的峰。在markerTest的差异比较中,这些峰在“Erythroid”细胞中比在“Progenitor”中更容易接近。我们可以使用peakAnnoEnrichment()函数来测试这些不同的可接近的峰,以富集各种motif。这个函数可以用于许多不同的富集测试,我们将在本章中演示。

> motifsUp <- peakAnnoEnrichment(
  seMarker = markerTest,
  ArchRProj = projHeme5,
  peakAnnotation = "Motif",
  cutOff = "FDR <= 0.1 & Log2FC >= 0.5"
)

peakAnnoEnrichment()这个函数的输出是一个SummarizedExperiment对象,包含了多个assays,储存了超几何检验富集测试的结果:

> motifsUp
class: SummarizedExperiment 
dim: 870 1 
metadata(0):
assays(10): mlog10Padj mlog10p ... CompareFrequency
  feature
rownames(870): TFAP2B_1 TFAP2D_2 ... TBX18_869
  TBX22_870
rowData names(0):
colnames(1): Erythroid
colData names(0):

为了准备使用ggplot绘制这个数据,我们可以创建一个简化的data.frame对象,其中包含motif名称、校正后的p值和显著性排名。

> df <- data.frame(TF = rownames(motifsUp), mlog10Padj = assay(motifsUp)[,1])
> df <- df[order(df$mlog10Padj, decreasing = TRUE),]
> df$rank <- seq_len(nrow(df))

正如预期的那样,在“Erythroid”细胞中更容易接近的峰中最丰富的motif对应于GATA转录因子,这与已被充分研究的GATA1在erythroid分化中的作用一致:

> head(df)
           TF mlog10Padj rank
383 GATA1_383   593.4009    1
388 GATA2_388   575.7300    2
385 GATA5_385   451.0765    3
384 GATA3_384   449.8240    4
386 GATA4_386   341.9064    5
387 GATA6_387   232.8139    6

使用ggplot,我们可以绘制排序的TF motifs,并根据它们的富集的显著性为它们着色。这里我们使用ggrepel来标记每个TF motif:

> ggUp <- ggplot(df, aes(rank, mlog10Padj, color = mlog10Padj)) + 
  geom_point(size = 1.5) +
  ggrepel::geom_label_repel(
    data = df[rev(seq_len(30)), ], aes(x = rank, y = mlog10Padj, label = TF), 
    size = 2.5,
    nudge_x = 2,
    color = "black"
  ) + theme_ArchR() + 
  ylab("-log10(P-adj) Motif Enrichment") + 
  xlab("Rank Sorted TFs Enriched") +
  scale_color_gradientn(colors = paletteContinuous(set = "comet"))

> ggUp

我们还可以画出Progenitor细胞中更易接近的峰的motif(Log2FC <= -0.5):

> motifsDo <- peakAnnoEnrichment(
  seMarker = markerTest,
  ArchRProj = projHeme5,
  peakAnnotation = "Motif",
  cutOff = "FDR <= 0.1 & Log2FC <= -0.5"
)

> motifsDo
class: SummarizedExperiment 
dim: 870 1 
metadata(0):
assays(10): mlog10Padj mlog10p ... CompareFrequency feature
rownames(870): TFAP2B_1 TFAP2D_2 ... TBX18_869 TBX22_870
rowData names(0):
colnames(1): Erythroid
colData names(0):

> df <- data.frame(TF = rownames(motifsDo), mlog10Padj = assay(motifsDo)[,1])
> df <- df[order(df$mlog10Padj, decreasing = TRUE),]
> df$rank <- seq_len(nrow(df))

> head(df)
           TF mlog10Padj rank
326  ELF2_326   88.94726    1
56   TCF12_56   83.25016    2
733 RUNX1_733   70.43406    3
843 ASCL1_843   61.00876    4
801  CBFB_801   59.59376    5
336  SPIB_336   54.85216    6

在这个例子里,在Progenitor细胞中更易接近的峰富集的motif有RUNX, ELF,和CBFB。

> plotPDF(ggUp, ggDo, name = "Erythroid-vs-Progenitor-Markers-Motifs-Enriched", width = 5, height = 5, ArchRProj = projHeme5, addDOC = FALSE)

(二)Marker峰的motif富集

与上一节中对差异峰进行的motif富集分析类似,我们也可以对marker峰使用getMarkerFeatures()进行motif富集。

为此,我们将marker peak SummarizedExperiment (markersPeaks)传递给peakAnnotationEnrichment()函数。

> enrichMotifs <- peakAnnoEnrichment(
  seMarker = markersPeaks,
  ArchRProj = projHeme5,
  peakAnnotation = "Motif",
  cutOff = "FDR <= 0.1 & Log2FC >= 0.5"
)

peakAnnoEnrichment()的输出是SummarizedExperiment对象,包含了多个assays,储存了超几何检验的富集测试结果。

> enrichMotifs
class: SummarizedExperiment 
dim: 870 11 
metadata(0):
assays(10): mlog10Padj mlog10p ... CompareFrequency feature
rownames(870): TFAP2B_1 TFAP2D_2 ... TBX18_869 TBX22_870
rowData names(0):
colnames(11): B CD4.M ... PreB Progenitor
colData names(0):

我们可以使用plotEnrichHeatmap()函数直接绘制所有细胞群的motif富集。在这个函数中,我们使用参数n限制每个细胞群显示的motif的总数:

> heatmapEM <- plotEnrichHeatmap(enrichMotifs, n = 7, transpose = TRUE)
> ComplexHeatmap::draw(heatmapEM, heatmap_legend_side = "bot", annotation_legend_side = "bot")
> plotPDF(heatmapEM, name = "Motifs-Enriched-Marker-Heatmap", width = 8, height = 6, ArchRProj = projHeme5, addDOC = FALSE)

(三)ArchR的富集

除了测试峰的motif富集,ArchR还可以定制更个性化的富集。为了促进这一层次的数据探索,我们已经挑选了几个不同的特征集,可以很容易地测试你感兴趣峰区域的富集。我们将在下面描述每一个经过挑选的特性集。

(1)Encode TF Binding Sites

ENCODE已经比对许多细胞类型和因子的TF结合位点。我们可以使用这些TFBS collections来更好的理解我们的clusters。例如,在一个完全不知道的细胞类型里,这些富集可以帮助我们鉴定细胞类型。为了能够用这些ENCODE TFBS分析特征集,我们使用addArchRAnnotations()函数,并使用collection = "EncodeTFBS"。在使用addPeakAnnotations()时,它会创建以二进制代表所有marker peaks和所有ENCODE TFBS的overlap。

> projHeme5 <- addArchRAnnotations(ArchRProj = projHeme5, collection = "EncodeTFBS")

我们可以用我们的峰集来测试ENCODE TFBSs的富集,使用peakAnnoEnrichment()函数:

> enrichEncode <- peakAnnoEnrichment(
    seMarker = markersPeaks,
    ArchRProj = projHeme5,
    peakAnnotation = "EncodeTFBS",
    cutOff = "FDR <= 0.1 & Log2FC >= 0.5"
  )

> enrichEncode
class: SummarizedExperiment 
dim: 689 11 
metadata(0):
assays(10): mlog10Padj mlog10p ... CompareFrequency feature
rownames(689): 1.CTCF-Dnd41... 2.EZH2_39-Dnd41... ...
  688.CTCF-WERI_Rb_1... 689.CTCF-WI_38...
rowData names(0):
colnames(11): B CD4.M ... PreB Progenitor
colData names(0):

画热图:

> heatmapEncode <- plotEnrichHeatmap(enrichEncode, n = 7, transpose = TRUE)
> ComplexHeatmap::draw(heatmapEncode, heatmap_legend_side = "bot", annotation_legend_side = "bot")
#保存
> plotPDF(heatmapEncode, name = "EncodeTFBS-Enriched-Marker-Heatmap", width = 8, height = 6, ArchRProj = projHeme5, addDOC = FALSE)
(2)Bulk ATAC-seq

与ENCODE TF结合位点类似,我们也挑选了可用于重叠富集测试的bulk ATAC-seq实验的peak calls。我们通过设置collection = "ATAC"来访问这些 bulk ATAC-seq峰集。

> projHeme5 <- addArchRAnnotations(ArchRProj = projHeme5, collection = "ATAC")

> enrichATAC <- peakAnnoEnrichment(
    seMarker = markersPeaks,
    ArchRProj = projHeme5,
    peakAnnotation = "ATAC",
    cutOff = "FDR <= 0.1 & Log2FC >= 0.5"
  )
> enrichATAC
class: SummarizedExperiment 
dim: 96 11 
metadata(0):
assays(10): mlog10Padj mlog10p ... CompareFrequency
  feature
rownames(96): Brain_Astrocytes Brain_Excitatory_neurons
  ... Heme_MPP Heme_NK
rowData names(0):
colnames(11): B CD4.M ... PreB Progenitor
colData names(0):

画热图:

> heatmapATAC <- plotEnrichHeatmap(enrichATAC, n = 7, transpose = TRUE)
> ComplexHeatmap::draw(heatmapATAC, heatmap_legend_side = "bot", annotation_legend_side = "bot")
> plotPDF(heatmapATAC, name = "ATAC-Enriched-Marker-Heatmap", width = 8, height = 6, ArchRProj = projHeme5, addDOC = FALSE)
(3)Codex TFBS

我们也可以使用CODEX TFBSs来富集我们峰集的motif。

> projHeme5 <- addArchRAnnotations(ArchRProj = projHeme5, collection = "Codex")
> enrichCodex <- peakAnnoEnrichment(
    seMarker = markersPeaks,
    ArchRProj = projHeme5,
    peakAnnotation = "Codex",
    cutOff = "FDR <= 0.1 & Log2FC >= 0.5"
  )
> enrichCodex
class: SummarizedExperiment 
dim: 189 11 
metadata(0):
assays(10): mlog10Padj mlog10p ... CompareFrequency
  feature
rownames(189): 1.STAT5-No_drug_(DMSO)...
  2.RUNX3-GM12878_cell_fr... ...
  188.TP53-codex_Embryonic... 189.TP53-codex_Embryonic...
rowData names(0):
colnames(11): B CD4.M ... PreB Progenitor
colData names(0):

画热图:

> heatmapCodex <- plotEnrichHeatmap(enrichCodex, n = 7, transpose = TRUE)
> ComplexHeatmap::draw(heatmapCodex, heatmap_legend_side = "bot", annotation_legend_side = "bot")
> plotPDF(heatmapCodex, name = "Codex-Enriched-Marker-Heatmap", width = 8, height = 6, ArchRProj = projHeme5, addDOC = FALSE)

(四)自定义富集

除了所有这些精心挑选的注释集,ArchR还能够接受用户定义的注释来执行自定义富集。在下面的示例中,我们将说明如何基于select ENCODE ChIP-seq实验创建自定义注释。

首先,我们将定义将要使用的数据集,并提供下载链接。本地文件也可以以同样的方式使用。

> 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"
)

接下来我们添加自定义注释到ArchRProject对象,使用addPeakAnnotation()函数。这里,我们把这个自定义注释叫做“ChIP”:

> projHeme5 <- addPeakAnnotations(ArchRProj = projHeme5, regions = EncodePeaks, name = "ChIP")

与前面一样,我们使用这个自定义注释通过peakAnnoEnrichment()执行peak注释富集,并按照相同的步骤创建我们的注释热图:

> enrichRegions <- peakAnnoEnrichment(
    seMarker = markersPeaks,
    ArchRProj = projHeme5,
    peakAnnotation = "ChIP",
    cutOff = "FDR <= 0.1 & Log2FC >= 0.5"
  )

> enrichRegions
class: SummarizedExperiment 
dim: 4 11 
metadata(0):
assays(10): mlog10Padj mlog10p ... CompareFrequency
  feature
rownames(4): Encode_K562_GATA1 Encode_GM12878_CEBPB
  Encode_K562_Ebf1 Encode_K562_Pax5
rowData names(0):
colnames(11): B CD4.M ... PreB Progenitor
colData names(0):

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

推荐阅读更多精彩内容