三個講的很好的參考教程鏈接
學習一遍ChIPseeker的使用 http://www.lxweimin.com/p/c76e83e6fa57
2021-05-23 ChIP-seq數據從頭到尾比對及分析匯總(個人分析記錄貼)http://www.lxweimin.com/p/96688fecd864
使用R包ChIPseeker實現對ChIP-seq peaks的注釋(注釋ChIP-seq的峰位置(多個bed文件的批量處理))http://www.lxweimin.com/p/0c71f1495dee
軟件背景介紹
ChIPseeker包南方醫科大學Y寫的許多有名的生信R包之一,其最初設計用于chip-seq的macs peak calling結果分析以及可視化,后來逐漸也適用于相關的peak分析。
參考鏈接:https://www.bioconductor.org/packages/release/bioc/vignettes/ChIPseeker/inst/doc/ChIPseeker.html;
以及Y叔自己的微信公眾號教程:https://mp.weixin.qq.com/mp/appmsgalbum?__biz=MzI5NjUyNzkxMg==&action=getalbum&album_id=1300625300497268737&scene=173&from_msgid=2247488238&from_itemidx=1&count=3#wechat_redirect
輸入文件之BED文件
全稱是:Browser Extensible Data,為基因組瀏覽器而生
包括3個必須字段和9個可選字段:
3個必須
? 1 chrom - 染色體名字
? 2 chromStart - 染色體起始位點(起始于0,而不是1)許多軟件忽略了這一點,存在一個堿基的位移(如peakAnalyzer, ChIPpeakAnno存在這個問題),Homer、ChIPseeker沒有
? 3 chromEnd - 染色體終止位點
9個可選
? 4 name - 名字
? 5 score - 分值(0-1000), 用于genome browser展示時上色。
? 6 strand - 正負鏈,對于ChIPseq數據來說,一般沒有正負鏈信息。
? 7 thickStart - 畫矩形的起點
? 8 thickEnd - 畫矩形的終點
? 9 itemRgb - RGB值
? 10 blockCount - 子元件(比如外顯子)的數目
? 11 blockSizes - 子元件的大小
? 12 blockStarts - 子元件的起始位點
一般只用前5個足矣(MACS的輸出結果也是前5個字段)
分析代碼實例
###加載R包
library(ChIPseeker)
library(ggplot2)
###讀取數據
peak <- readPeakFile("ChIP-seq1.bed", as="GRanges")
#使用的是3.5中通過macs3得到的NAME_peaks.narrowPeak文件,as是指讀取后轉化成的對象 (Granges是genomic ranges的簡稱,它是bioconductor中的R包存儲genomic intervals的數據結構)
###推薦手動構建TxDb注釋文件
library(GenomicFeatures)
txdb <- makeTxDbFromGFF('XXX.gff3')
###peaks在基因組上的分布
pdf("Figure1.sample_distribution_of_peaks_in_chrs.pdf")
covplot(peak, weightCol="V5")
#covplot(peak, weightCol="V5", chrs=c("chr1", "chr2"), xlim=c(4.5e7, 5e7)) #chr1 chr2上的peaks
dev.off()
###多個文件同時畫圖
pdf("多個文件同時畫染色體分布圖")
peak=GenomicRanges::GRangesList(CBX6=readPeakFile("~/3_macs/sample1_peaks.narrowPeak", as="GRanges"),CBX7=readPeakFile("~/3_macs/sample2_peaks.narrowPeak", as="GRanges"))
covplot(peak, weightCol="V5") + facet_grid(chr ~ .id)
dev.off()
###TSS區域,上下游2.5kb,可自行設置
pdf("Figure2.sample_TSS_peaks_heatmap and plot.pdf")
##熱圖
tss <- getPromoters(TxDb=txdb, upstream=2500, downstream=2500)
tagMatrix <- getTagMatrix(peak, windows=tss)
#tagHeatmap(tagMatrix, xlim=c(-2500, 2500), color="red")
peakHeatmap(peak, TxDb=txdb, upstream=2500, downstream=2500, color="red") #等效語句
##峰圖
plotAvgProf(tagMatrix, xlim=c(-2500, 2500),
? ? ? ? ? ? xlab="Genomic Region (5'->3')", ylab = "Read Count Frequency")
#含置信區間峰圖
plotAvgProf(tagMatrix, xlim=c(-2500, 2500), conf = 0.95, resample = 1000)
dev.off()
###peaks注釋,tss選取上下游2.5Kb,可自行調整,這里默認promoter是上游2.5Kb
peakAnno <- annotatePeak(peak, tssRegion=c(-2500, 2500), TxDb=txdb)
peakAnno
#在注釋時,有的peak可能同時落在兩個或者更多的gene feature里(例如是一個基因的外顯子而同時又是另一個基因的內含子),但只能注釋其中一個。
#默認按照Promoter、5’ UTR、3’ UTR、Exon、Intron、Downstream、Intergenic順序先后注釋。
#
### 保存注釋結果
peakAnno.df <- as.data.frame(peakAnno) #保存為數據框
peakAnno.gr <- as.GRanges(peakAnno) #保存為GenomicRanges
head(peakAnno.gr, 3)
write.table(peakAnno.df,file="sample.annotation.xls",quote=F,sep="\t")
###peaks注釋可視化(多種圖形及最近基因)
pdf("Figure_3.sample_peaks_annotation_pie_bar_venn_upset.pdf")
plotAnnoPie(peakAnno)
plotAnnoBar(peakAnno)
vennpie(peakAnno)
upsetplot(peakAnno, vennpie=TRUE)
dev.off()
------------------------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------------------------
注釋ChIP-seq的峰位置(多個bed文件的批量處理)
#讀取chipseq峰的bed文件
peak1 <- readPeakFile('ChIP-seq1.bed')
peak2 <- readPeakFile('ChIP-seq2.bed')
peaks <- list(peak1 = peak1, peak2 = peak2)
#注釋
peakAnnoList <- lapply(peaks, annotatePeak, TxDb = txdb, tssRegion = c(-3000, 3000), addFlankGeneInfo = TRUE, flankDistance = 5000)
#分別輸出結果
write.table(peakAnnoList[1], file = 'peak1.txt',sep = '\t', quote = FALSE, row.names = FALSE)
write.table(peakAnnoList[2], file = 'peak2.txt',sep = '\t', quote = FALSE, row.names = FALSE)
#可視化,兩個可以放在一起比較
plotAnnoBar(peakAnnoList)
vennpie(peakAnnoList[[1]])
plotAnnoPie(peakAnnoList[[1]])
plotDistToTSS(peakAnnoList)