メタゲノム解析の進歩により、環境から直接微生物群集を研究することが可能になった。メタゲノム解析は、微生物群集の種を特定するための重要なステップである。次世代シーケンサーのリードは、ショートリードの情報が限られているため、通常コンティグにアセンブルされる。第三世代シーケンサーでは、ショートリードからアセンブルしたコンティグに近い長さのリードを得ることができる。しかし、既存のコンティグビニングツールは、カバレッジ情報がないことや高いエラー率の存在により、ロングリードに直接適用することができない。既存のロングリードのビニングツールは、組成のみを使用するか、組成とカバレッジ情報を別々に使用するかのどちらかである。このため、存在量の少ない生物種に対応するビンを無視したり、coveragesが均一でない生物種に対応するビンを誤って分割してしまうことがある。本発表では、完全なロングリードのデータを使い、組成と被覆率を組み合わせた、参照不要のビン分割手法であるLRBinnerを紹介する。また、LRBinnerは距離ヒストグラムに基づくクラスタリングアルゴリズムを用いて、様々な大きさのクラスタを抽出することができる。
シミュレーションデータと実データを用いた実験の結果、LRBinnerは、サンプリングを行わない完全なデータセットを扱う場合、ほとんどのケースで最良のビニング精度を達成することが分かった。さらに、LRBinnerを用いたビニング処理により、ビニング処理に必要な計算量を削減し、十分なビン化品質を達成することができた。
LRBinnerは、メタゲノム解析におけるロングリードのビニングを支援するために、ディープラーニング技術を効果的な特徴量の集約に利用できることを示す。さらに、ロングリードの正確なビニングは、特に複雑なデータセットにおけるメタゲノム解析の改善をサポートする。また、ビニングはアセンブリに必要なリソースを削減することにも役立つ。LRBinnerのソースコードは、https://github.com/anuradhawick/LRBinner で自由に利用することができる。
Extended LRBinner(https://t.co/I1n3A2cbBq) to handle long reads assemblies with fewer contigs and higher N50. Needs performance tuning. Many updates and blogs to come. Ideas/code snippets from @viji112 and FaceNet paper. Feedback is ❤️#microbiome #metagenomics #MachineLearning
— Anuradha (@Anuradhawick) September 19, 2021
インストール
依存
LRBinner is coded purely using C++ (v9) and Python 3.7. To run LRBinner, you will need to install the following python and C++ modules.
Python dependencies
Essential libraries
- numpy 1.16.4
- scipy 1.3.0
- seaborn 0.9.0
- h5py 2.9.0
- tabulate 0.8.7
- pytorch 1.4.0
Essential for contig binning
- HDBSCAN
C++ requirements
mamba create -n lrbinner python=3.7 -y
conda activate lrbinner
mamba install -c conda-forge -c bioconda numpy scipy seaborn h5py tabulate pytorch hdbscan gcc openmp tqdm biopython fraggenescan hmmer
#pytorchははいらなかったのでpipで導入
pip install torch
git clone https://github.com/anuradhawick/LRBinner.git
cd LRBinner/
python setup.py build
> python LRBinner -h
$ python LRBinner -h
usage: LRBinner [-h] [--version] {reads,contigs} ...
LRBinner Help. A tool developed for binning of metagenomics long reads
(PacBio/ONT) and long read assemblies. Tool utilizes composition and coverage
profiles of reads based on k-mer frequencies to perform dimension reduction
via a deep variational auto-encoder. Dimension reduced reads are then
clustered. Minimum RAM requirement is 9GB (4GB GPU if cuda used).
optional arguments:
-h, --help show this help message and exit
--version, -v Show version.
LRBinner running Mode:
{reads,contigs}
reads for binning reads
contigs for binning contigs
> python LRBinner reads -h
usage: LRBinner reads [-h] --reads-path READS_PATH [--k-size {3,4,5}]
[--bin-size BIN_SIZE] [--bin-count BIN_COUNT]
[--ae-epochs AE_EPOCHS] [--ae-dims AE_DIMS]
[--ae-hidden AE_HIDDEN] [--threads THREADS] [--separate]
[--cuda] [--resume] --output <DEST>
[--min-bin-size MIN_BIN_SIZE]
[--bin-iterations BIN_ITERATIONS]
optional arguments:
-h, --help show this help message and exit
--reads-path READS_PATH, -r READS_PATH
Reads path for binning
--k-size {3,4,5}, -k {3,4,5}
k value for k-mer frequency vector. Choose between 3
and 5.
--bin-size BIN_SIZE, -bs BIN_SIZE
Bin size for the coverage histogram.
--bin-count BIN_COUNT, -bc BIN_COUNT
Number of bins for the coverage histogram.
--ae-epochs AE_EPOCHS
Epochs for the auto_encoder.
--ae-dims AE_DIMS Size of the latent dimension.
--ae-hidden AE_HIDDEN
Hidden layer sizes eg: 128,128
--threads THREADS, -t THREADS
Thread count for computations
--separate, -sep Flag to separate reads/contigs into bins detected.
Avaialbe in folder named 'binned'.
--cuda Whether to use CUDA if available.
--resume Continue from the last step or the binning step (which
ever comes first). Can save time needed count k-mers.
--output <DEST>, -o <DEST>
Output directory
--min-bin-size MIN_BIN_SIZE, -mbs MIN_BIN_SIZE
The minimum number of reads a bin should have.
--bin-iterations BIN_ITERATIONS, -bit BIN_ITERATIONS
Number of iterations for cluster search. Use 0 for
exhaustive search.
> python LRBinner contigs -h
usage: LRBinner contigs [-h] --reads-path READS_PATH [--k-size {3,4,5}]
[--bin-size BIN_SIZE] [--bin-count BIN_COUNT]
[--ae-epochs AE_EPOCHS] [--ae-dims AE_DIMS]
[--ae-hidden AE_HIDDEN] [--threads THREADS]
[--separate] [--cuda] [--resume] --output <DEST>
--contigs CONTIGS
optional arguments:
-h, --help show this help message and exit
--reads-path READS_PATH, -r READS_PATH
Reads path for binning
--k-size {3,4,5}, -k {3,4,5}
k value for k-mer frequency vector. Choose between 3
and 5.
--bin-size BIN_SIZE, -bs BIN_SIZE
Bin size for the coverage histogram.
--bin-count BIN_COUNT, -bc BIN_COUNT
Number of bins for the coverage histogram.
--ae-epochs AE_EPOCHS
Epochs for the auto_encoder.
--ae-dims AE_DIMS Size of the latent dimension.
--ae-hidden AE_HIDDEN
Hidden layer sizes eg: 128,128
--threads THREADS, -t THREADS
Thread count for computations
--separate, -sep Flag to separate reads/contigs into bins detected.
Avaialbe in folder named 'binned'.
--cuda Whether to use CUDA if available.
--resume Continue from the last step or the binning step (which
ever comes first). Can save time needed count k-mers.
--output <DEST>, -o <DEST>
Output directory
--contigs CONTIGS, -c CONTIGS
Contigs path
実行方法
ロングリードを直接binningするモード(reads )とcontigをbinningするモード(contigs)
がある。
1、LRBinnerの実行
レポジトリからリンクされる形でテストデータが公開されている。平均8500-bp、最小5000、最長37000-bpのシークエンシングリードのfastaファイルとなっている。
python LRBinner reads -r reads.fasta -bc 10 -bs 32 -o outdir --resume --cuda -mbs 5000 --ae-dims 4 --ae-epochs 200 -bit 0 -t 32
生のfastqには対応しているがgzipされたfasta/fastq配列には対応してない。
リードを提供した場合、各配列がどのbinに属するかの番号が出力ディレクトリ内に書き出される。
2、bin配列にリードを分類する。出力ディレクトリにあるPKLファイルと1で使ったリードファイルを指定する。
python separate_reads.py --reads reads.fasta -b outdir/binning_result.pkl -o bin
出力例
bin/
bin-1/
リードは重複しているので、このあと単離されたゲノムのアセンブラか、まだ汚染があるならメタゲノムアセンブラで個別にDe novoアセンブルする(*1)。
試した限り、k-mer frequency(3,4,5)の値で結果は変化することが多いです。issuesではパラメータについても議論されています。興味がある方は確認してみてください。
引用
Binning long reads in metagenomics datasets using composition and coverage information
Anuradha Wickramarachchi & Yu Lin
Algorithms for Molecular Biology volume 17, Article number: 14 (2022)
関連
*1
ループで回す。
cd bin_dir/
#forでループ(ONTのリードの例)
mkdir fasta
for file in `\find bin-* -maxdepth 0 -type d`; do
echo $file/reads.fasta
flye --nano-raw $file/reads.fasta --threads 16 -o $file/flye
cp $file/flye/assembly.fasta fasta/${file%/}.fasta
done
#リソースに余裕があればGNU parallelで10並列計算(ONTのリードの例)
ls -d bin* | parallel -j 10 --dry-run 'flye --nano-raw {}reads.fasta
--threads 4 -o {}flye'
#fasta/に配置
mkdir fasta
for file in `\find bin-* -maxdepth 0 -type d`; do
cp $file/flye/assembly.fasta fasta/${file%/}.fasta
done