使用ArchR分析單細胞ATAC-seq數據(第十二章)

本文首發于我的個人博客, http://xuzhougeng.top/

往期回顧:

第12章 使用ArchR進行motif和特征富集分析

在鑒定到可靠的peak集之后,我們也會想預測有哪些轉錄因子參與了結合事件(binding events),從而產生了這些染色質開放位點。在分析標記peak或差異peak時,這能幫助我們更好的理解為什么某組的peak會富集某一類轉錄因子的結合位點。舉個例子,我們想在細胞特異的染色質開放區域中找到定義譜系的關鍵轉錄因子。同樣,我們也想根據其他已知特征對不同的peak進行富集分析。比如說,我們像知道是否細胞類型A的細胞特異性ATAC-seq peak對于另一組基因組區域(如ChIP-seq peak)也富集。這一章會詳細介紹ArchR中的富集分析原理。

12.1 差異peak中的motif富集

繼續上一章的差異peak分析,我們可以尋找在不同類型細胞富集的peak中的motif。我們需要先將motif的注釋信息加入到我們的ArchRProject中。我們調用addMotifAnnotations()函數分析ArchRProject的peak中是否存在motif。運行結束后會在ArchRProject對象中加入一個新的二值矩陣,用于判斷peak是否包括motif。

projHeme5 <- addMotifAnnotations(ArchRProj = projHeme5, motifSet = "cisbp", name = "Motif")

接著我們使用上一章差異檢驗得到的markerTest分析motif的富集情況,這是一個SummarizedExperiment對象。我們用peakAnnoEnrichments()函數分析這些差異開放peak是否富集某一類moitf。可以設置cutOff來過濾peak,例如PDR <= 0.1 & Log2FC >=0.5記錄的是"Erythroid"比"Progenitor"更開放的peak。

: peakAnnoEnrichment()能用于多種差異富集檢驗,在后續章節還會介紹。

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

然后,我們創建一個data.frame對象用于ggplot作圖,包括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"里開放的peak富集的motif主要是GATA轉錄因子,符合以往研究中"GATA1"在erythroid分化中發揮的作用。

head(df)

使用ggplot展示結果,以ggrepel來標識每個TF motif名。

