deeptools工具系列——比较不同bw_bam的信号差异

目录

前言

  1. bamCompare 工具
    1.1 工具原理
    1.2 使用说明
    1.3 使用实例
  2. bigwigCompare 工具
    2.1 使用说明
    2.2 使用实例

前言

今天主要介绍下,如果我有2个 bw/bam 文件,我想要比较这2个文件信号之间的差异时,要如何进行分析。
这个听上去是不是很像差异分析?对的,其实就是差异分析的简化版。

而这个的实际用途,可以是:分别有实验组和对照组ATAC-seq的 bam/bw 文件,此时我们可以直接通过 deeptools 工具,对某些感兴趣区域的染色质开放程度进行可视化展示。

1. bamCompare 工具

1.1 工具原理
该工具的算法主要分成2步:

Normalization:通过使用不同的方法对测序深度进行normalization,让不同样本之间可比。
以bin为单位,对两个不同数据之间的信号进行比较差异。
关于normalization的方法,大致又可以分成2类:

对每个样本计算scale factor,代表方法:SES(Signal Extraction Scaling)【PMID: 22499706】
样本内部normalization,代表方法:RPKM,BPM,CPM等
在该方法中,如果是PE数据,则数据会被当作两个SE数据独立地处理。
1.2 使用说明

usage:  bamCompare -b1 treatment.bam -b2 control.bam -o log2ratio.bw

# 必需参数
--bamfile1, -b1 BAM1                        # 排序后的bam文件,一般是实验组样本
--bamfile2, -b2 BAM2                        # 排序后的bam文件,一般是对照组样本
--outFileName, -o FILENAME                    # 输出文件名

# 可选参数
--outFileFormat, -of {bigwig,bedgraph}        # 输出文件格式,bigwig或bedgraph
--binSize, -bs INT bp                        # bin的size,默认50
--region, -r CHR:START:END                    # 指定某个区域,一般用于测试代码
--blackListFileName, -bl BED                # 指定blackList
--numberOfProcessors, -p INT                # 指定线程

# scale factor相关参数
--scaleFactorsMethod {readCount,SES,None}    # 计算scale factor的方法,如果设置为None,则--normalizeUsing参数生效. 默认readCount
--sampleLength, -l SAMPLELENGTH                # 当选择SES计算scale factor时,随机抽取SAMPLELENGTH长度基因组去计算. 默认1000
--numberOfSamples, -n NUMBEROFSAMPLES        # 当选择SES计算scale factor时,随机抽取NUMBEROFSAMPLES个基因组长度去计算. 默认100000
--scaleFactors SCALEFACTORS                    # 手动指定scale factor,例如0.7:1,则会将BAM1信号全部乘以0.7
--operation {log2,ratio,subtract,add,mean,reciprocal_ratio,first,second}    # 输出结果,默认输出log2(BAM1/BAM2), 即log2
--pseudocount PSEUDOCOUNT                    # 添加一个较小的数值避免分母为0,默认是1
--skipZeroOverZero                            # 跳过2个bam文件都是0的bin

# 内部normalization相关参数
--effectiveGenomeSize EFFECTIVEGENOMESIZE    # 基因组长度,具体见下
--normalizeUsing {RPKM,CPM,BPM,RPGC,None}    # normalization方法选择,具体见下
--exactScaling                                # 利用全部数据进行计算精确的scaling factor. 默认False
--ignoreForNormalization, -ignore IGNOREFORNORMALIZATION    # 计算normalization时不考虑的染色体号,不同染色体号之间用空格间隔。对于ChIP-seq数据可以设置chrX chrM
--skipNonCoveredRegions, --skipNAs            # 是否跳过没有mapping的区域,默认不跳过,这些区域设为0

# Read相关处理
--extendReads, -e [INT bp]                    # 对于SE数据,根据实验过程中打断的片段大小则直接填写该数值.对于PE数据无需指定
--ignoreDuplicates                            # 忽略重复序列
--minMappingQuality INT                        # 至少达到最低mapping质量得分的read才被考虑
--centerReads                                # 相对于片段长度,reads处于中心位置。
--samFlagInclude INT                        # 根据bam文件Flag进行过滤
--samFlagExclude INT                        # 根据bam文件Flag进行过滤
--minFragmentLength                            # Fragment最小长度,主要用于ATACseq中过滤mono-/di-nucleosome fragments
--maxFragmentLength                            # Fragment最大长度,主要用于ATACseq中过滤mono-/di-nucleosome fragments

1.3 使用实例

bamCompare -b1 A.bam -b2 B.bam \
    --scaleFactorsMethod readCount --operation log2 \
    --outFileName log2ratio.bw \
    --binSize 50 \
    --region chr10 -p 16 \
    -ignore chrX

为了对结果有更好的理解,我们把 bw 文件转为可以查看的 bedgraph 文件:

$ bigWigToBedGraph log2ratio.bw log2ratio.bedgraph
$ head log2ratio.bedgraph
chr10   50      49350   0
chr10   49350   49450   -0.802724
chr10   49450   49750   0
chr10   49750   49800   1
chr10   49800   50050   0
chr10   50050   50100   -0.802724
chr10   50100   50750   0
chr10   50750   50800   -0.802724
chr10   50800   50850   1
chr10   50850   51600   0

一般来说,做到这里,我们接下来可以对这个 bw 进行可视化,也就是画成热图来看:

computeMatrix reference-point \
    --referencePoint TSS \
    --scoreFileName log2ratiw.bw \
    --regionsFileName gencode.v40.annotation.gtf \
    --outFileName log2ratio.tss.gz \
    --samplesLabel log2ratio \
    --binSize 50 \
    -a 5000 -b 5000 \
    --averageTypeBins mean --numberOfProcessors 16 \
    --skipZeros

plotProfile -m log2ratio.tss.gz -out log2ratio.png

这里的话,我们就可以根据这个结果,得到 “A样本的信号在TSS比B样本信号有显著下调” 的结论。

当然了,我们也同样画出A和B样本的信号分布图,用来验证:

# get bw file
for id in A B
do
    bamCoverage --bam ${id}.bam --outFileName ${id}.bw \
        --outFileFormat bigwig --binSize 50 \
        --normalizeUsing CPM \
        --region chr10 \
        --numberOfProcessors 20
done

# get plot
for id in A B
do
    computeMatrix reference-point \
        --referencePoint TSS \
        --scoreFileName ${id}.bw \
        --regionsFileName gencode.v40.annotation.gtf \
        --outFileName ${id}.tss.gz \
        --samplesLabel ${id} \
        --binSize 50 \
        -a 5000 -b 5000 \
        --averageTypeBins mean --numberOfProcessors 16 \
        --skipZeros

    plotProfile -m ${id}.tss.gz -out ${id}.png &
done

5d7cf687ea3293439fba8cd991795044.png

可以看到,B的信号整体比A更高,且在TSS初,因为B达到了最高信号,所以A/B的信号达到最低,和前面的结果是一致的。

并且该结果是在使用另外一种normalization方式的前提下完成的,更加说明了结果的一致性。

2. bigwigCompare 工具

2.1 使用说明

usage:  bigwigCompare --bigwig1 Bigwig1 --bigwig2 Bigwig2 

# 必需参数
--bigwig1, -b1 Bigwig1                        # 排序后的bam文件,一般是实验组样本
--bigwig1, -b2 Bigwig2                        # 排序后的bam文件,一般是对照组样本
--outFileName, -o FILENAME                    # 输出文件名

# 可选参数
--outFileFormat, -of {bigwig,bedgraph}        # 输出文件格式,bigwig或bedgraph
--binSize, -bs INT bp                        # bin的size,默认50
--region, -r CHR:START:END                    # 指定某个区域,一般用于测试代码
--blackListFileName, -bl BED                # 指定blackList
--numberOfProcessors, -p INT                # 指定线程

# scale factor相关参数
--scaleFactors SCALEFACTORS                    # 手动指定scale factor,例如0.7:1,则会将BAM1信号全部乘以0.7
--operation {log2,ratio,subtract,add,mean,reciprocal_ratio,first,second}    # 输出结果,默认输出log2(BAM1/BAM2), 即log2
--pseudocount PSEUDOCOUNT                    # 添加一个较小的数值避免分母为0,默认是1
--skipZeroOverZero                            # 跳过2个bam文件都是0的bin
--skipNonCoveredRegions, --skipNAs            # 是否跳过没有mapping的区域,默认不跳过,这些区域设为0

2.2 使用实例

bigwigCompare -b1 A.bw -b2 B.bw \
    --operation log2 \
    --outFileName log2ratio_bigwigCompare.bw \
    --binSize 50 \
    --region chr10 -p 16

为了对结果有更好的理解,我们把 bw 文件转为可以查看的 bedgraph 文件:

$ bigWigToBedGraph log2ratio_bigwigCompare.bw log2ratio_bigwigCompare.bedgraph
$ head log2ratio_bigwigCompare.bedgraph
chr10   50      49350   0
chr10   49350   49450   -0.802724
chr10   49450   49750   0
chr10   49750   49800   1
chr10   49800   50050   0
chr10   50050   50100   -0.802724
chr10   50100   50750   0
chr10   50750   50800   -0.802724
chr10   50800   50850   1
chr10   50850   51600   0
$ head log2ratio.bedgraph
chr10   50      49350   0
chr10   49350   49450   -0.151532
chr10   49450   49750   0
chr10   49750   49800   0.184749
chr10   49800   50050   0
chr10   50050   50100   -0.151532
chr10   50100   50750   0
chr10   50750   50800   -0.151532
chr10   50800   50850   0.18

可以看到,这里的结果虽然有一定的差异,但是整体是一致的。

为了更好的展示,我还是将其画成图:

computeMatrix reference-point \
    --referencePoint TSS \
    --scoreFileName log2ratio_bigwigCompare.bw \
    --regionsFileName gencode.v40.annotation.gtf \
    --outFileName log2ratio_bigwigCompare.tss.gz \
    --samplesLabel log2ratio \
    --binSize 50 \
    -a 5000 -b 5000 \
    --averageTypeBins mean --numberOfProcessors 16 \
    --skipZeros

plotProfile -m log2ratio_bigwigCompare.tss.gz -out log2ratio_bigwigCompare.png
720af44981ae500e71128bae7abe5235.png

同样的,我把两张图放在一起看:


5b0a4e3b5293ea7bc7eac7a4530a4c93.png

可以看到,两者的pattern是一模一样的,只是在数值上有一定的差异。这可能与normalization的方法选择有关。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念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

推荐阅读更多精彩内容