🎃

Kaijuによる生物種推定

に公開

はじめに

kaijuを使ってみた。という記事になります。発表から9年ほど経ってますが、主要なメタゲノムの系統分類ツールとして良い成績を残しています。

https://x.com/edna_startup/status/1735702385941491882?s=46&t=imBRYDNw0A8itCYUTXn4TA

Kaijuはメタゲノムシーケンシングやメタトランスクリプトミクスのリードを高速かつ高感度に系統分類できるツールです。

系統名はNCBIの分類法を採用しています。また、kaijuは他のツールと異なり、参照データベースにBurrows-Wheeler変換したタンパク質データベースを使用するため、データベースの充実していない系統にも柔軟に対応可能だそうです。

BWTの分かりやすい解説動画↓

https://youtu.be/Lc-ACiJIrnM?si=i-XYf-747P3zRn_i

Kaijuに関するより詳細な情報は原著論文を読んでみて下さい。

https://www.nature.com/articles/ncomms11257

Miniforge3によるKaiju実行環境の作成

カレントディレクトリにminiforge3のインストーラーをダウンロードします。その後、インストーラーを実行してminiforge3をインストールします。既にconda環境がある場合でも問題ないです。

miniforge3のインストール
wget "https://github.com/conda-forge/miniforge/releases/download/25.3.1-0/Miniforge3-25.3.1-0-Linux-x86_64.sh"
bash Miniforge3-25.3.1-0-Linux-x86_64.sh -b -p $PWD/miniforge3

導入したminiforge3のデフォルト環境にactivateしてから、Kaiju用の仮想環境を作成します。

condaのactivate
source ${PWD}/miniforge3/etc/profile.d/conda.sh
conda activate
conda install -n base -c conda-forge mamba
mamba info -e

* マークが指定したパスのbase環境を指していればOKです。

Kaijuのインストール

同じ仮想環境にKaijuをインストールします。KaijuはBioinformatics CentreのGitHubリポジトリから入手できます。

https://github.com/bioinformatics-centre/kaiju

kaijuのインストール
# 必要なツールもインストール
mamba install -c bioconda -c conda-forge kaiju
USAGE
Kaiju 1.10.0
Copyright 2015-2023 Peter Menzel, Anders Krogh
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

Usage:
   kaiju -t nodes.dmp -f kaiju_db.fmi -i reads.fastq [-j reads2.fastq]

Mandatory arguments:
   -t FILENAME   Name of nodes.dmp file
   -f FILENAME   Name of database (.fmi) file
   -i FILENAME   Name of input file containing reads in FASTA or FASTQ format

Optional arguments:
   -j FILENAME   Name of second input file for paired-end reads
   -o FILENAME   Name of output file. If not specified, output will be printed to STDOUT
   -z INT        Number of parallel threads for classification (default: 1)
   -a STRING     Run mode, either "mem"  or "greedy" (default: greedy)
   -e INT        Number of mismatches allowed in Greedy mode (default: 3)
   -m INT        Minimum match length (default: 11)
   -s INT        Minimum match score in Greedy mode (default: 65)
   -E FLOAT      Minimum E-value in Greedy mode (default: 0.01)
   -x            Enable SEG low complexity filter (enabled by default)
   -X            Disable SEG low complexity filter
   -p            Input sequences are protein sequences
   -v            Enable verbose output

Kaijuのサブコマンド

  • kaiju-addTaxonNames
  • kaiju-gbk2faa.pl
  • kaiju-mkfmi
  • kaiju-convertNR
  • kaiju-makedb
  • kaiju-multi
  • kaiju-convertRefSeq
  • kaiju-mergeOutputs
  • kaiju-mkbwt

サブコマンドに使用される主なファイル

  • kaiju-taxonlistEuk.tsv
  • kaiju-excluded-accessions.txt

その他、使用するツールをインストールします。

必要なツールのインストール
mamba install -c conda-forge -c bioconda fastp aria2 hostile seqkit krona

データベース作成

Kaijuはタンパク質配列のデータベースを使用して系統推定を行います。DBのボリュームや対象生物種によっていくつか種類があります。nrのサブセットデータベースであるnr_eukを使用します。

