ChIP-seq数据分析(一):从raw reads到peaks

开篇致谢:下面内容的整个框架是跟着生信技能树发布在bilibili上的ChIP-seq视频学习的,链接:https://www.bilibili.com/video/av29255401,如果有基础的话,应该可以很快学下来。
另外,用到的测试数据来自我之前介绍的一篇文献,拟南芥的,跑起来快。链接:https://www.jianshu.com/p/24dbcbcd26e5,后面关于ChIP-seq在组蛋白修饰中应用的学习就以这一篇为主。另外,在转录因子中的应用以及ATAC-seq我在这个暑假都会学一遍。

1. 数据获取

###下载SRA数据
for sample in SRR519051{3..8}
do
prefetch $sample
done
###解压,并更改样本名称
$ cat config
ein2-5_air_H3K9aC_1 SRR5190513
ein2-5_air_H3K9aC_2 SRR5190514
ein2-5_ethylene_H3K9aC_1    SRR5190515
ein2-5_ethylene_H3K9aC_2    SRR5190516
ein2-5_air_MPGB_1   SRR5190517
ein2-5_ethylene_MPGB_1  SRR5190518

dir=~/ChIP_seq/raw
cat config | while read id
do
echo $id #如何将变量赋值给变量?
array=($id)
srr=${array[1]}
sample_name=${array[0]}
fastq-dump -A $sample_name -O $dir --gzip --split-3 ~/ChIP_seq/sra/$srr.sra
done
###查看
$ ls
ein2-5_air_H3K9aC_1.fastq.gz  ein2-5_air_H3K9aC_2.fastq.gz  ein2-5_air_MPGB_1.fastq.gz  ein2-5_ethylene_H3K9aC_1.fastq.gz  ein2-5_ethylene_H3K9aC_2.fastq.gz  ein2-5_ethylene_MPGB_1.fastq.gz
huangsiyuan 13:17:41 ~/ChIP_seq/raw

2. 质量检测

