LoginSignup
20
13

More than 3 years have passed since last update.

Bedtools チートシート

Last updated at Posted at 2020-08-06

はじめに

image.png
画像:© Copyright 2009 - 2019, Aaron R. Quinlan and Neil Kindlon. Last updated on Apr 25, 2020.

Bedtoolsは10年以上も前から活発に開発が続けられている古典的なバイオインフォ用のツールです。ゲノムの位置情報を扱うBEDファイルの演算を行うことができます。BEDファイルはゲノムブラウザに表示することができます。

Githubリポジトリ
https://github.com/arq5x/bedtools2

開発者は Aaron Quinlan さんという方で、ユタ大学でQuinlan Labという研究室を運営しているようです。近年Nim言語やGo言語などで勢力的に高速なツールを開発されているBrent Pedersenさんも、同ラボに所属しています。

この記事ではbedtoolsの初心者が、bedtools公式のリファレンスに加えて、下記の2つの資料をまるごと利用してBedtoolsの使い方を日本語でまとめていきます。

このチートシートではbedの指し示すintervalを「区間」としましたが、かならずしも一般的な用語ではないと思います。必要なら「領域」などと読み替えてください。本文は、ilevantisさんの作成したチートシートをDeepl翻訳、Google翻訳にかけたのち、さらに日本語として意味が通じにくい場所は本家のリファレンスのGoogle翻訳を利用したり書き直すなどして作成しています。画像は公式リファレンスの画像を50%縮小して利用していますが、著作権はすべてBedtoolsの開発チームにあると思います。誤っている部分や改善点がございましたら、プルリクエストやコメント欄にコメントください。

コマンドの全体像

一般的な操作

サブコマンド 説明
flank 既存の区間に隣接した新しい区間を作成します。
slop 区間のサイズを調整します。
shift 区間の位置を調整します。
subtract 2つの区間の重複を削除します。
complement 指定した区間以外の領域を区間として抽出します。
closest 最も近い区間を検索します。
intersect 重複した区間を抽出します。
window 区間を含むウィンドウで重複する区間を検索します。
cluster 重なっている区間や近い区間をクラスタ化します。(マージはしません。)
merge 重なっている/近くにある区間を 1つの区間に結合します。
map 重複している区間の集合に関数を適用します。
groupby 列でグループ化し、他の列をまとめる。

ファイル形式

サブコマンド 説明
getfasta BEDで指定した区間の配列を出力します。
maskfasta BEDで指定した区間以外をNにしたfastaを返す。
sort 区間をソートします。
bed12tobed6 BED12 を BED6 に分割します。
bamtofastq BAM 形式を Fastq 形式に変換します。
bamtobed BAM 形式を BED 形式に変換します。
bedpetobam BEDPE 形式を BAM 形式に変換します。
bedtobam BED 形式を BAM 形式に変換します。

統計

サブコマンド 説明
jaccard ジャカード係数を計算します。
random ランダムな区間を生成します。
reldist 2つのファイルの相対的な距離の分布を計算します。
shuffle 区間をランダムに再配置します。
makewindows Makes adjacent or sliding windows across a genome or BED file.
nuc 区間内のヌクレオチド含有量を計測します。

カバレッジ

サブコマンド 説明
annotate 1つのファイルに他のファイルとのカバレッジや重複の数で注釈をつける
coverage 定義された間隔のカバレッジを計算します。
genomecov ゲノム全体のカバレッジを計算します。
multicov 特定の間隔で複数のBAMからのカバレッジを計算します。
unionbedg 複数のBEDGRAPHファイルのカバレッジ間隔を結合します。

共通オプション