データベース名 説明
nr NCBI BLAST 非冗長タンパク質データベース「nr」、対象は古細菌 (Archaea) 、細菌 (bacteria) 、ウイルスのみ
nr_euk 上記 nr に加えて、真菌 (fungi) および微生物性真核生物 (microbial eukaryotes) を含む
fungi NCBI RefSeq に収録されている全ての真菌ゲノム (アセンブリステータスは問わない)
viruses NCBI RefSeq に収録されているウイルスゲノム
plasmids NCBI RefSeq に収録されているプラスミドゲノム
rvdb RVDB-prot 由来のウイルスタンパク質
refseq NCBI RefSeq の「完全 (Complete) 」アセンブリに属する細菌・古細菌・ウイルスゲノム
refseq_nr NCBI RefSeq 非冗長タンパク質コレクションに含まれる、細菌・古細菌・ウイルス・真菌・微生物性真核生物のタンパク質
refseq_ref NCBI RefSeq の代表アセンブリ (representative assemblies) 由来の細菌・古細菌のタンパク質 + RefSeq のウイルスタンパク質
progenomes proGenomes v3 データベースに収録された代表ゲノム由来のタンパク質 + NCBI RefSeq のウイルスタンパク質

a.データベースのダウンロード

プレビルド済のものをすることが可能です。下記に配置されています。

https://bioinformatics-centre.github.io/kaiju/downloads.html

ダウンロードして使用します。nr_eukのデータベースをダウンロードする場合は、以下のコマンドを実行します。

nr_eukの取得
mkdir -p kaiju_db
# ダウンロード
aria2c -x 16 -c -o kaiju_db/kaiju_db_nr_euk_2023-05-10.tgz https://kaiju-idx.s3.eu-central-1.amazonaws.com/2023/kaiju_db_nr_euk_2023-05-10.tgz
# 解凍
tar kaiju_db/kaiju_db_nr_euk_2023-05-10.tgz -C kaiju_db/
# tarファイルを削除
# rm kaiju_db/kaiju_db_nr_euk_2023-05-10.tgz

b.データベースのビルド

プレビルドされたものより新しいデータベースを使いたい場合は、自身でビルドすることが可能です。kaijuが提供するkaiju-makedbコマンドでデータベースを作成します。

USAGE kaiju-makedb
kaiju-makedb --help

kaiju-makedb
Copyright 2015-2023 Peter Menzel, Anders Krogh
License GPLv3+: GNU GPL version 3 or later, http://gnu.org/licenses/gpl.html

This program creates a index for Kaiju for a reference database.

Select one of the available source databases using option -s:

 refseq: bacterial, Archaeal and viral genomes in the NCBI RefSeq database with assembly status Complete
 refseq_nr: proteins from bacteria, Archaea, viruses, fungi and microbial eukaryotes from the NCBI RefSeq non-redundant proteins collection
 refseq_ref: proteins from bacteria, Archaea from the NCBI RefSeq representative assemblies + viral proteins from NCBI RefSeq
 progenomes: proteins in the set of representative genomes from the proGenomes v3 database and viral proteins from NCBI RefSeq
 nr: NCBI BLAST non-redundant protein database "nr", only Archaea, bacteria, and viruses
 nr_euk: nr and additionally including fungi and microbial eukaryotes
 fungi: All fungi genomes from NCBI RefSeq (any assembly status).
 viruses: Viral genomes from NCBI RefSeq
 plasmids: Plasmid genomes from NCBI RefSeq
 rvdb: Viral proteins from RVDB-prot

For example: <Path to dir>/kaiju/miniforge3/bin/kaiju-makedb -s nr will create the kaiju index file kaiju_db_nr.fmi

Additional options:

  -t X  Set number of parallel threads for index construction to X \(default:5\)
        The more threads are used, the higher the memory requirement becomes.
  --no-download   Do not download files, but use the existing files in the folder.
  --index-only    Only create kaiju index from kaiju_db_*.faa files, implies --no-download.

以下のコマンドを実行することでkaiju_db_nr_euk.fmiというファイルが作成されます。-sにデータベースの種類を指定します。ビルドにはかなりの量のRAMを使用します。

kaiju-makedbの実行
kaiju-makedb -s nr_euk -t 32

