macでインフォマティクス

macでインフォマティクス

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

メタゲノムデータの高速なtaxonomy assignmentを行う kraken

2018 10/6 タイトル修正 

2018 11/17 簡単なテスト追加

2019 4/12 dockerリンク追加

 

krakenは2014年に発表されたメタゲノムデータの分類手法。fastqまたはfastaの入力からk-merの配列に分解し、構築したデータベースにアライメントを行う。BLASTと同等の精度を保ちながら、megablastより最大909倍高速と主張されている。似たツールにメタゲノムデータからtaxonomy情報を得るMetaPhlAnがあるが、MetaPhlAnと比較してもkrakenは最大11倍高速とされる。

 

公式ページ

https://ccb.jhu.edu/software/kraken/

 マニュアル

http://ccb.jhu.edu/software/kraken/MANUAL.html

 

インストール

cent OSに導入した。

ランにはJellyfishのver.1が必要。公式サイトからダウンロードしてビルドする。

wget http://www.cbcb.umd.edu/software/jellyfish/jellyfish-1.1.11.tar.gz
tar zxvf jellyfish-1.1.11.tar.gz
cd jellyfish-1.1.11/
./configure
make
sudo make install

bin/jellyfishにパスを通しておく。

 

kraken本体はbrewで導入できる。

brew install kraken

または

git clone  https://github.com/DerrickWood/kraken.git
cd kraken/
./install_kraken.sh $KRAKEN_DIR #インストールディレクトリを指定

Anacondaを使っているならcondaで導入する。

#v1.1
conda install -c bioconda -y kraken==1.1

#v2 beta
conda install -c bioconda -y kraken==2.0.7_beta

 

 

NCBI refseqのURLが変更されているので、wgetで配列をダウンロードできなくなっている (2017年夏テスト時)。スクリプトを別途ダウンロードして修正する。

wget https://github.com/DerrickWood/kraken/blob/master/scripts/download_genomic_library.sh

download_genomic_library.shを開き、 43行目を以下のように変更。

wget $FTP_SERVER/genomes/archive/old_refseq/Bacteria/all.fna.tar.gz

さらに59行目を以下のように変更。

wget $FTP_SERVER/genomes/archive/old_refseq/Plasmids/plasmids.all.fna.tar.gz

 

brewでインストールしたkaken-buildを開き、

vi /usr/local/bin/kraken-build #viで開く。

262行目を修正したdownload_genomic_library.shのパスに変更する。ここでは以下のように修正した。

exec "/Volumes/3TB3/kraken_database/download_genomic_library.sh", $type;

保存して閉じる。

 

追記

dockerイメージ

https://hub.docker.com/r/staphb/kraken/

 

ラン

 データベースの準備(初回だけ)

 ↓

ラン

 ↓

集計

という三段階の流れで進める。

 

--データベースの準備--

データベースのダウンロード。ここではdatabaseというディレクトリ名にした。

kraken-build --standard --db database

 database/にRefseqの全データとtaxonomy情報がダウンロードされる。

 

データベースのビルド。時間がかかるので、コア数があるだけ指定する。

kraken-build --standard --threads 22 --db database

環境によってはかなりの時間がかかる。

容量を確認。

user]$ du -sh database/

161G database/

2017年8月実行時のdatabase容量は161GBだった。

準備ができたらランする。

 

--taxonomyラベリングを行う--

入力のデフォルトはfastaだが、--fastq-inputのフラグをつけることでfastqにも対応している。また--gzip-compressed--bzip2-compressedをつけることで、gzipやbzip2の入力も可能である。

 fastaを指定してラン。

kraken --preload --threads 20 --fastq-input --db database input.fa > output
  • --db Name for Kraken DB (default: none)
  • --threads Number of threads (default: 1)
  • --fasta-input Input is FASTA format
  • --preload Loads DB into memory before classification

 --preloadをつけることで、データベースがRAMディスクに読み込まれ高速化する。databaseは自分がつけたデータベースディレクトリ名。

  

ペアードエンドfastqを指定してラン。

kraken --preload --threads 20 --fastq-input --paired --check-names --db database R1.fq R2.fq > output
  • --fastq-input Input is FASTQ format 
  • --paired The two filenames provided are paired-end reads
  • --check-names Ensure each pair of reads have names that agree with each other; ignored if --paired is not specified
  • --gzip-compressed Input is gzip compressed
  • --bzip2-compressed Input is bzip2 compressed
  • --quick Quick operation (use first hit or hits)

krakenはペアリードをマージして1つにしてからk-merベースの探索を行う(NNNでつなぐ)。探索時、ATGC以外があるk-mer配列は除外される。そのためペアリードを入力に使うことで、シングルリードよりおよそ3%精度が上がるとされる。

  