ggUp <- ggplot(df, aes(rank, mlog10Padj, color = mlog10Padj)) + 
  geom_point(size = 1) +
  ggrepel::geom_label_repel(
        data = df[rev(seq_len(30)), ], aes(x = rank, y = mlog10Padj, label = TF), 
        size = 1.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
Erythroid-vs-Progenitor-Markers-Motifs-Enriched_1

通過設置Log2FC <= 0.5我們可以挑選出在"Progenitor"里更加開放的peak,然后分析其中富集的motif。

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

準備繪圖所需數據框

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

此時,我們會發現在"Progenitor"細胞更加開放的peak中,更多富集RUNX, ELF和CBFB。

head(df)
# TF mlog10Padj rank
# 326 ELF2_326 88.68056 1
# 733 RUNX1_733 64.00586 2
# 801 CBFB_801 53.55426 3
# 732 RUNX2_732 53.14766 4
# 734 ENSG00000250096_734 53.14766 5
# 336 SPIB_336 52.79666 6

使用ggplot展示結果。

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

ggDo

plotFDF()函數能夠以可編輯的矢量版本保存圖片。

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

12.2 標記Peak的motif富集分析

和之前利用差異peak的motif富集分析類似,我們同樣能用getMarkerFeatures()分析標記peak里富集的motif。

我們向函數peakAnnotationEnrichment()傳入存放標記peak的SummarizedExperiment對象,即markersPeaks

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()函數展示結果

ComplexHeatmap::draw(heatmapEM, heatmap_legend_side = "bot", annotation_legend_side = "bot")
Motifs-Enriched-Marker-Heatmap

plotFDF()函數能夠以可編輯的矢量版本保存圖片。

plotPDF(heatmapEM, name = "Motifs-Enriched-Marker-Heatmap", width = 8, height = 6, ArchRProj = projHeme5, addDOC = FALSE)

12.3 ArchR富集分析

除了分析peak中富集motif, ArchR還能進行個性化的富集分析。為了方便這類數據探索,我們已人工確定了一些特征數據集,它們能比較容易地在我們感興趣的peak區間進行檢驗。我們接下來將會逐個介紹這些特征數據集。該分析最初受LOLA啟發。

12.3.1 Encode TF 結合位點

ENCODE協會已經將TF結合位點(TFBS)匹配到多種細胞類型和因子中。我們可以利用這些TFBS去更好地理解聚類結果。例如,我們可以根據富集結果去判斷未知細胞類型的可能類型。為了能夠使用ENCODE TFBS特征集進行分析,我們需要調用addArchRAnnotations()函數,設置collection = "EncodeTFBS". 和使用addPeakAnnotations()類似,這會創建一個二值矩陣,記錄我們的標記peak是否和ENCODE TFBS有重疊。

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

我們接著使用peakAnnoEnrichment()函數分析這些 ENCODE TFBS是否在我們的peak中富集。

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

和之前一樣,該函數返回一個SummarizedExperiment對象。

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

我們可以使用plotEnrichHeatmap函數從富集結果中創建熱圖。

heatmapEncode <- plotEnrichHeatmap(enrichEncode, n = 7, transpose = TRUE)

然后用ComplexHeatmap::draw()繪制熱圖

ComplexHeatmap::draw(heatmapEncode, heatmap_legend_side = "bot", annotation_legend_side = "bot")
EncodeTFBS-Enriched-Marker-Heatmap

plotFDF()函數能夠以可編輯的矢量版本保存圖片。

plotPDF(heatmapEncode, name = "EncodeTFBS-Enriched-Marker-Heatmap", width = 8, height = 6, ArchRProj = projHeme5, addDOC = FALSE)

12.3.2 混池ATAC-seq

和ENCODE TFBS類似,我們還可以使用混池ATAC-seq實驗鑒定的peak,分析兩者的重疊情況。通過設置collection="ATAC"來調用混池ATAC-seqpeak數據集。

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

接著通過設置peakAnnotation = "ATAC"檢驗我們的標記peak是否富集了混池ATAC-seq的peak。

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

和之前一樣,該函數會輸出SummarizedExperiment對象,記錄著富集結果

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

我們用plotEnrichHeatmap()函數基于SummarizedExperiment繪制富集熱圖

heatmapATAC <- plotEnrichHeatmap(enrichATAC, n = 7, transpose = TRUE)

使用ComplexHeatmap::draw()繪制結果

ComplexHeatmap::draw(heatmapATAC, heatmap_legend_side = "bot", annotation_legend_side = "bot")
ATAC-Enriched-Marker-Heatmap

plotFDF()函數能夠以可編輯的矢量版本保存圖片。

plotPDF(heatmapATAC, name = "ATAC-Enriched-Marker-Heatmap", width = 8, height = 6, ArchRProj = projHeme5, addDOC = FALSE)

12.3.3 Codex TFBS

相同類型的分析還能用于 CODEX TFBS,只要設置collection = "Codex"即可

projHeme5 <- addArchRAnnotations(ArchRProj = projHeme5, collection = "Codex")
enrichCodex <- peakAnnoEnrichment(
    seMarker = markersPeaks,
    ArchRProj = projHeme5,
    peakAnnotation = "Codex",
    cutOff = "FDR <= 0.1 & Log2FC >= 0.5"
  )
heatmapCodex <- plotEnrichHeatmap(enrichCodex, n = 7, transpose = TRUE)
ComplexHeatmap::draw(heatmapCodex, heatmap_legend_side = "bot", annotation_legend_side = "bot")
Codex-Enriched-Marker-Heatmap

于是我們就保存圖片了

plotPDF(heatmapCodex, name = "Codex-Enriched-Marker-Heatmap", width = 8, height = 6, ArchRProj = projHeme5, addDOC = FALSE)

12.4 自定義富集

除了之前這些經過人工審核的注釋數據集,ArchR還能處理用戶自定義注釋信息來執行富集分析。接下來,我們會介紹如何根據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"
)

然后,我們用addPeakAnnotation()函數在ArchRProject函數中增加自定義注釋。我們這里將其命名為"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"
  )

并以相同的步驟生成注釋熱圖。

heatmapRegions <- plotEnrichHeatmap(enrichRegions, n = 7, transpose = TRUE)
ComplexHeatmap::draw(heatmapRegions, heatmap_legend_side = "bot", annotation_legend_side = "bot")
Regions-Enriched-Marker-Heatmap

plotFDF()函數能夠以可編輯的矢量版本保存圖片。

plotPDF(heatmapRegions, name = "Regions-Enriched-Marker-Heatmap", width = 8, height = 6, ArchRProj = projHeme5, addDOC = FALSE)
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,786評論 6 534
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,656評論 3 419
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,697評論 0 379
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,098評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,855評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,254評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,322評論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,473評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,014評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,833評論 3 355
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,016評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,568評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,273評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,680評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,946評論 1 288
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,730評論 3 393
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,006評論 2 374