オプション 説明
-s 同じストランドでAと○○するBのヒットのみを報告します。
-S 反対のストランドでAと○○するBのヒットのみを報告します。
-f Aの分数として必要な最小オーバーラップ。デフォルトは1E-9(つまり1bp)です。
-F Bの分数として必要な最小のオーバーラップ。デフォルトは1E-9(つまり、1bp)です。
-r オーバーラップの割合がAとBの相互的であることを要求します。つまり、-fが0.90で、-rが使用されている場合、BはAの少なくとも90%とオーバーラップし、Aも少なくともBの90%とオーバーラップする必要があります。
-e  AまたはBのいずれかを満たす必要があります。つまり、-eを-f 0.90および-F 0.10と一緒に使用する場合は、Aの90%がカバーされるか、Bの10%がカバーされる必要があります。-eがなければ、両方が満たされる必要があります。
-split BAMまたはBED12のエントリを分割したものをBEDの区間として扱う。
-abam A は BAMファイル。

一般的な操作

flank

既存の区間に隣接した新しい区間を作成します。 (flank Docs)

image.png

IN           ▓▓▓▓▓       ▓▓▓
Flank      ██     ██   ██   ██
Slop       █████████   ███████
bedtools flank [オプション] -i <BED/GFF/VCF> -g <GENOME> [-b or (-l and -r)]
オプション 説明
-b, -l, -r 両側に、左側に、または右側に、x bpずつ領域をフランク/拡張します。
-s ストランドに基づいて -l と -r を定義します。
-pct l と -r を、特徴(feature)の長さの割合として定義します。

slop

区間の大きさを調整します。 (slop Docs)

image.png