デモデータのダウンロード

デモ用データの取得
mkdir -p 00Fastq
# ヒトメタゲノム
curl -L ftp://ftp.sra.ebi.ac.uk/vol1/fastq/SRR185/017/SRR18585217/SRR18585217_1.fastq.gz -o 00Fastq/SRR18585217_R1.fastq.gz
curl -L ftp://ftp.sra.ebi.ac.uk/vol1/fastq/SRR185/017/SRR18585217/SRR18585217_2.fastq.gz -o 00Fastq/SRR18585217_R2.fastq.gz
curl -L ftp://ftp.sra.ebi.ac.uk/vol1/fastq/SRR185/016/SRR18585216/SRR18585216_1.fastq.gz -o 00Fastq/SRR18585216_R1.fastq.gz
curl -L ftp://ftp.sra.ebi.ac.uk/vol1/fastq/SRR185/016/SRR18585216/SRR18585216_2.fastq.gz -o 00Fastq/SRR18585216_R2.fastq.gz
curl -L ftp://ftp.sra.ebi.ac.uk/vol1/fastq/SRR185/014/SRR18585214/SRR18585214_1.fastq.gz -o 00Fastq/SRR18585214_R1.fastq.gz
curl -L ftp://ftp.sra.ebi.ac.uk/vol1/fastq/SRR185/014/SRR18585214/SRR18585214_2.fastq.gz -o 00Fastq/SRR18585214_R2.fastq.gz

# 温泉メタゲノム
curl -L ftp://ftp.sra.ebi.ac.uk/vol1/fastq/SRR288/087/SRR28812187/SRR28812187_1.fastq.gz -o 00Fastq/SRR28812187_R1.fastq.gz
curl -L ftp://ftp.sra.ebi.ac.uk/vol1/fastq/SRR288/087/SRR28812187/SRR28812187_2.fastq.gz -o 00Fastq/SRR28812187_R2.fastq.gz
curl -L ftp://ftp.sra.ebi.ac.uk/vol1/fastq/SRR288/085/SRR28812185/SRR28812185_1.fastq.gz -o 00Fastq/SRR28812185_R1.fastq.gz
curl -L ftp://ftp.sra.ebi.ac.uk/vol1/fastq/SRR288/085/SRR28812185/SRR28812185_2.fastq.gz -o 00Fastq/SRR28812185_R2.fastq.gz
curl -L ftp://ftp.sra.ebi.ac.uk/vol1/fastq/SRR288/086/SRR28812186/SRR28812186_1.fastq.gz -o 00Fastq/SRR28812186_R1.fastq.gz
curl -L ftp://ftp.sra.ebi.ac.uk/vol1/fastq/SRR288/086/SRR28812186/SRR28812186_2.fastq.gz -o 00Fastq/SRR28812186_R2.fastq.gz
curl -L ftp://ftp.sra.ebi.ac.uk/vol1/fastq/SRR288/084/SRR28812184/SRR28812184_1.fastq.gz -o 00Fastq/SRR28812184_R1.fastq.gz
curl -L ftp://ftp.sra.ebi.ac.uk/vol1/fastq/SRR288/084/SRR28812184/SRR28812184_2.fastq.gz -o 00Fastq/SRR28812184_R2.fastq.gz

データQC

データのクォリティチェックにはfastpを使用します。

https://github.com/OpenGene/fastp

fastpは、FASTQファイルのクォリティチェックやトリミング、フィルタリングを行うためのツールです。特に、ショートリードのペアエンドリードの処理に優れています。このコマンドで、各サンプルのFASTQファイルをクォリティチェックし、必要な処理を行った後、出力ファイルを01FastqQCディレクトリに保存します。

対象のデータは処理後のものだったのか、Q30でアダプター配列はほぼ検出されませんでした。

fastp実行
mkdir -p 01FastqQC
for file in SRR18585217 SRR18585216 SRR18585214 SRR28812184 SRR28812185 SRR28812186 SRR28812187; do
   fastp \
   --in1 00Fastq/${file}_R1.fastq.gz \
   --in2 00Fastq/${file}_R2.fastq.gz \
   --out1 01FastqQC/${file}_R1.fastq.gz \
   --out2 01FastqQC/${file}_R2.fastq.gz \
   --html 01FastqQC/${file}_report.html \
   --json 01FastqQC/${file}_report.json \
   --qualified_quality_phred 30 \
   --length_required 100 \
   --detect_adapter_for_pe \
   --trim_poly_g \
   --cut_front \
   --cut_tail \
   --thread 32
   done

