macでインフォマティクス

macでインフォマティクス

HTS (NGS) 関連のインフォマティクス情報についてまとめています。

ニューラルネットワークを使ってONTのロングリードの低クオリティ領域を除く MiniScrub

 

 Pacific Biosciences [ref.1]やOxford Nanopore [ref.2]のような企業のシーケンシング技術がゲノムアセンブリ[ref.1]、[ref.10]、抗菌剤耐性遺伝子[ref.18]、個人用トランスクリプトームシーケンシング[ref.19]、およびドラフトゲノム[ref.20]の改善に寄与している。長いリピートのセクションはアセンブリ品質に最も影響を与える重要な要素の1つであることが示されている[ref.12]、[ref.13]。ロングリードシーケンシングはこれらの長いリピートをより多くresolutionすることが可能である。理論的分析から、リード長を100bpから1000bpに増やすと、アセンブリアルゴリズムで使用されるde Bruijn graphが大幅に簡略化され、N50サイズを6倍に増やすことができることが示されている[ref.12]。
 しかし、現在の一分子ロングシーケンシングリードは非常に高いエラー率を持ち、1リードあたり5%から40%[ref.10]、平均で約10%から20%[ref.1、9]から最大30-40%[ref.10, 21]までの範囲である(シーケンステクノロジの種類やバージョン、実行されている実験などの変数によって異なる)。これらの高いエラー率は、アセンブリおよび他のアプリケーションを非効率的にするか、またはエラーを起こしやすくするので[ref.10、9、21、2]、ロングシーケンスを十分に実現できるように、この問題に対処する方法を開発することが重要である。現在の多くの解決策は、低エラーのショートリードを使用して追加のシーケンスランを実行し、それらをロングリードにアラインメントした後、コンセンサスアプローチにより正しいシーケンスを作成する「ハイブリッドエラーコレクション」[ref.9–11]である。これらの成功にもかかわらず[ref.9] - [ref.11]、多くの場合異なる技術を用いた追加のシーケンスランの必要性は追加の金銭的および時間的負担を強いる[ref.22]。別のアプローチは、リードの正しい塩基をコールためにシーケンシングマシンによって出力された生のシグナルを再分析することを含む[ref.23、24]が、研究者はこの生のシグナルデータを入手できないかもしれない。そのため、一般的には適用できず、すぐに古くなる可能性がある[ref.25]。
 したがって、リード以外のいかなる情報にも依存せず、多くの技術にわたって一般的に適用可能である、ロングシーケンシングリードを改善する完全に新規な方法が存在することが望ましい。 Gene Myersら [ref.7][ref.10]は、ロングリードのエラーが特定の低品質の「ジャンク」セグメントに局所的にクラスタ化する傾向があることを観察した。最近の研究は、デノボリードエラー訂正関連問題を扱っている[ref.28、29]。しかし、最善の方法でもまだかなりの数のミスアセンブリが発生するため、アセンブリ結果をさらに改善するには独立した方法が必要であることが示唆される。
 ここでは、de novo long Nanopore read scrubbingを行うMiniScrubについて説明する。 MiniScrubは、リード間マッピングを実行してアライメントを取得し、それらをイメージに変換してから、機械学習を行ってスクラブする低品質なリードセグメントを識別する。このプロセスに内在するいくつかの課題を克服した。まず、read-to-readアラインメントは、BWAやBowtieなどの従来のアラインメントツールが効率的に処理するように構築されていないという二次問題を持つ[ref.8]。第二に、一部のロングリードシーケンサーでは、支配的なタイプのエラーが(潜在的に大きい)indels [ref.2]であるため、正確なアラインメントを達成するのは困難である。MiniMap[ref.4]と呼ばれる最近の方法は、「minimizers」と呼ばれる多数のco-linearな k-merを共有するリードペアを識別することによっておおよそのread-to-readアラインメントを実行し、これらの問題の両方に対処する[ref.3、4]。これは厳密なマッピングという困難な問題を回避し、BWAよりも50倍以上速く実行され、read-to-readマッピングを扱いやすくする[ref.4]。最後に、これらのリードアラインメントは近似的であり、リード間で一致したk-merのサブセットしかわからないことを意味しているため、困難なパターン認識問題に直面している。つまり、あるクエリのリード領域内のk-merが他のリードでサポートされる必要があるかどうか、およびそのクエリリードのその領域が高品質と見なされるためには他のリード数によってサポートされる必要がある。
 最近の機械学習パラダイムであるディープラーニングを使用して、この課題に対処した[ref.26]。ディープラーニングは、近年、生物科学内の問題にますます適用されている。最近の注目すべき例はDeepVariantで、これはConvolutional Neural Networks [ref.5]と呼ばれるディープラーニング方法を使用して、バリアントコーリングの競合とベンチマークで優れた結果を達成した。 MiniScrubでは、画像のカラーピクセルエンコードされたミニマイザーのマッチング、クオリティスコア、およびminimizers間の距離などの情報を使用して、リードマッピングを「パイルアップ」画像にエンコードする新しい方法を開発した。これらの画像は、局所パターンを検出するように最適化されている畳み込みニューラルネットワーク(CNN)への入力として使用された。(以下略)

 

