学习一下ChIPpeakAnno(一)

刘小泽写于19.10.11
跟着Bioconductor的教程学习一下ChIPpeakAnno的基本流程

前言

官网教程在:https://www.bioconductor.org/packages/devel/bioc/vignettes/ChIPpeakAnno/inst/doc/pipeline.html

更新于2019-7-26

这次先进行第一部分,将会进行以下操作:

将BED/GFF文件转为GRanges、两个peak数据集中寻找overlap、利用韦恩图可视化共有和特异的peaks

1 导入BED和GFF数据并获得overlap peaks

ChIPpeakAnno包需要从ChIP-seq实验等获得的peaks在基因组染色体的坐标信息,这些信息可以存放在BED、GFF、MACS、GRanges中,这里将会利用GRanges进行后续分析。而像BED, GFF 和MACS转为GRanges也是很容易的,利用toGRanges函数即可

下面👇的例子中,就将BED和GFF转为了GRanges,另外将原来peaks的注释信息通过addMetadata重新添加到GRanges中【这些文件都是包自带的,加载包后直接使用】

这个包需要依赖几十个R包

# 查看包示例数据所在位置
> system.file("extdata",package="ChIPpeakAnno")
[1] "/Library/Frameworks/R.framework/Versions/3.5/Resources/library/ChIPpeakAnno/extdata"

可以看到其中的MACS_output.bed文件是这样的

将BED文件转换为GRanges对象

bed <- system.file("extdata", "MACS_output.bed", package="ChIPpeakAnno")
gr1 <- toGRanges(bed, format="BED", header=FALSE) 
> gr1
GRanges object with 230 ranges and 1 metadata column:
                seqnames              ranges strand |     score
                   <Rle>           <IRanges>  <Rle> | <numeric>
    MACS_peak_1     chr1         28341-29610      * |    160.81
    MACS_peak_2     chr1         90821-91234      * |    133.12
    MACS_peak_3     chr1       134974-135538      * |    138.99
    MACS_peak_4     chr1       136331-137068      * |    106.17
    MACS_peak_5     chr1       137277-137847      * |     124.9
            ...      ...                 ...    ... .       ...

对gff文件转换

gff <- system.file("extdata", "GFF_peaks.gff", package="ChIPpeakAnno")
gr2 <- toGRanges(gff, format="GFF", header=FALSE, skip=3)

下面找bed和gff的重叠peaks

需要注意的是,使用findOverlapsOfPeaks函数需要将二者的格式调成一致。当前一个是数值型一个是整型

> class(gr1$score)
[1] "numeric"
> class(gr2$score)
[1] "integer"
先将gr2的转换一下格式,然后找overlap
gr2$score <- as.numeric(gr2$score) 
ol <- findOverlapsOfPeaks(gr1, gr2)

找到以后添加metadata,例如添加

ol <- addMetadata(ol, colNames="score", FUN=mean) 

这个ol是一个列表,我们可以看看其中包含的peaks信息,例如:

# gr1和gr2都有的peaks数量
> length(ol$peaklist$`gr1///gr2`)
[1] 166
# 仅gr2有的peaks数量
> length(ol$peaklist$gr2)
[1] 61
# 仅gr1有的peaks数量
> length(ol$peaklist$gr1)
[1] 62

查看重叠的这些peaks信息的话(以前两行为例):

ol$peaklist[["gr1///gr2"]][1:2]
# 或 ol$peaklist$`gr1///gr2`

## GRanges object with 2 ranges and 2 metadata columns:
##       seqnames        ranges strand |                           peakNames
##          <Rle>     <IRanges>  <Rle> |                     <CharacterList>
##   [1]     chr1 713791-715578      * | gr1__MACS_peak_13,gr2__001,gr2__002
##   [2]     chr1 724851-727191      * |          gr2__003,gr1__MACS_peak_14
##                  score
##              <numeric>
##   [1] 850.203333333333
##   [2]            29.17
##   -------
##   seqinfo: 1 sequence from an unspecified genome; no seqlengths

另外它还做了一个韦恩图使用的数据

> ol$venn_cnt
     gr1 gr2 Counts
[1,]   0   0      0
[2,]   0   1     61
[3,]   1   0     62
[4,]   1   1    166
attr(,"class")
[1] "VennCounts"
做出韦恩图
makeVennDiagram(ol, fill=c("#009E73", "#F0E442"), # circle fill color
                col=c("#D55E00", "#0072B2"), #circle border color
                cat.col=c("#D55E00", "#0072B2")) # label color, keep same as circle border colors

2 准备注释数据

注释数据和peaks一样,也要是GRanges对象,这种注释不仅可以使用BED、GFF等文件,还能用EnsDbTxDb等对象,使用toGRanges 进行创建

# 接下来就是利用EnsDb创建注释
library(EnsDb.Hsapiens.v75) ##(hg19)
annoData <- toGRanges(EnsDb.Hsapiens.v75, feature="gene")

> annoData[1:2]
GRanges object with 2 ranges and 1 metadata column:
                  seqnames      ranges strand |   gene_name
                     <Rle>   <IRanges>  <Rle> | <character>
  ENSG00000223972     chr1 11869-14412      + |     DDX11L1
  ENSG00000227232     chr1 14363-29806      - |      WASH7P
  -------
  seqinfo: 273 sequences from GRCh37 genome

3 结合位点可视化

binOverFeature()

找到重叠的peaks之后,就可以用binOverFeature来对基因组feature(例如转录起始位点TSS)附近的重叠peaks进行可视化

# 需要两个东西:重叠的peaks、注释信息annoData
overlaps <- ol$peaklist[["gr1///gr2"]]
binOverFeature(overlaps, annotationData=annoData,
               radius=5000, nbins=20, FUN=length, errFun=0,
               ylab="count", 
               main="Distribution of aggregated peak numbers around TSS")
assignChromosomeRegion()

这个函数可以对peaks的分布区域进行概括,包括外显子、内含子、增强子、上游启动子/近端启动子、5’ UTR 、3’ UTR。可能一个peak会跨越多种类型的基因feature信息,因此可能看到输出结果中注释到的feature数量比输入的peaks数量更多。

peaks的分布有两种统计方式:peak centric or nucleotide centric ,默认使用前者

library(TxDb.Hsapiens.UCSC.hg19.knownGene)
aCR<-assignChromosomeRegion(overlaps, nucleotideLevel=FALSE, 
                           precedence=c("Promoters", "immediateDownstream", 
                                         "fiveUTRs", "threeUTRs", 
                                         "Exons", "Introns"), 
                           TxDb=TxDb.Hsapiens.UCSC.hg19.knownGene)
barplot(aCR$percentage, las=3)

欢迎关注我们的公众号~_~  
我们是两个农转生信的小硕,打造生信星球,想让它成为一个不拽术语、通俗易懂的生信知识平台。需要帮助或提出意见请后台留言或发送邮件到jieandze1314@gmail.com

Welcome to our bioinfoplanet!

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