ホストゲノムの削除

ホストゲノムの削除にはHostileを使います。Hostileは、メタゲノムのホストDNAを除去するためのツールです。

こちらの記事で紹介していますが、メージャーバージョンとしてv2がリリースされた際に挙動が変わったようです。

https://zenn.dev/edna_startup/articles/cfcccb2309d4aa

GitHubのREADMEに従って進めて行きます。

https://github.com/bede/hostile

リファレンスゲノムはT2Tのヒトゲノム(uman-t2t-hla.argos-bacteria-985_rs-viral-202401_ml-phage-202401)を使用します。

FDA-ARGOSの985の感染性細菌ゲノムと18,719のRefSeqに登録されていたウイルスゲノム、26,928のMillard labのPhageゲノムを対象に150merでマスク処理がされています。

hostile実行
mkdir -p 02Hostile
for file in SRR18585217 SRR18585216 SRR18585214 SRR28812184 SRR28812185 SRR28812186 SRR28812187; do
   hostile clean -t 32 \
   --index human-t2t-hla.argos-bacteria-985_rs-viral-202401_ml-phage-202401 \
   --fastq1 01FastqQC/${file}_R1.fastq.gz \
   --fastq2 01FastqQC/${file}_R2.fastq.gz \
   -o 02Hostile
   done

系統推定

kaijuはv1.9からkaiju-multiオプションで一気に複数サンプルの系統推定を実行できるようになりました。系統推定のアルゴリズムにはmemgreedyの2つのモードがあります。

  • mem (Maximum Exact Match)
    • アルゴリズム:
      • リードを6フレーム翻訳 → ストップコドンで分割したアミノ酸配列を長い順に並べる
      • **完全一致 (exact match)**のみ許可
      • 後ろ向き探索 (BWT) で最長一致を探し、最長一致より短い断片しか残らなければ探索終了

特徴として、メモリ使用量が比較的少なく高速ですが、ミスマッチや置換には弱いです。そのため、リードクオリティの高いシーケンスデータで、データベースに近縁種が含まれる場合に有効です。

  • greedy
    • アルゴリズム:
      • 翻訳した断片を BLOSUM(BLOcks SUbstitution Matrix)62スコア順 に並べる (点数が高い=類似度が高そうな断片を優先)
      • 完全一致から左端方向に許容置換ありで延長
      • 一定スコアに届かない断片は探索終了

特徴として、感度が高く (真陽性を拾いやすい) 、変異・シーケンスエラー・遠縁種にも強いですが、メモリ使用量が多く、処理速度が遅いです。特に、リードクオリティが低い場合や、データベースに遠縁種が含まれる場合に有効です。

そのため、大規模メタゲノムやターゲット生物が既知・近縁種がDBにあり、スピード重視 / 高品質データmem、環境メタゲノムや未知種の探索、エラー率が高いデータ (Nanoporeなど) で感度重視 / 低品質データ / 遠縁探索 → Greedyを選択するのが良いでしょう。

また、実行のためにnodes.dmpnames.dmpファイルが必要です。これらはNCBIの分類法を表すファイルで、Kaijuのデータベースと一緒に提供されます。

頻繁に更新されるので最新の情報を反映したい場合には以下のようにFTPサイトからダウンロードすることも可能です。

*dmpファイルのダウンロード
# nodes.dmpとnames.dmpのダウンロード
aria2c -x 16 -c https://ftp.ncbi.nlm.nih.gov/pub/taxonomy/taxdump.tar.gz
tar -xzf taxdump.tar.gz
rm taxdump.tar.gz

比較のために両モードで解析を実行します。