f:id:kazumaxneo:20190726233115p:plain

Overview of MiniScrub. Preprintより転載

 


インストール

dockerイメージを使用してテストした。

本体 Bitbucket

ここではオーサーらにより用意されているdockerイメージを使う。

#CPU版
docker pull nlapier2/miniscrub-cpu
docker run --rm -it -v $PWD:/app/workdir/ nlapier2/miniscrub-cpu

#GPU版dockerイメージも用意されています。Bitbucketで確認して下さい。

> python3 jgi-miniscrub/miniscrub.py -h

# python3 jgi-miniscrub/miniscrub.py -h

usage: miniscrub.py [-h] [--compression {none,gzip}] [--cutoff CUTOFF]

                    [--debug DEBUG] [--input INPUT] [--labels LABELS]

                    [--limit_length LIMIT_LENGTH] [--limit_fastq LIMIT_FASTQ]

                    [--limit_paf LIMIT_PAF] [--load LOAD] [--mask]

                    [--min_length MIN_LENGTH] [--mode {minimizers,whole}]

                    [--noscrub] [--output OUTPUT] [--paf PAF]

                    [--pileup {generate,load}] [--processes PROCESSES]

                    [--segment_size SEGMENT_SIZE] [--verbose]

                    [--window_size WINDOW_SIZE]

                    reads

 

Use saved keras model to scrub reads.

 

positional arguments:

  reads                 Path to reads file. Required.

 

optional arguments:

  -h, --help            show this help message and exit

  --compression {none,gzip}

                        Compression of reads file ("none" or "gzip").

  --cutoff CUTOFF       Scrub read segments below this percent identity.

  --debug DEBUG         Number of images to use in debug mode. If <= 0, non-

                        debug mode (default).

  --input INPUT         Directory with png pileup images if --pileup=load.

                        Default: current directory.

  --labels LABELS       Path to image labels file. If provided, will NOT trim.

                        Labels must correspond with segment_size.

  --limit_length LIMIT_LENGTH

                        Optionally do not include reads above a certain

                        length.

  --limit_fastq LIMIT_FASTQ

                        Optionally limit the number of reads to process from

                        --reads.

  --limit_paf LIMIT_PAF

                        Optionally limit the number of reads from paf file (if

                        --paf is used).

  --load LOAD           Path to keras model file to load. Default is included

                        pretrained model.

  --mask                Mask bad sections with Ns instead of removing.

  --min_length MIN_LENGTH

                        Minimum length of reads to keep. Default: 500.

  --mode {minimizers,whole}

                        Whether pileups are minimizers-only or whole reads.

  --noscrub             Do not scrub (output statsitics instead).

  --output OUTPUT       File to write scrubbed reads to.

  --paf PAF             Path to paf file; minimap2 will be run if not

                        specified.

  --pileup {generate,load}

                        Whether pileups should be generated or read from files

                        created by pileup.py.

  --processes PROCESSES

                        Number of processes to use for multiprocessing.

                        Default: 16.

  --segment_size SEGMENT_SIZE

                        Neural net segment size to predict. Keep as default

                        unless network retrained.

  --verbose             Verbose output option.

  --window_size WINDOW_SIZE

                        Neural net window size to predict. Keep as default

                        unless network retrained.

root@4567716961b9:/app# 

 

 

 

実行方法

立ち上げる。かなり重いので、できる限りGPU版を使うことが推奨されているが、ここではCPU版イメージを使う。

#fastqのあるディレクトリに移動する
cd /path/to/fastq
#ホストのカレントとイメージの/app/workdir/ディレクトリを共有してrunする
docker run --rm -it -v $PWD:/app/workdir/ nlapier2/miniscrub-cpu

 

 fastqを指定する。

python3 jgi-miniscrub/miniscrub.py workdir/my-reads.fastq

scrubbed_reads.fastqが出力される。

低クオリティ領域をフィルタリングしてスプリットしたリードを出力するので、トータルサイズは減るがリード数は増えることに注意して下さい。

 

アセンブリのパフォーマンスもかなり改善されます。アセンブリパフォーマンスへの影響はプレプリントの表を確認して下さい。

引用

MiniScrub: de novo long read scrubbing using approximate alignment and deep learning
Nathan LaPierre, Rob Egan, Wei Wang, Zhong Wang

bioRxiv preprint first posted online Oct. 3, 2018

 

関連