bedtools slop [オプション] -i <BED/GFF/VCF> -g <GENOME> [-b or (-l and -r)]`
オプション 説明
-b, -l, -r 両側に、左側に、または右側に、x bpずつ領域をフランク/拡張します。
-s ストランドに基づいて -l と -r を定義します。
-pct l と -r は、特徴(feature)の長さの割合で定義します。

shift

染色体のへりを尊重しながら、間隔の位置を調整する (Docs).

IN      ██   ██      ████
OUT        ██   ██      ████
bedtools shift [オプション] -i <BED/GFF/VCF> -g <GENOME> [-s or (-m and -p)]
オプション 説明
-s シフトする塩基の数(BPs)。
-m, -p マイナス鎖 または プラス鎖 においてシフトする塩基の数
-pct s、-m、-pを特徴の(feature)長さの比率として定義します。

subtract

2つのファイルの重なりに基づいて区間を削除します。 (Docs)

image.png

A        ▓▓▓▓▓▓▓▓▓▓   ▓▓▓     ▓▓▓▓▓▓
B          ▓▓▓▓           ▓▓▓▓▓▓▓  
A sub B  ██    ████   ███        ███
bedtools subtract [オプション] -a <BED/GFF/VCF> -b <BED/GFF/VCF>
オプション 説明
-A 重複している場合は、特徴(feature)全体を削除します。
共通 strandedness: -s, -S; overlap: -f, -F; overlap mode: -r, -e

complement

BEDファイルで表されない領域を抽出します。(Docs)

image.png

IN           ▓▓▓▓▓     ▓▓▓     ▓▓▓▓▓▓
          ▓▓▓▓            ▓▓▓  
OUT  █████        █████      ██
bedtools complement -i <BED/GFF/VCF> -g <GENOME>

closest

最も近い区間を見つけます。 (Docs)

image.png

A            █­███­█   ✓
B   ██­██            ██­█   
bedtools closest [オプション] -a <FILE> -b <FILE1, FILE2, ..., FILEN>
オプション 説明
-d Aから最も近い特徴までの距離も報告します。
-k k個の最も近いヒットを報告します。デフォルト:1。
-io Aと重複するBの特徴を無視します。
-iu, -id Aの特徴の上流または下流にあるBの機能を無視します。
共通 strandedness: -s, -S

intersect

重複する間隔をさまざまな方法で見つけます。 (Docs)

image.png

A           ██████████
B         ▓▓▓▓    ▓▓        ▓▓▓  
A int B     ▓▓    ▓▓

$ bedtools intersect [オプション] -a <BAM/BED/GFF/VCF> -b <FILE1, FILE2, ..., FILEN>

オプション 説明
-wa, -wb 重複ごとに、Aの元のエントリ/ Bの元のエントリをそれぞれ書き込みます。
-loj 「左外部結合」を実行します。つまり、Aの各フィーチャについて、Bと重複しています。重複が見つからない場合は、BのNULLフィーチャをレポートします。
-wao 元のAエントリとBエントリに加えて、2つのフィーチャ間のオーバーラップのベースペアの数を書き込みます。オーバーラップのあるAフィーチャーのみが報告されます。-fおよび-rによって制限されます。
-u Only report each overlapping A feature once.
-c Aの各エントリについて、重複するBの特徴の数を報告します。
-v Bと重複しないAの特徴を報告します
共通 strandedness: -s, -S; overlap: -f, -F; overlap mode: -r, -e; bam/bed12: -abam, -split

window

区間を中心としたウィンドウ内で重なり合う区間を見つけます。 (Docs)

image.png

A           ┌────█████────┐
B         ▓▓▓▓    ▓▓▓        ▓▓▓  
A win B   ▓▓▓▓    ▓▓▓
bedtools window [オプション] [-a|-abam] -b <BED/GFF/VCF>
オプション 説明
-w, -l, -r 両方向、上流、下流のオーバーラップウィンドウのフランク長。
-sw ストランドに基づいて-lおよび-rを定義します。
-u Only report each overlapping A feature once.
-c Aの各エントリについて、重複するBの特徴の数を報告します。
-v Bと重複しないAの特徴のみ報告します
共通 strandedness: -sm, -Sm; bam: -abam

cluster

重なった、または近傍にある区間をまとめる(マージはしない)(Docs)

image.png

BED        ██­██     █­███­█  ██­█  
clustID   └─#1─┘   └────#2────┘
bedtools cluster [オプション] -i <BED/GFF/VCF>
オプション 説明
-d クラスタ内の特徴(feature)間の最大距離。
共通 strandedness: -s, -S

集計ツール

merge, groupby, map では、-c で指定されたカラム/列に以下の*集計関数(-oで指定)を適用することができます。

sum, count, count_distinct, min, max, mean, median, mode, antimode, stdev, sstdev, collapse, distinct, first, last

※その他の機能もあります。

merge

重なり合う/近接している区間を1つの区間に結合します。 (Docs)

image.png

IN       ▓▓▓      ▓        ▓▓··d··▓▓▓
      ▓▓▓▓         ▓▓        
OUT   ██████      ███      ██████████

$ bedtools merge [オプション] -i <BED/GFF/VCF/BAM>

オプション 説明
-s Require same strandedness.
-S Force merge for one specific strand only. Options: <+/->.
-d マージする特徴(feature)間の最大距離。
共通 aggregation: -o, -c;

map

重複する区間を列とみなして関数を適用します。(Docs)

image.png

        score = 3  1     5                 4      6
B              ▓▓▓ ▓   ▓▓▓▓▓             ▓▓▓▓▓▓ ▓▓▓▓
A               ██████████                 ███████
B map(mean) A   ██████████ mean(3,1,5)=5   ███████ mean(4,6)=5
bedtools map [オプション] -a <BED/GFF/VCF> -b <BED/GFF/VCF>
オプション 説明
共通 aggregation: -o, -c; strandedness: -s, -S; overlap: -f, -F; overlap mode: -r, -e; bed12: -split

groupby

列でグループ化し、他の列を要約します (~ SQL "groupBy"). (Docs)

bedtools groupby [オプション] -i <BED> -g <groupby columns> -c <op. column> -o <operation>
オプション 説明
common aggregation: -o, -c

ファイル形式

BED形式

定義
chrom Sc112.1 <ST­R> chromo­som­e/s­caffold の名前
start 2134 <IN­T> 特徴(feature)の開始位置
end 2565 <IN­T> 特徴(feature)の終了位置
name gene123 <ST­R> 特徴(feature)の名前
score 544 <NU­M> 特徴(feature)のスコア (ビットスコアなど)
strand + <+/­-/.> どちらの鎖に特徴(feature)が位置するか
thic­kSt­art 2235
thic­kEnd 2489
item­Rgb 255,0,0
bloc­kCo­unt 2 <IN­T> 特徴(feature)のブロックの数(Exonの数)
bloc­kSi­zes 150,80 <IN­T>,<IN­T>,... ブロックのサイズのリスト
bloc­kSt­arts 0,2333 <IN­T>,<IN­T>,... 特徴(feature)の開始位置を基準としたブロックの開始位置のリスト

こちらも参照 → BEDフォーマット macでインフォマティクス

GFF と BED のindexの違い

こちらも参照 → BEDファイルの座標の注意点

GFF    ┌─1   2   3─┐ 4   ...
         G---A---T   C   ...
BED    └─0   1   2 └─3   ...
. gff -> bed bed -> gff
new_start = gff_start - 1 bed_start + 1
new_end = gff_end bed_end

getfasta

区間を使用して、FASTAファイルからシーケンスを抽出します。(Docs)

image.png

FASTA  ­ ACT­GAT­CAT­GAT­ACA­TGA­TAC­CAT­TAG­GAT­ACAATA
BED         ██­██       █­███­█      ██­██
OUTFA­ ­ ­     AT­CA       TGA­TA      G­GAT­      
bedtools getfasta [オプション] -fi <input FASTA> -bed <BE­D/G­FF/­VCF­>
オプション 説明
-name FASTAヘッダーに、BEDファイルの「name」列を使用します。
-s マイナス鎖を逆補完する機能 デフォルト:ストランド情報は無視されます。
-split BED12入力が与えられた場合、BEDブロック(例:エクソン)からのシーケンスを連結します。

maskfasta

区間を使用して、FASTAファイルのシーケンスをマスクします。 (Docs)

image.png

FASTA­ ­ ­ ­ACT­GAT­CAT­GAT­ACA­TGA­TAC­CAT­TAG­GAT­ACAATA
BED           ██­██       █­███­█      ██­██
FASTA­'  AC­TGA­TNN­NNA­TAC­ATG­NNN­NNA­TTA­GGN­NNN­AATA
bedtools maskfasta [オプション] -fi <input FASTA> -bed <BE­D/G­FF/­VCF> -fo <output FASTA>
オプション 説明
-soft ソフトマスク (Nではなく小文字に変換する)
-mc マスキング文字を指定します。

sort

区間を並び替えます。 (Docs)

bedtools sort [オプション] -i <BED/GFF/VCF>
オプション 説明
-sizeA サイズ(asc:昇順)で並べ替えます。
-sizeD サイズ (desc:降順) で並び替えます。
-chrThenSizeA 染色体順 (asc:昇順 サイズ (asc:昇順)。
-chrThenSizeD 染色体順 (asc:昇順) サイズ (desc:降順)。
-chrThenScoreA 染色体順 (asc:昇順) スコア (asc:昇順)。
-chrThenScoreD 染色体順 (asc:昇順) スコア (desc:降順)。

統計

jaccard

ジャカード係数を計算します。(Docs)
Jaccard係数: X または Y に含まれている要素のうち X にも Y にも含まれている要素の割合

image.png

A                 ███████████  15bp
B               ▓▓▓▓ 10bp ▓▓ 4bp       ▓▓▓ 8bp
A int B           ▓▓ 6bp  ▓▓ 4bp
Jaccard(A,B)     (6+4)/((15+10+4+8)-(6+4)) =  0.37     
bedtools jaccard [オプション] -a <BED/GFF/VCF> -b <BED/GFF/VCF>
オプション 説明
共通 strandedness: -s, -S; overlap: -f, -F; overlap mode: -r, -e; bed12: -split

random

ランダムな区間を生成します。(Docs)

image.png

bedtools random [オプション] -g <GENOME>
オプション 説明
-l 生成する区間の長さ。デフォルト:100
-n 生成する区間の数。デフォルト:1,000,000
-seed 整数でシードを指定します。

reldist

2つのファイルの相対的な距離の分布を計算します。(Docs)

image.png

                ───────r──────
A            ▓▓▓▓▓▓         ▓▓▓▓
B                      ███
                ───d1─── ──d2──
reldist = min(d1,d2)/r
bedtools reldist [オプション] -a <BED/GFF/VCF> -b <BED/GFF/VCF>
オプション 説明
-detail 要約の代わりに、Aの各領域の相対距離を報告します。

shuffle

区間をランダムに再配置します。(Docs)

image.png

bedtools shuffle [オプション] -i <BED/GFF/VCF> -g <GENOME>
オプション 説明
-excl 特徴を配置してはならない座標のBEDファイル。
-incl 特徴を再配置する必要がある座標のBEDファイル。
-chrom 同じ染色体上に特徴(feature)を保持する。
-chromFirst ゲノム全体(デフォルト)からランダムに位置を選択する代わりに、最初にランダムに色を選択し、次にその色のランダムな開始座標を選択します。これにより、特徴が染色体サイズの関数として分布するのとは対照的に、特徴が染色体間で均一に分布します。
-noOverlapping 再配置された区間が重ならないようにする。

makewindows

Makes adjacent or sliding windows across a genome or BED file.

bedtools makewindows [オプション] [-g <GENOME>|-b <BED>] [-w <window size> | -n <n windows>]
オプション 説明
-s Number of bases to step before creating a new window. Default: equal to -w

Coverage

annotate

1つのBED / VCF / GFFファイルに、他の複数のBED / VCF / GFFファイルから観測されたカバレッジと重複の数を注釈します。 (Docs)

$ bedtools annotate -i variants.bed -files genes.bed conserve.bed known_var.bed
chr1  100 200 nasty 1 - 0.500000  1.000000  0.300000
chr2  500 1000  ugly  2 + 0.000000  0.600000  1.000000
bedtools annotate [オプション] -i <BED/GFF/VCF> -files FILE1 FILE2 FILE3 ... FILEn
オプション 説明
-counts -iと重複する各ファイルの特徴(feature)の数を報告します。デフォルトの動作では、各ファイルがカバーする-iの割合を報告します。
-both 各ファイルについてカウントと割合をレポートします。
共通 strandedness: -s, -S.

coverage

指定した区間のカバレッジの深さと幅の両方を計算します。 (Docs)

BED FILE A  ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓     ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓     ▓▓▓▓▓▓  
BED File B  ████ ████              ██             █████████
              ████████                                      
Result      [  N=3, 10/15 ]     [  N=1, 2/15  ]    [N=1,6/6]
bedtools coverage [オプション] -a <BAM/BED/GFF/VCF> -b <FILE1, FILE2, ..., FILEN>
オプション 説明
-d Aの特徴(feature)の各位置の深度を報告します。
共通 strandedness: -s, -S; overlap: -f, -F; overlap mode: -r, -e; bam/bed12: -split,-abam

その他のサブコマンド

  • expand
  • fisher
    • 2セットの間隔の間のオーバーラップの量が、それらのカバレッジとゲノムのサイズを考慮して、予想よりも多いかどうか
  • genomecov

    • image.png
  • igv

    • IGVスナップショットバッチスクリプトを作成します。
  • links

    • UCSCの場所へのリンクのHTMLページを作成します。
  • multiinter

  • overlap

    • 指定したフィーチャ間のオーバーラップの量
  • pairtobed

  • pairtopair

  • tag

おわりに

私の理解が浅いので、この記事はここまでです。バイオインフォでは、日本語訳の定番が決まっていない単語がたくさんあるような気がしています。英語は英語のママ理解すればいいじゃないかという人もいるかも知れませんが、日本語の情報が増えれば、私達もネイティブに考えやすくなると思います。もっとbedtoolsに対する理解が深まったら加筆・修正をかけたいと思います。

20
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
13