01 背景
bedtools:一个用于基因组算术的强大工具集
总体而言,bedtools 工具集是一个多功能的工具包,可用于广泛的基因组分析任务。其中最广泛使用的工具能够进行基因组算术运算,即在基因组上执行集合论操作。例如,bedtools 允许用户在多种常用的基因组文件格式(如 BAM、BED、GFF/GTF、VCF)中对基因组区间进行交集、合并、计数、补集和随机排列操作。虽然每个工具都设计用于执行一个相对简单的任务(例如,交集两个区间文件),但通过在 UNIX 命令行上组合多个 bedtools 操作,可以进行相当复杂的分析。
bedtools 由犹他大学的 Quinlan 实验室开发,并得益于来自全球科学家的卓越贡献。
配合BAW、samtool等一起使用更佳~
Samtools安装与使用-samtools-v1.17(bioinfomatics tools-007)
minimap2安装与使用(v 2.28)生物信息学工具26
Bowtie2安装与使用-bowtie2-2.5.2(bioinfomatics tools-011)-CSDN博客
bwa安装及使用v0.7.17(生物信息学工具-018)-CSDN博客
Blast安装及使用-Blast+2.14.0(bioinfomatics tools-001)_blast软件-CSDN博客
性能评价
自 2.18 版本起,由于我们在处理按染色体和起始位置预排序的数据集的算法上进行了改进,bedtools 的可扩展性得到了显著提升。如你在下图中所见,使用排序数据时,速度和内存消耗的扩展性表现良好,而未排序数据则扩展性较差。当前版本的 bedtools intersect 的速度与 bedops 软件包的 bedmap 相当(甚至稍快),后者也使用了类似的排序数据算法。下图显示的是从外显子捕获 BAM 文件中统计与 CCDS 外显子相交的比对数量。这些比对已转换为 BED 格式,以便与 bedops 进行比较。我们将其与 bedmap 的 `--ec` 选项进行了比较,因为 bedtools 强制执行了类似的错误检查。
注意:由于内存不足,使用 1 亿次比对和 R-Tree 算法处理未排序数据时,bedtools 无法完成操作。
02 参考
https://bedtools.readthedocs.io/en/latest/index.html #官网
https://github.com/arq5x/bedtools2 #github
03 安装
method1
wget -c https://github.com/arq5x/bedtools2/releases/download/v2.31.1/bedtools-2.31.1.tar.gz
tar -zxvf bedtools-2.31.1.tar.gz
cd bedtools2
make
method2
conda install bioconda::bedtools
04 使用
**bedtools 是一个用于基因组算术的强大工具集。**
- 版本:v2.31.1
- 关于:由 [quinlanlab.org](http://quinlanlab.org) 开发,并由全球众多贡献者共同维护。
- 文档:[http://bedtools.readthedocs.io/](http://bedtools.readthedocs.io/)
- 代码:[https://github.com/arq5x/bedtools2](https://github.com/arq5x/bedtools2)
- 邮件:[https://groups.google.com/forum/#!forum/bedtools-discuss](https://groups.google.com/forum/#!forum/bedtools-discuss)
**用法:** `bedtools <子命令> [选项]`
**bedtools 的子命令包括:**
[基因组算术]
- `intersect` 查找各种方式下的重叠区间。
- `window` 查找区间周围窗口内的重叠区间。
- `closest` 查找最近的、可能不重叠的区间。
- `coverage` 计算定义区间上的覆盖度。
- `map` 对每个重叠区间的列应用一个函数。
- `genomecov` 计算整个基因组的覆盖度。
- `merge` 将重叠/临近区间合并为一个单一区间。
- `cluster` 聚类(但不合并)重叠/临近的区间。
- `complement` 提取未被区间文件表示的区间。
- `shift` 调整区间的位置。
- `subtract` 基于两个文件之间的重叠移除区间。
- `slop` 调整区间的大小。
- `flank` 根据现有区间创建新的侧翼区间。
- `sort` 对文件中的区间排序。
- `random` 在基因组中生成随机区间。
- `shuffle` 随机重新分布基因组中的区间。
- `sample` 使用水库抽样从文件中随机抽取记录。
- `spacing` 报告文件中区间之间的间隙长度。
- `annotate` 注释多个文件中特征的覆盖度。
[多路文件比较]
- `multiinter` 识别多个区间文件中共同的区间。
- `unionbedg` 合并多个 BEDGRAPH 文件中的覆盖区间。
[配对末端操作]
- `pairtobed` 查找以各种方式与区间重叠的配对。
- `pairtopair` 查找以各种方式与其他配对重叠的配对。
[格式转换]
- `bamtobed` 将 BAM 比对转换为 BED(及其他)格式。
- `bedtobam` 将区间转换为 BAM 记录。
- `bamtofastq` 将 BAM 记录转换为 FASTQ 记录。
- `bedpetobam` 将 BEDPE 区间转换为 BAM 记录。
- `bed12tobed6` 将 BED12 区间拆分为独立的 BED6 区间。
[FASTA 操作]
- `getfasta` 使用区间从 FASTA 文件中提取序列。
- `maskfasta` 使用区间从 FASTA 文件中屏蔽序列。
- `nuc` 分析 FASTA 文件中区间的核苷酸含量。
[BAM 专用工具]
- `multicov` 在特定区间计数多个 BAM 文件的覆盖度。
- `tag` 基于与区间文件的重叠对 BAM 比对进行标记。
[统计关系]
- `jaccard` 计算两个区间集合之间的 Jaccard 统计量。
- `reldist` 计算两个文件之间相对距离的分布。
- `fisher` 计算两个特征文件之间的 Fisher 统计量。
[杂项工具]
- `overlap` 计算两个区间之间的重叠量。
- `igv` 创建一个 IGV 快照批处理脚本。
- `links` 创建指向 UCSC 位置的 HTML 链接页面。
- `makewindows` 在基因组上创建区间“窗口”。
- `groupby` 按共同列分组并汇总其他列(类似 SQL 的“groupBy”)。
- `expand` 基于列中的值列表复制行。
- `split` 将文件拆分为具有相同记录或碱基对数的多个文件。
- `summary` 统计文件中区间的总结。
[通用参数]
- `--cram-ref` CRAM 输入使用的参考文件
[通用帮助]
- `--help` 打印此帮助菜单。
- `--version` 查看你使用的 bedtools 版本。
- `--contact` 功能请求、错误、邮件列表等。
05 常用命令行
Commands used:
# bedtools sorted
bedtools intersect \
-a ccds.exons.bed -b aln.bam.bed \
-c \
-sorted
# bedtools unsorted
bedtools intersect \
-a ccds.exons.bed -b aln.bam.bed \
-c
# bedmap (without error checking)
bedmap --echo --count --bp-ovr 1 \
ccds.exons.bed aln.bam.bed
# bedmap (no error checking)
bedmap --ec --echo --count --bp-ovr 1 \
ccds.exons.bed aln.bam.bed
intersect
bedtools intersect比较两个或多个BED/BAM/VCF/GFF文件,并识别genome中两个文件中的特征重叠的所有区域(即共享至少一个碱基对)。
overlap
bedtools intersect -a cpg.bed -b exons.bed > result.bed
从cpg.bed中取出与exons.bed不重叠的区域
bedtools intersect -a cpg.bed -b exons.bed -v > result.bed
多个文件的比较
bedtools intersect -a exons.bed -b cpg.ed gwas.bed hesc.chromHmm.bed -sorted > result.bed
从bam与bed比较
bedtools intersect -abam tmp.bam -b exons.bed > result.bed
指定overlap的最小fraction
bedtools intersect -a cpg.bed -b exons.bed -wo -f 0.50
merge
Bedtools merge 命令可以将重叠的区间或者紧邻的区间合并成一个新的区间。
合并重叠区间形成一个新的区间
bedtools merge -i cpg.bed > result_merge.bed
注意事项
bedtools默认输入文件的分隔符为TAB,除了bam格式的文件;
如果未使用-sorted参数,则bedtools默认不支持大于512M的染色体;
-sorted参数和-g参数必须存在一个;
当进行多个文件比较时,染色体的命名方式必须统一,’chrX‘和’X‘不可以同时存在
假设你有一个来自两个不同实验的 ChiP-seq 峰的 BED 文件。你希望识别出在两个实验中都观察到的峰(要求 50% 的相互重叠),并且对于这些峰,你希望找到最近的、不重叠的基因。这样的分析可以通过两个相对简单的 bedtools 命令来完成。
# 交集两个实验的峰。
# 结合 -f 0.50 和 -r 选项要求两个实验的峰之间有 50% 的相互重叠。
bedtools intersect -a exp1.bed -b exp2.bed -f 0.50 -r > both.bed
# 查找每个实验中都有峰值的区间的最近的、不重叠的基因
# -io 选项忽略重叠的区间,仅返回最近的、不重叠的区间(在本例中为基因)
bedtools closest -a both.bed -b genes.bed -io > both.nearest.genes.txt
06 参考文献
- Quinlan AR and Hall IM, 2010. BEDTools: a flexible suite of utilities for comparing genomic features. Bioinformatics. 26, 6, pp. 841–842.
- Dale RK, Pedersen BS, and Quinlan AR. Pybedtools: a flexible Python library for manipulating genomic datasets and annotations. Bioinformatics (2011). doi:10.1093/bioinformatics/btr539