出力は以下のようになる。

bin]$ head output

C M02077:58:000000000-APPA6:1:1101:15651:1463 1148 603 0:1 1148:16 0:31 1148:83 0:140 A:31 0:16 A:31 1148:4 0:220

C M02077:58:000000000-APPA6:1:1101:17046:1522 1148 601 0:1 1148:11 0:31 1148:61 0:31 1148:82 0:54 A:31 1148:11 0:5 A:31 1148:5 0:217

C M02077:58:000000000-APPA6:1:1101:15487:1536 1148 603 1148:14 0:72 1148:22 0:163 A:31 0:16 A:31 0:224

C M02077:58:000000000-APPA6:1:1101:17442:1545 1148 603 0:1 1148:113 0:31 1148:44 0:31 1148:16 0:35 A:31 1148:16 A:31 1148:36 0:188

C M02077:58:000000000-APPA6:1:1101:22458:1603 1148 601 0:16 1148:16 0:44 1148:14 0:181 A:31 0:1 1148:7 0:8 A:31 0:222

C M02077:58:000000000-APPA6:1:1101:19281:1604 1148 602 0:1 1148:64 0:31 1148:24 0:31 1148:28 0:31 1148:10 0:50 A:31 1148:16 A:31 1148:31 0:193

C M02077:58:000000000-APPA6:1:1101:23186:1616 1148 601 0:1 1148:168 0:31 1148:5 0:66 A:31 1148:16 A:31 0:5 1148:21 0:196

C M02077:58:000000000-APPA6:1:1101:18130:1621 1148 603 1148:213 0:58 A:31 1148:16 A:31 1148:81 0:31 1148:31 0:81

C M02077:58:000000000-APPA6:1:1101:9815:1622 1148 599 1148:208 0:62 A:31 1148:16 A:31 1148:46 0:175

C M02077:58:000000000-APPA6:1:1101:21784:1636 1148 602 0:1 1148:130 0:31 1148:83 0:26 A:31 1148:16 A:31 1148:33 0:190

1列目 C or Uは、分類されたか(C)、されなかった(U)かを表す。

2列目 シーケンスID(インプットのヘッダー名)

3列目 taxonomy ID(wiki

4列目 リードサイズ

5列目 ↓のマニュアルの説明参照。

 

  1. A space-delimited list indicating the LCA mapping of each k-mer in the sequence. For example, "562:13 561:4 A:31 0:1 562:3" would indicate that:
    • the first 13 k-mers mapped to taxonomy ID #562
    • the next 4 k-mers mapped to taxonomy ID #561
    • the next 31 k-mers contained an ambiguous nucleotide
    • the next k-mer was not in the database
    • the last 3 k-mers mapped to taxonomy ID #562

 

 --taxonomy nameに変換--

taxonomy IDからtaxonomy nameに変えるコマンドが用意されている。以下のように打つ。

kraken-translate --db database output > sequences.labels

出力

f:id:kazumaxneo:20170830114628j:plain

入力が純粋培養のバクテリアのデータなので、同じ生き物ばかり表示されている。

 

--mpa-formatをつけると、superkingdom, kingdom, phylum, class, order, family, genus, speciesだけの表記になる。

kraken-translate --mpa-format --db database output > sequences.labels

f:id:kazumaxneo:20170830115002j:plain

 

  --集計--

集計レポートを作る。

kraken-report --db database output > summary

 出力を確認。

head -20 summary 

  0.71 2036 2036 U 0 unclassified

 99.29 285920 3 - 1 root

 99.29 285916 1 - 131567   cellular organisms

 99.29 285915 65 D 2     Bacteria

 98.87 284692 36 - 1783272       Terrabacteria group

 98.55 283771 0 - 1798711         Cyanobacteria/Melainabacteria group

 98.55 283771 3 P 1117           Cyanobacteria

 98.54 283759 2 O 1890424             Synechococcales

 98.54 283753 0 F 1890428               Merismopediaceae

 98.54 283753 0 G 1142                 Synechocystis

 98.54 283753 283695 S 1148                   Synechocystis sp. PCC 6803

  0.02 57 57 - 1080228                     Synechocystis sp. PCC 6803 substr. GT-I

  0.00 1 1 - 1080229                     Synechocystis sp. PCC 6803 substr. PCC-N

  0.00 3 0 F 1890436               Pseudanabaenaceae

  0.00 3 0 G 1152                 Pseudanabaena

  0.00 3 3 S 82654                   Pseudanabaena sp. PCC 7367

  0.00 1 0 F 1890426               Synechococcaceae

  0.00 1 0 G 1129                 Synechococcus

  0.00 1 1 S 110662                   Synechococcus sp. CC9605

  0.00 7 1 - 1301283             Oscillatoriophycideae

1列目 そのcladeがカバーされたリードの割合(全体に対するパーセンテージ)

2列目 そのcladeがカバーされたリード数

3列目 そのtaxonに直接アサインされたリード数

4列目 rank code(↓の説明参照)

5列目 NCBI taxonomy ID

6列目 scientific name

  1. A rank code, indicating (U)nclassified, (D)omain, (K)ingdom, (P)hylum, (C)lass, (O)rder, (F)amily, (G)enus, or (S)pecies. All other ranks are simply '-'.

 

 

MetaPhlAnのようなタブ仕分けのファイルを出力させるコマンドも用意されている。

kraken-mpa-report --db database output > summary_tab 

bin]$ head -10 summary_tab 