memモードでの実行
mkdir 03Kaiju_results_mem
kaiju-multi -z 32 -t nodes.dmp -f kaiju_db_nr_euk.fmi -v -a mem \
-i  02Hostile/SRR18585214_R1.clean_1.fastq.gz,02Hostile/SRR18585216_R1.clean_1.fastq.gz,02Hostile/SRR18585217_R1.clean_1.fastq.gz,02Hostile/SRR28812184_R1.clean_1.fastq.gz,02Hostile/SRR28812185_R1.clean_1.fastq.gz,02Hostile/SRR28812186_R1.clean_1.fastq.gz,02Hostile/SRR28812187_R1.clean_1.fastq.gz \
-j  02Hostile/SRR18585214_R2.clean_2.fastq.gz,02Hostile/SRR18585216_R2.clean_2.fastq.gz,02Hostile/SRR18585217_R2.clean_2.fastq.gz,02Hostile/SRR28812184_R2.clean_2.fastq.gz,02Hostile/SRR28812185_R2.clean_2.fastq.gz,02Hostile/SRR28812186_R2.clean_2.fastq.gz,02Hostile/SRR28812187_R2.clean_2.fastq.gz \
-o  03Kaiju_results_mem/SRR18585214.out,03Kaiju_results_mem/SRR18585216.out,03Kaiju_results_mem/SRR18585217.out,03Kaiju_results_mem/SRR28812184.out,03Kaiju_results_mem/SRR28812185.out,03Kaiju_results_mem/SRR28812186.out,03Kaiju_results_mem/SRR28812187.out
greedyモードでの実行
mkdir 03Kaiju_results_greedy
kaiju-multi -z 32 -t nodes.dmp -f kaiju_db_nr_euk.fmi -v -a greedy \
-i  02Hostile/SRR18585214_R1.clean_1.fastq.gz,02Hostile/SRR18585216_R1.clean_1.fastq.gz,02Hostile/SRR18585217_R1.clean_1.fastq.gz,02Hostile/SRR28812184_R1.clean_1.fastq.gz,02Hostile/SRR28812185_R1.clean_1.fastq.gz,02Hostile/SRR28812186_R1.clean_1.fastq.gz,02Hostile/SRR28812187_R1.clean_1.fastq.gz \
-j  02Hostile/SRR18585214_R2.clean_2.fastq.gz,02Hostile/SRR18585216_R2.clean_2.fastq.gz,02Hostile/SRR18585217_R2.clean_2.fastq.gz,02Hostile/SRR28812184_R2.clean_2.fastq.gz,02Hostile/SRR28812185_R2.clean_2.fastq.gz,02Hostile/SRR28812186_R2.clean_2.fastq.gz,02Hostile/SRR28812187_R2.clean_2.fastq.gz \
-o  03Kaiju_results_greedy/SRR18585214,03Kaiju_results_greedy/SRR18585216,03Kaiju_results_greedy/SRR18585217,03Kaiju_results_greedy/SRR28812184,03Kaiju_results_greedy/SRR28812185,03Kaiju_results_greedy/SRR28812186,03Kaiju_results_greedy/SRR28812187

結果の確認

krona plot

Kaijuにはkrona plot用のファイルを出力することが可能です。

kaiju2krona実行
kaiju2krona -t nodes.dmp -n names.dmp -o 03Kaiju_results_mem/SRR18585214.krona -i 03Kaiju_results_mem/SRR18585214
kaiju2krona -t nodes.dmp -n names.dmp -o 03Kaiju_results_greedy/SRR18585214.krona -i 03Kaiju_results_greedy/SRR18585214

ktImportText -o 03Kaiju_results_mem/SRR18585214.krona.html 03Kaiju_results_mem/SRR18585214.krona
ktImportText -o 03Kaiju_results_greedy/SRR18585214.krona.html 03Kaiju_results_greedy/SRR18585214.krona
USAGE kaiju2krona
Kaiju 1.10.1
Copyright 2015-2023 Peter Menzel, Anders Krogh
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

Usage:
   kaiju2krona -t nodes.dmp -n names.dmp -i kaiju.out -o kaiju2krona.out

Mandatory arguments:
   -i FILENAME   Name of input file
   -o FILENAME   Name of output file.
   -t FILENAME   Name of nodes.dmp file
   -n FILENAME   Name of names.dmp file

