macでインフォマティクス

macでインフォマティクス

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

Nanoporeのロングリードのシミュレータ DeepSimulator

2019 4/17 誤字修正

 

 次世代シークエンシング(NGS)技術により、研究者はDNAおよびRNAをハイスループットでシーケンシングすることが可能になり、これはゲノミクス、トランスクリプトミクスおよびエピゲノミクスにおける多数の突破口を開いた(MacLean et al、2009; Metzker、2010;Shi et al、2016; Wu et al、2017)。市場で最も人気のあるNGSテクノロジにはIllumina、PacBio、Nanoporeがある。他のシークエンシング技術とは異なり、ナノポアは、コア成分がナノポアに埋め込まれた電圧バイアス膜を含むポアケミストリーであり、DNAまたはRNA分子が電圧によってポアを通過するように強制されたときに変化する。検出されたシグナルを、Nanopore用に特別に設計されたベースコールに入力すると、ヌクレオチド配列リードを得ることができる。基礎となる設計から恩恵を受け、ナノポアシークエンシングは、ロングリード(Byrne et al、2017)、point-of-care(Lu et al、2016)、およびPCRフリー(Simpsonら、2017)の利点を所有している。これらは、リピート領域のあるゲノムのde novoアセンブリまたはトランスクリプトームアセンブリ、フィールドリアルタイム分析およびダイレクトエピジェネティック検出をそれぞれ可能にする。

 ナノポアシークエンシングの急速な発展と共に、下流のデータ分析方法およびツールもまた急速に出現している。例えば、Graphmap(Sović et al、2016)(紹介)、Minimap2(Li、2017)(紹介)およびMashMap2(Jainら、2017)(MashMap紹介)は、Nanoporeデータをゲノムにマッピングするように設計された。 Canu(Koren et al、2017)(紹介)とRacon(Vaser et al、2017)(紹介)は、Nanoporeによって生成されたロングノイジーリードをまとめるために作成された。近い将来、さらに多くの方法やツールが開発されることが予想される。したがって、経験的(empirical)データ(すなわち実験的に得られたもの)またはシミュレートされたデータ(Escalona et al、2016)のいずれかを用いてこれらの新しい方法をベンチマークすることは非常に重要である。empiricalデータに対して最終的にこの方法を実行することが不可欠であるが、empiricalデータは、未知の根拠のある真実を伴って、取得するのが困難で高価なことがある。それどころか、シミュレートされたデータは低コストで容易に入手することができ、そしてその真実は完全に制御することができる。これらの機能により、シミュレートしたデータを新しい方法のベンチマークの基礎として使用できる。

 NGS技術のために20以上のシミュレータが存在するにもかかわらず(Escalona et al、2016)、Nanoporeシーケンス用に作成されたシミュレータは3つしかない。すなわちReadSim(Lee et al、2014)、SiLiCO(Baker et al、2016)(紹介) )およびNanoSim(Yang et al、2017)(紹介)である。 3つのシミュレータ(論文のセクションS1に示す)の間にはいくつかの違いがあるが、それらは入力ヌクレオチド配列と明示的プロファイル(ここでプロファイルは挿入や欠失などのパラメータのセットを指す)を利用してシミュレーションデータを生成するという同じ特性を共有する。たとえば、ReadSimは固定プロファイルを使用し、SiLiCOはユーザー提供のプロファイルを使用し、NanoSimはシミュレーション段階で使用されるプロファイルを学習するためにユーザー提供のempiricalデータを使用する。しかし、それらのシミュレータは、サンプル調製、電流信号収集、およびベースコールを含む複数の段階を含むナノポアシーケンス手順の複雑な性質を真に捉えていない(論文図1A)。さらに重要なことに、電気信号がナノポアシーケンシングの本質だが、電気信号生成ステップを模倣しようとするようなシミュレータはない。

 統計的観点からシミュレータを設計するという一般的に適応されたシナリオに従う代わりに、本著者らは異なる角度から問題に取り組み、ナノポアシーケンシングのためにより自然に設計された新しいシミュレータを提案する。シミュレータを実行するには、ユーザーは、カバレッジまたはリード数を指定して、リファレンスゲノムまたはアセンブリされたコンティグを入力するだけである。このシーケンスは最初に前処理段階を経て、入力カバレッジの要件と実際のNanoporリードのリード長の分布を満たす、いくつかの短いシーケンスが生成される。次に、それらのシーケンスは、ポアモデル成分とシグナル反復成分を含むシグナル生成モジュールを通過する。ナノポアモデルコンポーネントは、与えられたk-mer(kは通常5または6に等しく、ここでは一般性を失うことなく5-merを使用する)の予測電流信号をモデル化するために使用される。これらのシミュレートされた模擬電流信号は、強度と規模の両方で実際の信号と似ている。最後に、シミュレートされた信号は最終的にAlbacore(https://community.nanoporetech.com/protocols/albacore-offline-basecalli/v/abec_2003_v1_revad_29nov2016/linux)、すなわちオックスフォードナノポアテクノロジー(ONT)の公式ベースコーラーを通過してシミュレートされる。

 本シミュレータのコアコンポーネントが信号生成モジュールのポアモデルであることは明らかである。現在、既存のすべてのポアモデル(https://github.com/nanoporetech/kmer_models)はコンテキストに依存せず、ヌクレオチド配列上の位置に関係なく、予想される電流シグナルに対して5-merごとに固定値を割り当てる。このシミュレータをさらに磨くために、本著者らは、バイオインフォマティクスにおいて大きな可能性を示しているディープラーニングを利用して、新しいコンテキスト依存性のナノポアモデルを提案する(Dai et al、2017; Li et al、2018)。それにもかかわらず電気信号シグナルは通常のヌクレオチド配列よりも8〜10倍長いという事実のため、ディープラーニングモデルを訓練することは簡単ではない。この困難を克服するために、bi-directional long short-term memory(Bi-LSTM)(Graves and Schmidhuber、2005)とdeep canonical time warping (DCTW) (Trigeorgis et al., 2016) を組み合わせた、新規なディープラーニング戦略であるBiLSTM-extended Deep Canonical Time Warping(BDCTW)を提案する。

 上記のように、また図1Bに示されているように、このDeepSimulatorは2つの点で「深く」なっている。まず、結果をまねるだけのシミュレータではなく、処理パイプライン全体をシミュレートすることで、ナノポアシーケンスを深くまねている。次に、シーケンスを電気信号に変換するときに、ディープラーニング法を使用してコンテキスト依存のポアモデルを構築する。 Nanoporeの動作を模倣することにより、本シミュレータは完全なNanoporeシーケンスプロセスをシミュレートし、シミュレートされた電気信号と最終リードの両方を生成する。その上、公式のベースコーラーを使用して、本シミュレータはプロファイルのパラメータを学習する手順を排除するだけでなく、実際に暗黙のうちに実際のパラメータを展開する。さらに、シミュレーション手順を複数のモジュールに分割することによって、本シミュレータはより高い柔軟性を提供する。例えば、ユーザは、異なるベースコーラーを使用すること(Boža et al、2018; Teng et al、2018)を選択するか、または信号生成モジュール内のパラメータを調整して、異なる正確さで最終的なリードを得ることができる。

 

f:id:kazumaxneo:20190416193632p:plain

The Nanopore sequencing procedure.  左が実際のwetの流れで、右がDeepSimulatorの流れ。Githubより転載 

 

 

インストール

ubuntu16.04のMiniconda2.4.0.5環境でテストした。

依存

 Anaconda2 (https://www.anaconda.com/distribution/) or Minoconda2 (https://conda.io/miniconda.html). 

Github

git clone https://github.com/lykaust15/DeepSimulator.git
cd ./DeepSimulator/
./install

> ./deep_simulator.sh

# ./deep_simulator.sh 

DeepSimulator v0.21 [Mar-14-2019] 

    A Deep Learning based Nanopore simulator which can simulate the process of Nanopore sequencing. 

 

USAGE:  ./deep_simulator.sh <-i input_genome> [-n simu_read_num] [-o out_root] [-c CPU_num] [-m sample_mode] [-M simulator] 

                [-C cirular_genome] [-u tune_sampling] [-e event_std] [-f filter_freq] [-s noise_std] [-P perfect] [-H home] 

Options:

 

***** required arguments *****

-i input_genome   : input genome in FASTA format. 

 

***** optional arguments *****

-n simu_read_num  : the number of reads need to be simulated. [default = 100] 

                    Set -1 to simulate the whole input sequence without cut (not suitable for genome-level). 

 

-o out_root       : Default output would the current directory. [default = './${input_name}_DeepSimu'] 

 

-c CPU_num        : Number of processors. [default = 8]

 

-m sample_mode    : choose from the following distribution for the read length. [default = 3] 

                    1: beta_distribution, 2: alpha_distribution, 3: mixed_gamma_dis. 

 

-M simulator      : choose either context-dependent(0) or context-independent(1) simulator. [default = 1] 

 

-C cirular_genome : 0 for linear genome and 1 for circular genome. [default = 0] 

 

-u tune_sampling  : 1 for tuning sampling rate to around eight and 0 for not. [default = 1] 

 

-e event_std      : set the standard deviation (std) of the random noise of the event. [default = 1.0] 

 

-f filter_freq    : set the frequency for the low-pass filter. [default = 850] 

 

-s noise_std      : set the standard deviation (std) of the random noise of the signal. [default = 1.5] 

                    '1.0' would give the base-calling accuracy around 92\%, 

                    '1.5' would give the base-calling accuracy around 90\%, 

                    '2.0' would give the base-calling accuracy around 85\%, 

 

-P perfect        : 0 for normal mode (with length repeat and random noise). [default = 0]

                    1 for perfect context-dependent pore model (without length repeat and random noise). 

                    2 for generating almost perfect reads without any randomness in signals (equal to -e 0 -f 0 -s 0). 

 

-H home           : home directory of DeepSimulator. [default = 'current directory'] 

dockerイメージも置いておきます。

docker pull kazumax/deepsimulator

#カレントと/dataをシェアしてラン
docker run -itv $PWD:/data/ kazumax/deepsimulator
> source ~/.profile && cd ~/DeepSimulator/
> ./deep_simulator.sh #help

 

 テストラン

./deep_simulator.sh -i example/artificial_human_chr22.fasta

artificial_human_chr22_DeepSimu/ が出力される。

f:id:kazumaxneo:20190416231516j:plain

シミュレートされた信号、fast5、basecallingされたfastq、最後にminimap2で評価した精度に関するファイルが出力される。

 

実行方法

fastaを指定して実行する。

./deep_simulator.sh -i example/artificial_human_chr22.fasta

 

出力ディレクトリに生成されるファイルついてはGithubで出力の時系列順に説明されています。詳細はGithubで確認してください。

実行方法

以下のパラメータ設定で50000リード発生させる。

./deep_simulator.sh -i reference.fasta -o output \
-c 16 \
-m 3 \
-M 1 \
-C 1 \
-s 2\
-n 50000
  • -i      input genome in FASTA format.
  • -o     Default output would the current directory.

  • -c     Number of processors. [default = 8]

  • -M    choose either context-dependent(0) or context-independent(1) simulator. [default = 1]

  • -C    cirular_genome : 0 for linear genome and 1 for circular genome. [default = 0]

  • -n    the number of reads need to be simulated. [default = 100]
  • -s    noise_std : set the standard deviation (std) of the random noise of the signal. [default = 1.5]
    '1.0' would give the base-calling accuracy around 92\%,
    '1.5' would give the base-calling accuracy around 90\%,
    '2.0' would give the base-calling accuracy around 85\%,  

重たいので、CPUリソースはあるだけ指定した方が良い。

 

 

オーサーが学習させたケミストリと異なるケミストリをシミュレートさせたい場合、poreモデルもトレーニングもできますが、CPUのみだとかなりの時間を要します。 どうしても行いたい場合、Tensorflow GPU版と対応ライブラリを導入し、グラフィックカードを使って学習時間を短縮させることが推奨されています。

引用

DeepSimulator: a deep simulator for Nanopore sequencing
Yu Li, Renmin Han, Chongwei Bi, Mo Li, Sheng Wang, Xin Gao
Bioinformatics, Volume 34, Issue 17, 01 September 2018

 

論文のsupplementary(パラメータ) リンク

 

 

関連