d__Viruses 1

d__Bacteria 285915

d__Bacteria|p__Proteobacteria 419

d__Bacteria|p__Fusobacteria 5

d__Bacteria|p__Deferribacteres 2

d__Bacteria|p__Spirochaetes 7

d__Bacteria|p__Synergistetes 1

d__Bacteria|p__Bacteroidetes 724

d__Bacteria|p__Firmicutes 625

d__Bacteria|p__Deinococcus-Thermus 1

 

 

手持ちのfastaを追加して、カスタムデータベースを作ることもできる。作り方は公式マニュアルを参照。カスタムデータベース作成の流れが丁寧に説明されてます。

 

 

 

テスト

SRAの湖水からのメタゲノムデータでテストしてみた。15 GB x 2のデータをthread40でテストしたところ30分ほどかかった。kraken-reportの出力の先頭を貼っておく。

bin]$ head -30 summary2

 74.03 29617719 29617719 U 0 unclassified

 25.97 10391739 6719 - 1 root

 25.91 10364486 1126 - 131567   cellular organisms

 25.90 10361130 51629 D 2     Bacteria

 25.37 10150686 3934 - 1783272       Terrabacteria group

 25.22 10090850 0 - 1798711         Cyanobacteria/Melainabacteria group

 25.22 10090850 129569 P 1117           Cyanobacteria

 22.78 9114469 8754 - 1301283             Oscillatoriophycideae

 22.59 9036657 21480 O 1150               Oscillatoriales

 21.70 8681472 0 F 1892254                 Oscillatoriaceae

 21.70 8681472 934 G 1158                   Oscillatoria

 21.59 8639339 0 S 482564                     Oscillatoria nigro-viridis

 21.59 8639339 8639339 - 179408                       Oscillatoria nigro-viridis PCC 7112

  0.10 41199 0 S 118323                     Oscillatoria acuminata

  0.10 41199 41199 - 56110                       Oscillatoria acuminata PCC 6304

  0.39 155174 0 F 1892249                 Cyanothecaceae

  0.39 155174 23122 G 43988                   Cyanothece

  0.15 59279 59279 S 497965                     Cyanothece sp. PCC 7822

  0.12 46609 46609 S 65393                     Cyanothece sp. PCC 7424

  0.03 12335 12335 S 43989                     Cyanothece sp. ATCC 51142

  0.01 5589 5589 S 395962                     Cyanothece sp. PCC 8802

  0.01 4347 4347 S 395961                     Cyanothece sp. PCC 7425

  0.01 3893 3893 S 41431                     Cyanothece sp. PCC 8801

  0.29 114192 578 F 1892252                 Microcoleaceae

  0.13 53893 0 G 35823                   Arthrospira

  0.13 53893 0 S 118562                     Arthrospira platensis

  0.13 53893 53893 - 696747                       Arthrospira platensis NIES-39

  0.09 36770 0 G 44471                   Microcoleus

  0.09 36770 36770 S 1173027                     Microcoleus sp. PCC 7113

  0.06 22951 0 G 1205                   Trichodesmium

unclassifiedが74%あったが、淡水性のシアノバクテリアなどが様々hitしている。

 

 追記

こちらも参考にしてください。

追記

Visualization tool

 

追記

簡単なテスト

in silico mock metagenome cummunityのデータを作成し、テストしてみた。以下の比率で10のゲノムを混ぜ込む。

f:id:kazumaxneo:20181120110800j:plain

Kronaで可視化

f:id:kazumaxneo:20181120110927j:plain

2%ほどしか混ぜ込んでいないRickettsia canadensisも検出できている(*1)。どの種の定量結果も、妥当な数値が出ている。

引用

Kraken: ultrafast metagenomic sequence classification using exact alignments

Derrick E WoodEmail author and Steven L Salzberg

Genome Biology 2014 15:R46

 

ダウンロード時のエラーについて。

https://github.com/DerrickWood/kraken/issues/40

 

*1

リード数は50万x2。ファイルサイズは313MBx2と、メタゲノムにしては非常に少ない。

 

関連