前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ChIPseeker对ChIP-seq数据进行注释与可视化

ChIPseeker对ChIP-seq数据进行注释与可视化

作者头像
阿凡亮
发布2020-04-14 15:01:37
7.3K0
发布2020-04-14 15:01:37
举报
Y叔开发的ChIPseeker包,主要是为了能对ChIP-seq数据进行注释与可视化,主要对peak位置及peak邻近基因的注释。然而,在之后对ChIPseeker的应用中,发现它不局限于ChIP-seq,可用于其他的peak(如ATAC-seq,DNase-seq等富集得到的)注释,甚至还可用于long intergenic non-coding RNAs (lincRNAs)的注释。该包功能强大之处还是在于可视化上。

这里我们主要介绍ChIPseeker包用于ChIP-seq数据的注释与可视化,主要分为以下几个部分。

01

数据准备

在用ChIPseeker包进行注释前,需要准备两个文件:

1

注释peaks的文件

该文件需要满足BED格式。BED格式文件至少得有chrom(染色体名字),chromStart(染色体起始位点)和chromEnd(染色体终止位点),其它信息如name,score,strand等可有可无。一般情况而言,可直接用做peak calling的MACS输出文件(以_peaks.bed结尾文件)。

2

有注释信息的TxDb对象

Bioconductor包提供了30个TxDb包,包含了很多物种,如人,老鼠等。当所研究的物种没有已有的TxDb时,可利用GenomicFeatures包进行制作:

makeTxDbFromUCSC:通过UCSC在线制作TxDb
makeTxDbFromBiomart:通过Ensembl在线制作TxDb
makeTxDbFromGRanges:通过GRanges对象制作TxDb
makeTxDbFromGFF:通过解析GFF文件制作TxDb

如有对应物种的gff文件,用makeTxDbFromGFF来制作TxDb:

require(GenomicFeatures)
tomato <-  makeTxDbFromGFF("Slycopersicum_gene.gff3")

02

数据可视化

查看peak在全基因组的分布情况,用covplot可视化BED格式文件:

##安装并加载ChIPseeker包
source ("https://bioconductor.org/biocLite.R")
biocLite("ChIPseeker")
library(ChIPseeker)
library(ggplot2)
files <- getSampleFiles()
> files
$`ARmo_0M`
[1] "C:/Users/huangjiao/Documents/R/win-library/3.5/ChIPseeker/extdata/GEO_sample_data/GSM1174480_ARmo_0M_peaks.bed.gz"
$ARmo_1nM
[1] "C:/Users/huangjiao/Documents/R/win-library/3.5/ChIPseeker/extdata/GEO_sample_data/GSM1174481_ARmo_1nM_peaks.bed.gz"
$ARmo_100nM
[1] "C:/Users/huangjiao/Documents/R/win-library/3.5/ChIPseeker/extdata/GEO_sample_data/GSM1174482_ARmo_100nM_peaks.bed.gz"
$CBX6_BF
[1] "C:/Users/huangjiao/Documents/R/win-library/3.5/ChIPseeker/extdata/GEO_sample_data/GSM1295076_CBX6_BF_ChipSeq_mergedReps_peaks.bed.gz"
$CBX7_BF
[1] "C:/Users/huangjiao/Documents/R/win-library/3.5/ChIPseeker/extdata/GEO_sample_data/GSM1295077_CBX7_BF_ChipSeq_mergedReps_peaks.bed.gz"

files包括5个BED格式文件,对应不同样本数据。

##可视化第4个BED格式文件
covplot(files[[4]])

同时可视化多个BED格式文件:

require(GenomicFeatures)
peak=GenomicRanges::GRangesList(CBX6=readPeakFile(files[[4]]),CBX7=readPeakFile(files[[5]]))
covplot(peak, weightCol="V5") + facet_grid(chr ~ .id)

只关注其中的几条染色体:

covplot(peak, weightCol="V5", chrs=c("chr17", "chr18"), xlim=c(4e7, 5e7)) + facet_grid(chr ~ .id)

03

Peak可视化

tagHeatmap函数查看TSS(转录起始位点)上下游3kb区域peak的分布情况:

##加载对应的TxDb包
library(TxDb.Hsapiens.UCSC.hg19.knownGene)
txdb <- TxDb.Hsapiens.UCSC.hg19.knownGene
peak <-readPeakFile(files[[4]])
##getPromoters函数准备启动子窗口
promoter <- getPromoters(TxDb=txdb, upstream=3000, downstream=3000)
##getTagMatrix函数把peaks比对到启动子窗口上
tagMatrix <- getTagMatrix(peak, windows=promoter)
tagHeatmap(tagMatrix, xlim =c(-3000, 3000), color="red")

peakheatmap函数查看多个样本TSS上下游3kb区域内peak的分布情况:

peakHeatmap(files, TxDb=txdb, upstream=3000, downstream=3000, color=rainbow(length(files)))

这里我们可以看出ARmo_0M,ARmo_1nM和ARmo_100nM三个样本的结合位点不在TSS附近,而CBX6_BF和CBX7_BF两个样本结合位点在TSS附近。

plotAvgProf函数查看结合的强度:

plotAvgProf(tagMatrix, xlim=c(-3000, 3000),xlab="Genomic Region (5'->3')", ylab = "Read Count Frequency")

plotAvgProf函数同时查看多个样本结合的强度:

##lapply函数进行批量处理
tagMatrixList <- lapply(files, getTagMatrix, windows=promoter)
##conf定义置信区间,facet决定从上到下还是从左往右
plotAvgProf(tagMatrixList, xlim =c(-3000, 3000), conf=0.95, resample=500, facet="row")

04

peak注释

这里用annotatePeak函数来对peak进行注释(准备好前面那两个文件)。值得一提的是,在注释上,ChIPseeker没有物种限制,当然物种得有那两个文件。

查看peaks在基因组上的分布:

##指定tssRegion(启动子区域),一般TSS上下游区域作为启动子区域
f = getSampleFiles()[[4]]
peakAnno = annotatePeak(f, tssRegion=c(-1000, 1000), TxDb=txdb)
> peakAnno
Annotated peaks generated by ChIPseeker
1331/1331  peaks were annotated
Genomic Annotation Summary:
             Feature  Frequency
9           Promoter 48.1592787
4             5' UTR  0.7513148
3             3' UTR  4.2073629
1           1st Exon  0.7513148
7         Other Exon  3.9068370
2         1st Intron  6.5364388
8       Other Intron  4.8835462
6 Downstream (<=300)  1.1269722
5  Distal Intergenic 29.6769346

查看peaks左右5kb区域都有哪些基因:

##addFlankGeneInfo看peak附近基因,flankDistance看peak左右5kb距离
peakAnno = annotatePeak(f[[4]], tssRegion=c(-1000, 1000), TxDb=txdb,addFlankGeneInfo=TRUE,flankDistance=5000)
> as.GRanges(x) %>% head(3)
GRanges object with 3 ranges and 14 metadata columns:
      seqnames          ranges strand |          V4        V5
         <Rle>       <IRanges>  <Rle> |    <factor> <numeric>
  [1]     chr1   815093-817883      * | MACS_peak_1    295.76
  [2]     chr1 1243288-1244338      * | MACS_peak_2     63.19
  [3]     chr1 2979977-2981228      * | MACS_peak_3    100.16
             annotation   geneChr geneStart   geneEnd geneLength
            <character> <integer> <integer> <integer>  <integer>
  [1] Distal Intergenic         1    803451    812182       8732
  [2]          Promoter         1   1243994   1247057       3064
  [3]          Promoter         1   2976181   2980350       4170
      geneStrand      geneId transcriptId distanceToTSS
       <integer> <character>  <character>     <numeric>
  [1]          2      284593   uc001abt.4         -2911
  [2]          1      126789   uc001aed.3             0
  [3]          2      440556   uc001aka.3             0
                                                flank_txIds
                                                <character>
  [1]                                           uc001abt.4
  [2] uc001aea.2;uc001aeb.2;uc001aec.1;uc001aed.3;uc010nyi.2;uc009vjx.3;uc009vjy.1;uc001aee.2;uc001aef.2;uc001aeg.2;uc001aeh.2;uc001aei.2;uc001aek.2;uc009vjz.2;uc010nyj.2
  [3]                                                                                                    uc001aka.3;uc010nzg.1;uc001akc.3;uc001ake.3;uc001akf.3;uc009vlh.3
                                                flank_geneIds
                                                <character>
  [1]                                           284593
  [2] 116983;116983;116983;126789;126789;126789;54973;54973;54973;54973;54973;54973;54973;54973;54973
  [3]                                                           440556;440556;63976;63976;63976;63976
                                                flank_gene_distances
                                                <character>
  [1]                                           -2911
  [2] -1979;-19;0;0;0;-128;8492;15729;15729;15729;15729;15729;15729;15729;15729
  [3]                                               0;0;-4514;-4514;-4514;-4514
  -------
  seqinfo: 24 sequences from hg19 genome

在输出结果中可以看到多出三列,分别是:flank_txIds, flank_geneIdsflank_gene_distances,可以看到在peak附近5kb区域的所有基因。

虽然找到了peak附近基因,但是基因ID我们不认识,这里用annoDb参数进行转换,利用的是TxDb对象,TxDb对象中的基因ID是哪种,annoDb参数就会将基因ID转换为对应的ID。

peakAnno = annotatePeak(f, tssRegion=c(-1000, 1000), TxDb=txdb, annoDb = 'org.Hs.eg.db')
library(GenomicRanges)
library(dplyr)
as.GRanges(peakAnno) %>% head(3)

这里,TxDb的基因ID是Entrez,annoDb参数就会将基因ID转成ENSEMBL ID,并且加上对应的注释信息。

05

注释信息可视化

plotAnnoPie函数可视化peak分布(ceas也可以看):

peakAnno <- annotatePeak(files[[4]], tssRegion =c(-3000, 3000),TxDb=txdb, annoDb="org.Hs.eg.db")
plotAnnoPie(peakAnno)

plotAnnoBar函数同时查看多个样本的peak分布:

peakAnnoList <- lapply(files, annotatePeak, 
    TxDb =txdb,tssRegion=c(-3000, 3000))
plotAnnoBar(peakAnnoList)

plotDistToTSS函数可视化peak离最近基因距离的分布:

plotDistToTSS(peakAnno,
    title="Distribution of transcription factor-binding loci\nrelative to TSS")

plotDistToTSS函数同时看多个样本peak最近基因距离的分布:

plotDistToTSS(peakAnnoList)

vennplot函数可视化展示注释最近的基因在不同样本中的overlap情况:

genes <- lapply(peakAnnoList, function(i) 
     as.data.frame(i)$geneId)
vennplot(genes[2:4])

//

今天的分享就到这里,有问题请留言吧!

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-11-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 生物信息学 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档