ls ~/ChIP_seq/raw/*.fastq.gz | xargs fastqc -t 4
multiqc ~/ChIP_seq/raw/

最终的结果表明这6个数据的质量都很好,所以原文并没有进行额外的过滤操作。需要注意的是,在该文献中ein2-5_air_MPGB_1和ein2-5_ethylene_MPGB_1两个阴性对照呈现出reads重复率高的特征

3. 比对

3.1 参考基因组建立索引
gunzip Arabidopsis_thaliana.TAIR10.dna.toplevel.fa.gz
bowtie-build Arabidopsis_thaliana.TAIR10.dna.toplevel.fa Arabidopsis_thaliana.TAIR10.dna.toplevel
3.2 比对
bowtie_index=/ifs1/Grp3/huangsiyuan/Ref/Arabidopsis/Arabidopsis_thaliana.TAIR10.dna.toplevel
cd ~/ChIP_seq/align/
ls ~/ChIP_seq/raw/*.fastq.gz | while read id
do
file=$(basename $id)
bam_name=${file%%.*}
bowtie -p 4 -M 1 --best --strata $bowtie_index $id -S | samtools sort -O bam -@ 4 - > ${bam_name}.bam
done

-M 1 --best --strata的作用是将多比对中得分最高的一条比对记录保留,原文在这里采用的是保留唯一比对的reads记录,有些区别。

3.3 比对率查看

针对-M 1 --best --strata这一种模式。允许多比对的话,下面的等式关系不一定成立。

bowtie比对完之后会在log文件中报告比对率,比如

# reads processed: 16679255
# reads with at least one reported alignment: 15164883 (90.92%) #比对得上,不管是唯一比对还是多比对,(都只会报告一条比对记录)
# reads that failed to align: 250108 (1.50%) #完全比对不上
# reads with alignments sampled due to -M: 1264264 (7.58%) #这1264264是指哪一些reads,自己的理解是:这些reads多比对,但不能按照优劣排序(比如有两个以上最优),故不予考虑。之前做小RNA有类似的处理,当reads多比对次数超过一个阈值,就不考虑这个reads了。
Reported 15164883 alignments

还可以用samtools flagstat简单统计比对率

16679255 + 0 in total (QC-passed reads + QC-failed reads)
16429147 + 0 mapped (98.50% : N/A) #这个值是上面的90.92%和7.58%的和。

又统计了一下fq里面的reads数量

$ samtools view ein2-5_air_H3K9aC_1.bam | wc -l
16679255 #bam文件有多少条比对记录
$ samtools view ein2-5_air_H3K9aC_1.bam | cut -f1 | sort | uniq | wc -l
16679255 #这些记录对应多少条reads,相等说明:一条reads只对应一条记录
$ lsx ein2-5_air_H3K9aC_1.fastq.gz | wc -l
66717020
$ echo "scale=2; 66717020/4" | bc
16679255.00 #相等说明:不管reads有没有比对上,都会在bam中有一个记录

这一步没有什么实质性的作用,但能加深对reads比对率、唯一比对、多比对、reads数、比对记录数等的理解。

4. 去除PCR重复

"Duplicate reads were removed using SAMtools."相关的NC文章是这样做的。

ls *bam | while read id; do samtools markdup -r $id $(basename $id ".bam").sm.bam & done

5. 合并bam

按照文章说的,相同处理下,探究相同的组蛋白修饰,将不同的重复合并再进行后面的处理

samtools merge ein2-5_ethylene_H3K9aC_merge.sm.bam ein2-5_ethylene_H3K9aC_1.sm.bam ein2-5_ethylene_H3K9aC_2.sm.bam
samtools merge ein2-5_air_H3K9aC_merge.sm.bam ein2-5_air_H3K9aC_1.sm.bam ein2-5_air_H3K9aC_2.sm.bam

并用samtools index为4个待分析的bam建立索引。

6. MACS2找peaks

文章只强调了--nomodel, -p 0.01这两个参数。

macs2 callpeak --nomodel -B -p 0.01 -c ein2-5_air_MPGB_1.sm.bam -t ein2-5_air_H3K9aC_merge.sm.bam -f BAM -g 110000000 -n ein2-5_air_H3K9aC
macs2 callpeak --nomodel -B -p 0.01 -c ein2-5_ethylene_MPGB_1.sm.bam -t ein2-5_ethylene_H3K9aC_merge.sm.bam -f BAM -g 110000000 -n ein2-5_ethylene_H3K9aC

$ ll ein2-5_*
-rw-r--r--. 1 huangsiyuan grp3 332M Jul  9 13:49 ein2-5_air_H3K9aC_control_lambda.bdg #control的可视化文件
-rw-r--r--. 1 huangsiyuan grp3 1.5M Jul  9 13:49 ein2-5_air_H3K9aC_peaks.narrowPeak #peaks信息
-rw-r--r--. 1 huangsiyuan grp3 1.7M Jul  9 13:49 ein2-5_air_H3K9aC_peaks.xls #peaks信息
-rw-r--r--. 1 huangsiyuan grp3 1.1M Jul  9 13:49 ein2-5_air_H3K9aC_summits.bed #summits(峰顶)的位置
-rw-r--r--. 1 huangsiyuan grp3 1.4G Jul  9 13:49 ein2-5_air_H3K9aC_treat_pileup.bdg #处理的可视化文件
-rw-r--r--. 1 huangsiyuan grp3 149M Jul  9 13:58 ein2-5_ethylene_H3K9aC_control_lambda.bdg
-rw-r--r--. 1 huangsiyuan grp3 1.3M Jul  9 13:58 ein2-5_ethylene_H3K9aC_peaks.narrowPeak
-rw-r--r--. 1 huangsiyuan grp3 1.4M Jul  9 13:58 ein2-5_ethylene_H3K9aC_peaks.xls
-rw-r--r--. 1 huangsiyuan grp3 910K Jul  9 13:58 ein2-5_ethylene_H3K9aC_summits.bed
-rw-r--r--. 1 huangsiyuan grp3 1.3G Jul  9 13:58 ein2-5_ethylene_H3K9aC_treat_pileup.bdg

7. 可视化

7.1 deeptools
先将bam->bw
ls *sm.bam | while read id; do bamCoverage --binSize 50 --normalizeUsing RPKM -b $id -o ${id%_*}.bw done

看参数的值就能知道bw存储的是什么信息:横坐标是在基因组上的一对起始位置,窗口大小是50bp,纵坐标是将深度标准化之后得到的RPKM。

除了bamCoverage,bamCompare也能将bam->bw,并且同时考虑处理和对照,以消除噪声。原文是这样说的:To show ChIP binding signal surrounding TSSs or in gene bodies, read coverage was first calculated using the bamCompare tool (RPKM, Log2(ChIP/IgG) in deepTools.

bamCompare -b1 ein2-5_air_H3K9aC_merge.sm.bam -b2 ein2-5_air_MPGB_1.sm.bam \
--operation log2 --normalizeUsing RPKM --scaleFactorsMethod None --binSize 50 \
-o ein2-5_air_H3K9aC_MPGB_log2ratio.bw

bamCompare -b1 ein2-5_ethylene_H3K9aC_merge.sm.bam -b2 ein2-5_ethylene_MPGB_1.sm.bam \
--operation log2 --normalizeUsing RPKM --scaleFactorsMethod None --binSize 50 \
-o ein2-5_ethylene_H3K9aC_MPGB_log2ratio.bw
查看TSS位点附近的信号
#TSS位点如何确认?five_prime_UTR的第一个位置?那如果一个基因有多个转录本多个five_prime_UTR怎么办?每个都看?
ls *bw | while read id
do
computeMatrix reference-point --referencePoint TSS -a 3000 -b 3000 -R ~/Ref/Arabidopsis/Arabidopsis_thaliana.TAIR10.44.gtf -S $id --skipZeros -o ${id%%.*}.matrix.TSS.3k.gz --outFileSortedRegions ${id%%.*}.region.TSS.3k.bed -p 4
plotHeatmap -m ${id%%.*}.matrix.TSS.3k.gz -o ${id%%.*}.png
plotHeatmap -m ${id%%.*}.matrix.TSS.3k.gz -o ${id%%.*}.pdf --plotFileFormat pdf --dpi 720
plotProfile -m ${id%%.*}.matrix.TSS.3k.gz -o ${id%%.*}_2.png
plotProfile -m ${id%%.*}.matrix.TSS.3k.gz -o ${id%%.*}_2.pdf --plotFileFormat pdf --perGroup --dpi 720
done
查看gene_body的信号
ls ~/ChIP_seq/align/*bw | while read id
do
computeMatrix scale-regions -a 3000 -b 3000 --regionBodyLength 6000 -R ~/Ref/Arabidopsis/Arabidopsis_thaliana.TAIR10.44.gtf -S $id --skipZeros -o $(basename $id ".bw").matrix.TSS_TES.3k.gz --outFileSortedRegions $(basename $id ".bw").region.TSS_TES.3k.bed -p 4
plotHeatmap -m $(basename $id ".bw").matrix.TSS_TES.3k.gz -o $(basename $id ".bw").png
plotHeatmap -m $(basename $id ".bw").matrix.TSS_TES.3k.gz -o $(basename $id ".bw").pdf --plotFileFormat pdf --dpi 720
plotProfile -m $(basename $id ".bw").matrix.TSS_TES.3k.gz -o $(basename $id ".bw")_2.png
plotProfile -m $(basename $id ".bw").matrix.TSS_TES.3k.gz -o $(basename $id ".bw")_2.pdf --plotFileFormat pdf --perGroup --dpi 720
done
7.2 IGV

在igv下面看看bed, bam, bw, bgd是什么样子

可以看到,bam, bw, bdg整体趋势一致,并且跟对照相比,可以显示出peaks。

8. peaks注释

针对的是summits.bed文件,看peaks(一个峰,精确到了单碱基位置)属于哪一个基因?或是离哪一个基因最近?属于哪一个区域?

用chipseeker, 在R下面操作

library(ChIPseeker)

require(GenomicFeatures)
ath <- makeTxDbFromGFF("Arabidopsis_thaliana.TAIR10.44.gff3")

bedpeaksfile = "ein2-5_air_H3K9aC_summits.bed"
peak <- readPeakFile(bedpeaksfile)
peakAnno <- annotatePeak(peak, tssRegion = c(-3000, 3000), TxDb = ath)

plotAnnoPie(peakAnno)
plotAnnoBar(peakAnno)

这个summits的注释跟变异检测注释原理差不多,只是分区不一样。

寻找motif相关的内容,这篇组蛋白修饰的文献没有涉及到,后面再做一个转录因子的再学学。

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