Optional arguments:
   -l            Print taxon path containing only ranks specified by a comma-separated list,
                 for example: superkingdom,phylum,class,order,family,genus,species
   -u            Include count for unclassified reads in output.
   -v            Enable verbose output.
USAGE ktImportText
________________________________________________________________/ KronaTools 2.8.1 - ktImportText \___

Creates a Krona chart from text files listing quantities and lineages.
                                                                                           _______
__________________________________________________________________________________________/ Usage \___

ktImportText \
   [options] \
   text_1[,name_1] \
   [text_2[,name_2]] \
   ...

   text  Tab-delimited text file. Each line should be a number followed by a list of wedges to
         contribute to (starting from the highest level). If no wedges are listed (and just a
         quantity is given), it will contribute to the top level. If the same lineage is listed more
         than once, the values will be added. Quantities can be omitted if -q is specified. Lines
         beginning with "#" will be ignored. By default, separate datasets will be created for each
         input (see [-c]).

   name  A name to show in the list of datasets in the Krona chart (if multiple input files are
         present and [-c] is not specified). By default, the basename of the file will be used.
                                                                                         _________
________________________________________________________________________________________/ Options \___

   [-o <string>]  Output file name. [Default: 'text.krona.html']
   [-n <string>]  Name of the highest level. [Default: 'all']
   [-q]           Files do not have a field for quantity.
   [-c]           Combine data from each file, rather than creating separate datasets within the
                  chart.
   [-u <string>]  URL of Krona resources to use instead of bundling them with the chart (e.g.
                  "http://krona.sourceforge.net"). Reduces size of charts and allows updates, though
                  charts will not work without access to this URL.

03Kaiju_results_mem/SRR18585214.krona.htmlをブラウザで開くと、Krona plotが表示されます。Krona plotは、系統分類の結果を視覚的に表現するためのツールで、各系統の割合を円グラフで示します。

サマリーテーブル

Kaijuの結果をテーブル形式でまとめるにはkaiju2tableを使用します。

kaiju2table実行
kaiju2table -t nodes.dmp -n names.dmp -r species -p -o 03Kaiju_results_mem/SRR18585214.table.tsv 03Kaiju_results_mem/SRR18585214
kaiju2table -t nodes.dmp -n names.dmp -r species -p -o 03Kaiju_results_greedy/SRR18585214.greedy.table.tsv 03Kaiju_results_greedy/SRR18585214
USAGE kaiju2table
Kaiju 1.10.1
Copyright 2015-2023 Peter Menzel, Anders Krogh
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

Usage:
   kaiju2table -t nodes.dmp -n names.dmp -r species -o kaiju.table input1.tsv [input2.tsv ...]

Mandatory arguments:
   -o FILENAME   Name of output file.
   -t FILENAME   Name of nodes.dmp file
   -n FILENAME   Name of names.dmp file.
   -r STRING     Taxonomic rank, must be one of: phylum, class, order, family, genus, species

Optional arguments:
   -m FLOAT      Number in [0, 100], denoting the minimum required percentage for the taxon (except viruses) to be reported (default: 0.0)
   -c INT        Integer number > 0, denoting the minimum required number of reads for the taxon (except viruses) to be reported (default: 0)
   -e            Expand viruses, which are always shown as full taxon path and read counts are not summarized in higher taxonomic levels.
   -u            Unclassified reads are not counted for the total reads when calculating percentages for classified reads.
   -p            Print full taxon path.
   -l            Print taxon path containing only ranks specified by a comma-separated list,
                 for example: superkingdom,phylum,class,order,family,genus,species
   -v            Enable verbose output.

Only one of the options -m and -c may be used at a time.

以下のようなLong Tableが出力されます。このテーブルは、各系統の分類名、リード数、割合などを含んでいます。-rオプションで指定した分類階級 (ここではspecies) に基づいて集計されます。

memモードとgreedyモードの比較

memモードとgreedyモードの結果を簡単に比較するため、ヒトのメタゲノムデータ (SRR18585214) と温泉メタゲノムデータ (SRR28812184) の結果を各モードで出力します。SRR18585214は先程出力したので、SRR18585214の結果を追加で取得します。

kaiju2krona実行
# krona plotの出力
kaiju2krona -t nodes.dmp -n names.dmp -o 03Kaiju_results_mem/SRR28812184.krona -i 03Kaiju_results_mem/SRR28812184
kaiju2krona -t nodes.dmp -n names.dmp -o 03Kaiju_results_greedy/SRR28812184.krona -i 03Kaiju_results_greedy/SRR28812184

ktImportText -o 03Kaiju_results_mem/SRR28812184.krona.html 03Kaiju_results_mem/SRR28812184.krona
ktImportText -o 03Kaiju_results_greedy/SRR28812184.krona.html 03Kaiju_results_greedy/SRR28812184.krona

mem(左)とgreedy(右)モードそれぞれで出力したkrona plotが以下になります。

  • ヒト メタゲノム(SRR18585214)

  • 温泉メタゲノム(SRR28812184)

ヒトのメタゲノムについてはモードによる顕著な違いは無いように思いますが、温泉メタゲノムについてはgreedyモードの方が多様な系統を検出していることがわかります。加えて温泉メタゲノムでは、greedyモードの方がより多くの系統を検出しているため、感度が高いことがわかります。

続いて、サマリーテーブルを比較します。上位10の系統を横並びに比較します。

kaiju2table実行
# tableの出力
kaiju2table -t nodes.dmp -n names.dmp -r species -p -o 03Kaiju_results_mem/SRR28812184.table.tsv 03Kaiju_results_mem/SRR28812184
kaiju2table -t nodes.dmp -n names.dmp -r species -p -o 03Kaiju_results_greedy/SRR28812184.greedy.table.tsv 03Kaiju_results_greedy/SRR28812184

一番右の列の色分けは、赤がモード間で共通した順位で検出されている系統、緑は含まれているが順位が共通していない系統で、記載されている数値は比較対象のモードの検出順位、青は比較対象のモードの上位20に含まれなかった系統を示しています。

  • ヒト メタゲノム(SRR18585214)

  • 温泉メタゲノム(SRR28812184)

ヒトメタゲノムのサンプルは順位は違えどmemとgreedyモード間で検出された主要な系統に違いは無いようです。一方、多様性が高い温泉メタゲノムの場合は、各モードで比較対象の上位20に無い系統を検出していました。

そのため、論文でよくあるような「主要な検出種上位XX」の見せ方については注意する必要がありそうです (どちらが正解というのは環境サンプルなのでわかりません)。

まとめ

今回の検討でKaiju を用いたメタゲノム解析の環境構築から実行、そして mem / greedy モードの比較までを一通り実施しました。その結果を整理すると以下のようになります。

  • 環境構築
    • miniforge3 + mamba をベースに環境を構築し、Kaiju と付随ツール (krona, hostile, fastp など) を導入
    • データベースについては、プレビルド済み nr_euk を利用する方法と、自前で kaiju-makedb を用いて最新データからビルドする方法を紹介
      • 後者は比較的のnrを反映できますが、RAMやディスク容量を大量に消費する点に注意が必要です。
  • Kaijuによる系統分類
    • Kaiju の2つのアルゴリズムモード (mem, greedy) を比較。
      • mem モード
        • 完全一致のみを許可するため高速・省メモリ。
        • 高品質リードや近縁種がデータベースに含まれる場合に有効。
    • greedy モード
      • 部分的な置換を許容し、遠縁種やエラーデータにも対応。
      • 感度が高いが、速度が遅くメモリ使用量が増大。
  • 結果の可視化と解釈
    • Kaijuの出力を krona plot で可視化し、系統ごとの構成比を直感的に把握。
    • kaiju2table によるサマリーテーブルで、各分類群のリード数や割合を定量的に比較。
    • 実際のデータでは以下の傾向を確認
      • ヒトメタゲノムでは mem / greedy の結果に大きな違いはなし。
      • 温泉メタゲノムのように多様性が高いサンプルでは greedy モードがより多くの分類群を検出。
        → 感度の高さが有利に働く。
    • モードの総評
      • 速度優先 & 高品質リード (Illuminaショートリード、近縁種がDBに存在) → mem モード
      • 感度優先 & 多様性の高い環境試料、遠縁探索、エラー率が高いリード → greedy モード

Information

  • 自作PC

Discussion