macでインフォマティクス

macでインフォマティクス

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

KrakenUniq

2019 1/17 エラー修正

2024/02/14 追記

 

 メタゲノミクス分類手法は、データセット内の各リードに taxonomic identityをアサインすることを試みる。メタゲノミクスデータにはしばしば何千万ものリードが含まれているため、分類は、通常、長さk(k-mers)の短いワードの正確な一致を使用して行われる。結果には、リードの分類が含まれているが、アライメントされたゲノム内のポジションは含まれない([論文のref.1]のレビューのように)。しかしながら、リードカウントは欺かれる可能性がある。サンプルの抽出、取り扱い、またはシーケンシング中に実験室キットまたは環境から導入された汚染により、大量の偽のidentificationsが引き起こされる可能性がある [ref.2,3]。サンプル投入が少量だと、汚染の問題をさらに複雑にする可能性がある。たとえば、感染症の臨床診断にシークエンシングを使用する場合、投入DNAノ0.1%未満だけが目的の微生物に由来する可能性がある[ref.4, 5]。ゲノムの複雑さの低い領域やデータベースゲノム自体の汚染から、追加の疑似マッチが生じる可能性がある[ref.6]。

 そのような偽陽性のリードはゲノムの小さな部分にのみ一致して起きる。典型的には、種のゲノムが低複雑度領域を含み、その種に合致する唯一のリードがこの領域に入る場合など起きる。真に存在する微生物からのリードは、1つまたは少数の場所に集中するのではなく、ゲノム全体に比較的均一に分布すべきである。ゲノムアライメントはこの情報を明らかにすることができる。しかし、アライメントはリソースを集中的に使用するため、ゲノムすべてのindexを作成する必要があり、すべてのリードをそれらのindexと比較するための比較的遅いアライメントステップが必要になる。いくつかのメタゲノミクス手法では、カバレッジ情報を使用してマッピング定量の精度を向上させているが、これらの手法では、より遅いアラインメント手法を入力として必要としている[ref.7 link]。アセンブリベースの方法は偽陽性を回避するのにも役立つが、これらは非常に豊富な種にのみ有用である[ref.8 link]。

 ここでは、非常に高速なk-merベースの分類と高速なk-mer濃度推定とを組み合わせた新しい方法であるKrakenUniqを提示する。 KrakenUniqはKrakenメタゲノム分類器[ref.9]に基づいており、また、各taxonについて特定されたユニークなk-mersの数を数えるために、効率的な濃度推定アルゴリズムHyperLogLog [ref.10, 11, 12]を使用する方法が追加されている。 KrakenUniqは、各ゲノム中のユニークなk-mersのうち、どれだけがリードでカバーされているかを数えることによって、true-positiveのマッチからfalse-positiveを識別することができる。さらに、KrakenUniqは、メタゲノム分類を改善するための追加の新機能を実装している。(a)複数のデータベースに対して階層的に検索できる。 (b)taxonomy は、系統およびプラスミドのためのノードを含むように拡張され、それによりそれらの検出が可能になる。 (c)database build scriptは、NCBIウイルスゲノムリソース[ref.13]から10万を超えるウイルスの追加を可能にする。KrakenUniqは、Krakenによって提供される情報のスーパーセットを提供し、同時に、同じくらい早く、または少し高速に実行でき、分類時に追加メモリをほとんど使用しない。

 KrakenUniqは、メタゲノム実験で同定されたすべての分類群の効率的なk-merカウント情報を提供するために開発された。 主なワークフローは次のとおりである。リードが処理されると、各k-merにデータベースからtaxonがアサインされる(論文 図1a)。 KrakenUniqは、各分類群のHyperLogLogデータスケッチをインスタンス化し、それにk-mersを追加する(論文 図1bおよび追加ファイル1:HyperLogLogアルゴリズムのセクション1)。リードを分類した後、KrakenUniqはtaxonomic treeを走査し、各taxonの見積りをその親とマージする。 分類レポート出力には、入力データで観測された各taxonの固有のk-mer数とk-merカバレッジデプスが含まれている(論文 図1c)。

(以下省略)

 

f:id:kazumaxneo:20190115204013p:plain図1. Overview of the KrakenUniq algorithm and output.  論文より転載

 

2022/07/06

 

 

 

インストール

ubuntu14.04、miniconda3-4.0.5環境で動作確認を行った。

依存

Jellyfish ver.2には対応していないので注意する。

ハードウエア要件

  • KrakenUniq requires a lot of RAM - ideally 128GB - 512GB. For more memory efficient classification consider using centrifuge.

本体 Github

#condaを使って導入できる(linuxのみ)
conda install -y -c bioconda krakenuniq

> krakenuniq --help

$ krakenuniq --help

Usage: krakenuniq --report-file FILENAME [options] <filename(s)>

 

Options:

  --db NAME               Name for Kraken DB (default: none)

  --threads NUM           Number of threads (default: 1)

  --fasta-input           Input is FASTA format

  --fastq-input           Input is FASTQ format

  --gzip-compressed       Input is gzip compressed

  --bzip2-compressed      Input is bzip2 compressed

  --hll-precision INT     Precision for HyperLogLog k-mer cardinality estimation, between 10 and 18 (default: 12)

  --exact                 Compute exact cardinality instead of estimate (slower, requires memory proportional to cardinality!)

  --quick                 Quick operation (use first hit or hits)

  --min-hits NUM          In quick op., number of hits req'd for classification

                          NOTE: this is ignored if --quick is not specified

  --unclassified-out FILENAME

                          Print unclassified sequences to filename

  --classified-out FILENAME

                          Print classified sequences to filename

  --output FILENAME       Print output to filename (default: stdout); "off" will

                          suppress normal output

  --only-classified-output

                          Print no Kraken output for unclassified sequences

  --preload               Loads DB into memory before classification

  --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

  --help                  Print this message

  --version               Print version information

 

Experimental:

  --uid-mapping           Map using UID database

 

If none of the *-input or *-compressed flags are specified, and the 

file is a regular file, automatic format detection is attempted.

> krakenuniq-download --help

$ krakenuniq-download --help

Unknown database --help. 

 

krakenuniq-download [<options>] <pattern> <pattern>*

 

ARGUMENTS

 <pattern> can be one of

     'contaminants'     Contaminant sequences from UniVec and EmVec.

     'taxonomy'         NCBI taxonomy mappings from ftp://ftp.ncbi.nlm.nih.gov/pub/taxonomy/

     'nucleotide'       Download nucleotide sequences using a query specified using --search or --ac.

     'microbial-nt'     Download microbial sequences from nt database.

     'viral-neighbors'  Download viral strain sequences from the NCBI Viral Genome Resource.

                        (Search: "viruses[organism] not cellular organisms[orgn] not wgs[prop] not gbdiv syn[prop] and (nuccore genome samespecies[filter] and (complete[title]) not unverified[title])").

     'genbank/DOMAIN'   Download all complete genomes for DOMAIN from GenBank.

     'refseq/DOMAIN'    Download all complete genomes for DOMAIN from RefSeq.

     'refseq/DOMAIN/ASS_LEVEL'

     'refseq/DOMAIN/ASS_LEVEL/COLUMN=value1(/COLUMN=value2)*' 

        Possible values for DOMAIN: bacteria viral archaea fungi protozoa invertebrate plant vertebrate_mammalian vertebrate_other.

        Possible values for ASS_LEVEL: Any, Complete_Genome, Chromosome, Scaffold and Contig. 

        Possible values for COLUMN: Any column in the NCBI assembly_summary.txt, e.g. species_taxid or assembly_accession.

        Example: 'refseq/vertebrate_mammalian/Any/species_taxid=9606' <- download all human assemblies

 

COMMON OPTIONS

 -o <directory>     Folder to which the files are downloaded. Default: '.'

 --db <directory>   Alternative to -o: Download to <directory>/{library,taxonomy}.

 --threads <# of threads>  Number of processes when downloading (uses xargs). Default: '5'

 --rsync, -R        Download using rsync.

 --overwrite        Redownload and overwrite files with the same name.

 --verbose          Be verbose.

 --dust, -D         Mask low-complexity regions using dustmasker.

 --min-seq-len X    Filter all sequences from the FASTA files that have less than X bp.

 

WHEN USING DATABASE nucleotide or viral-neighbors:

 --search SEARCH_TERM  Download all sequences returned from a NCBI nucleotide search.

                       When used with viral-neighbors, it subsets the viral genomes by the search.

                       E.g. "txid1570291[Organism]" for Ebola virus sequences (taxonomy ID 1570291).

 --ac AC1,AC2          Alternative to --search. Download specified ACs of nucleotide database.

 --mapping-file MAP    Map accessions using the specified mapping file(s) (comma-separated).

                       Possible values: nucl_est, nucl_gb, nucl_gss, nucl_wgs.

                       For viral-neighbors, the default is nucl_gb. Unset by giving it an empty string.

                       Downloaded from ftp://ftp.ncbi.nlm.nih.gov/pub/taxonomy/accession2taxid/.

 --retmode RM          Specify return mode. Possible options: text (default), asn.1, xml.

 --rettype RT          Specify return type for download. Note that no mapping files are generated when

                       rettype is specified. Possible options: fasta (default), gb, gbc, native, acc, seqid, ft, 

                       gbwithparts, fasta_cds_na, fasta_cds_aa. Note that only gb and fasta files are split, while the other formats stay in chunks.

                       The resulting files will have the rettype as extension.

 

WHEN USING DATABASE nt:

 --taxa TAXLIST     Provide list of taxa that are kept in the database. Comma separated, supply either taxIDs or

                    one of the following division names: archaea bacteria fungi parasitic_worms protozoa viral

                    Default: "bacteria,archaea,viral,fungi,protozoa"

 --exclude-environmental-taxa

                    Exclude taxa that are named 'environmental samples'.

 

WHEN USING DATABASE refseq OR genbank:

 --fna <seq types>  Comma-separated list of sequence types, including genomic, rna, rna_from_genomic, cds_from_genomic. Default: genomic.

                    See the assembly project FTP site for available sequences

 -u                 Filter unplaced sequences.

> krakenuniq-build --help

$ krakenuniq-build --help

Usage: krakenuniq-build [task option] [options]

 

Task options (exactly one can be selected -- default is build):

  --download-taxonomy        Download NCBI taxonomic information

  --download-library TYPE    Download partial library (TYPE = one of "refseq/bacteria", "refseq/archaea", "refseq/viral"). 

                             Use krakenuniq-download for more options.

  --add-to-library FILE      Add FILE to library

  --build                    Create DB from library (requires taxonomy d/l'ed and at 

                             least one file in library)

  --rebuild                  Create DB from library like --build, but remove

                             existing non-library/taxonomy files before build

  --clean                    Remove unneeded files from a built database

  --shrink NEW_CT            Shrink an existing DB to have only NEW_CT k-mers

  --standard                 Download and create default database, which contains complete genomes 

                             for archaea, bacteria and viruses from RefSeq, as well as viral strains 

                             from NCBI. Specify --taxids-for-genomes and --taxids-for-sequences

                             separately, if desired.

 

  --help                     Print this message

  --version                  Print version information

 

Options:

  --db DBDIR                 Kraken DB directory (mandatory except for --help/--version)

  --threads #                Number of threads (def: 1)

  --new-db NAME              New Kraken DB name (shrink task only; mandatory

                             for shrink task)

  --kmer-len NUM             K-mer length in bp (build/shrink tasks only;

                             def: 31)

  --minimizer-len NUM        Minimizer length in bp (build/shrink tasks only;

                             def: 15)

  --jellyfish-hash-size STR  Pass a specific hash size argument to jellyfish

                             when building database (build task only)

  --jellyfish-bin STR        Use STR as Jellyfish 1 binary.

  --max-db-size SIZE         Shrink the DB before full build, making sure

                             database and index together use <= SIZE gigabytes

                             (build task only)

  --shrink-block-offset NUM  When shrinking, select the k-mer that is NUM

                             positions from the end of a block of k-mers

                             (default: 1)

  --work-on-disk             Perform most operations on disk rather than in

                             RAM (will slow down build in most cases)

  --taxids-for-genomes       Add taxonomy IDs (starting with 1 billion) for genomes.

                             Only works with 3-column seqid2taxid map with third 

                             column being the name

  --taxids-for-sequences     Add taxonomy IDs for sequences, starting with 1 billion.

                             Can be useful to resolve classifications with multiple genomes

                             for one taxonomy ID.

  --min-contig-size NUM      Minimum contig size for inclusion in database.

                             Use with draft genomes to reduce contamination, e.g. with values between 1000 and 10000.

  --library-dir DIR          Use DIR for reference sequences instead of DBDIR/library.

  --taxonomy-dir DIR         Use DIR for taxonomy instead of DBDIR/taxonomy.

 

Experimental:

  --uid-database             Build a UID database (default no)

  --lca-database             Build a LCA database (default yes)

  --no-lca-database          Do not build a LCA database

  --lca-order DIR1           Impose a hierarchical order for setting LCAs.

  --lca-order DIR2           The directories must be specified relative to the libary directory

  ...                        (DBDIR/library). When setting the LCAs, k-mers from sequences in

                             DIR1 will be set first, and only unset k-mers will be set from

                             DIR2, etc, and final from the whole library.

Use this option when including low-confidence draft genomes,

                             e.g use --lca-order Complete_Genome --lca-order Chromosome to

                             prioritize more complete assemblies.

                             Keep in mind that this option takes considerably longer.

> krakenuniq-extract-reads --help

$ krakenuniq-extract-reads --help

/home/uesaka/.pyenv/versions/miniconda3-4.2.12/bin/krakenuniq-extract-reads version [unknown] calling Getopt::Std::getopts (version 1.12 [paranoid]),

running under Perl version 5.26.2.

 

Usage: krakenuniq-extract-reads [-OPTIONS [-MORE_OPTIONS]] [--] [PROGRAM_ARG1 ...]

 

The following single-character options are accepted:

With arguments: -t

Boolean (without arguments): -f -v -i -a -p

 

Options may be merged together.  -- stops processing of options.

Space is not required between options and their arguments.

  [Now continuing due to backward compatibility and excessive paranoia.

   See 'perldoc Getopt::Std' about $Getopt::Std::STANDARD_HELP_VERSION.]

 

krakenuniq-extract-reads: Extract all reads from FASTQ file that are matched to a specied taxon by KrakenUniq

 

Usage: krakenuniq-extract-reads [OPTIONS] <taxon> <kraken> <fasta/fastq>

 

<taxon>         taxonomy ID, possibly multiple separated by ','

<kraken>        kraken result file

<fasta/fastq>   fasta/fastq file, possibly gzipped

 

Options:

  -a  input is FASTA file (default: FASTQ)

  -f  output in FASTA format

  -i  invert: print all reads not matching taxon

  -t TAXDB Include children of taxonomy IDs, using TAXDB to find them

  -v  verbose

  -p  paired-end reads: use a '%' in fasta/q file name as placeholder for 1 and 2

 

Example:

    krakenuniq-extract-reads -p 9606 result.kraken input_%.fq 

    outputs all reads of input_1.fq and input_2.fq that have the taxonomy ID 9606 to STDOUT.

> krakenuniq-report --help

$ krakenuniq-report --help

Usage: krakenuniq-report --db KRAKEN_DB_NAME [OPTIONS] <kraken output file(s)>

 

OPTIONS:

  --show-zeros    Show full taxonomy table.

  --taxon-counts  Input files are in the format '<taxon ID><tab><count>' instead of Kraken output.

  --taxon-list    Input files is list of taxon IDs instead of Kraken output.

  -h              This message.

  

This script should only be used when post-processing raw KrakenUniq output, and k-mer counts and coverages are not needed. For most use-cases, krakenuniq --report-file is better than krakenuniq-report. 

> krakenuniq-mpa-report --help

$ krakenuniq-mpa-report --help

Usage: krakenuniq-mpa-report [--db KRAKEN_DB_NAME] [options] <kraken output file(s)>

 

Options:

  --db NAME             Name of Kraken database

                        (default: none)

  --show-zeros          Display taxa even if they lack a read in any sample

  --header-line         Display a header line indicating sample IDs

                        (sample IDs are the filenames)

  --intermediate-ranks  Display taxa not at the standard ranks with x__ prefix

> krakenuniq-filter --help

$ krakenuniq-filter --help

Usage: krakenuniq-filter [--db KRAKEN_DB_NAME] [--threshold NUM] <kraken output file(s)>

 

Threshold must be between 0 and 1.

> krakenuniq-translate --help

$ krakenuniq-translate --help

Usage: krakenuniq-translate [--db KRAKEN_DB_NAME] [--mpa-format] <kraken output file(s)>

 

 

データベースのビルド

1、taxonomyのダウンロード (350MBくらい)

krakenuniq-download --db DBDIR taxonomy

$ ls -alh taxonomy/

total 345M

drwxr-xr-x 2 uesaka user 4.0K Jan 14 10:27 .

drwxr-xr-x 4 uesaka user 4.0K Jan 14 10:35 ..

-rw-r--r-- 1 uesaka user 167M Jan 14 10:23 names.dmp

-rw-r--r-- 1 uesaka user 133M Jan 14 10:23 nodes.dmp

-rw-r--r-- 1 uesaka user  45M Jan 14 10:23 taxdump.tar.gz

-rw-r--r-- 1 uesaka user   29 Jan 14 10:27 timestamp

2、データベースのダウンロード

#Choose one of the following: bacteria, viral, archaea, fungi, protozoa, invertebrate, plant, vertebrate_mammalian, vertebrate_other


#REgseqの全bacteria、archaea
krakenuniq-download --db DBDIR --threads 20 --dust refseq/bacteria refseq/archaea

#plant(3種のみ コンタミチェックに使う)
krakenuniq-download --db DBDIR_plant --threads 20 --dust refseq/plant

#fungi (10種)
krakenuniq-download --db DBDIR_fungi --threads 20 --dust refseq/invertebrate

#protozoa (3種) 
krakenuniq-download --db DBDIR_protozoa --threads 20 --dust refseq/protozoa

#invertebrate
krakenuniq-download --db DBDIR_invertebrate --dust refseq/invertebrate


## Contaminant sequences from UniVec and EmVec, plus the human reference genome
krakenuniq-download --db DBDIR refseq/vertegrate_mammalian/Chromosome/species_taxid=9606

## All viral genomes from RefSeq plus viral 'neighbors' in NCBI Nucleotide
krakenuniq-download --db DBDIR_virus --threads 20 refseq/viral/Any viral-neighbors

## All microbial (including eukaryotes) sequences in the NCBI nt database (並列処理に対応していない?)
krakenuniq-download --db DBDIR --dust microbial-nt

#
krakenuniq-download --db DBDIR --threads 20 \
--taxa "archaea,bacteria,viral,fungi,protozoa,helminths" \
--dust --exclude-environmental-taxa nt

#DB/にnt~fnaファイルがダウンロードされる。
  • --dust    Mask low-complexity regions using dustmasker.
  •  --db <directory>     Alternative to -o: Download to <directory>/{library,taxonomy}.
  • --threads <NUM>    Number of processes when downloading (uses xargs). Default: '5'
  • --taxa <taxlist>     Provide list of taxa that are kept in the database. Comma separated, supply either taxIDs or
  • --exclude-environmental-taxa   Exclude taxa that are named 'environmental samples'.

(refseq/のplant、fhungi、protozoa、bacteria、archaea、viral/Any、 viral-neighborsのみ動作確認を行った)

 

 3、データベースビルド(時間がかかる)

krakenuniq-build --db DBDIR --kmer-len 31 --threads 40 --taxids-for-genomes --taxids-for-sequences
  • --kmer-len <NUM>     K-mer length in bp (build/shrink tasks only; def: 31)

  • --taxids-for-genomes       Add taxonomy IDs (starting with 1 billion) for genomes.
  • --taxids-for-sequences    Add taxonomy IDs for sequences, starting with 1 billion.

 

 

実行方法

レポートファイル作成まではkrakenと同じ流れで進める。

#メモリに余裕があれば、データベースをmemoryにpreloadしてインメモリデータベースにしておくことでかなり早くなる
krakenuniq --db DBDIR/ --preload --threads 20

#k-merアサインを実行
krakenuniq --threads 20 --db DBDIR/ --fastq-input input1.fq input2.fq > kmer-assignment
  • --preload    Loads DB into memory before classification 

 > head -n 5 kmer-assignment

U M02077:12:000000000-A8737:1:1101:26651:6691 0 300 0:270

C M02077:12:000000000-A8737:1:1101:7099:6692 51589 300 0:124 2237:5 0:36 2237:12 0:31 51589:8 0:31 2237:23

U M02077:12:000000000-A8737:1:1101:27349:6692 0 299 0:269

U M02077:12:000000000-A8737:1:1101:25832:6693 0 300 0:270

リードごとにtaxonomyアサインされる(raw KrakenUniq output)。

 

レポート作成

krakenuniq-report --db DBDIR/ kmer-assignment > report
  • --show-zeros    Show full taxonomy table

  

 

すでにkrakenのデータベースがあるなら、以下のコマンドでtaxDBを作成するだけでランできる。 

cd KRAKEN_DB/
#DBディレクトリで次のコマンドを打ち、DB/にtaxDBを追加
build_taxdb taxonomy/names.dmp taxonomy/nodes.dmp > taxDB

krakenuniq --report-file FILENAME --preload --db KRAKEN_DB/\
--threads 20 --fastq-input input.fq

 

追記

kra24/02/14 kenuniqはkraken1ベースのDBしか使用できないと思っていたが、コミュニティからコードが改善されてpull requestされ(#220)、masterにマージされたらしい(#249)。

引用

KrakenUniq: confident and fast metagenomics classification using unique k-mer counts

F. P. Breitwieser, D. N. Baker and S. L. Salzberg

Genome Biology 201819:198

 

関連


 

 

ONTのロングリードを自動でアセンブリして公開し、比較できるツール poreTally

 

 ナノポアシークエンシングは、エラーが発生しやすいクオリティが一貫したロングリードを生成する第3世代のシークエンシング方法である。簡単に言うと、DNAまたはRNA鎖がタンパク質の細孔を通って引っ張られ、細孔を介して電気抵抗に影響を与えこれが記録される。Base callers、すなわち塩基の特定の組み合わせについての電流レベルに関する経験的に得られた情報を使用するソフトウェアツールは、その後、経時的に電流を核酸配列に翻訳する。

 ナノポアシーケンシングは、オックスフォードナノポアテクノロジーズ(ONT)による手持ちできるMinIONシーケンサーの導入により、商業的には2014年に登場した。 2つのスケールアップされたプラットフォーム、GridIONとPromethIONがすぐ後に続いた。その後、ユーザーはより長いリード長と、ナノポアリードの特徴である高いシーケンスエラー率(約75%[ref.17])に対応するさまざまなオープンソース分析ツールを開発した。予想されたように、シーケンシングハードウェア、base callersおよびサンプル調製プラクティスはそれらが導入されてから多くの変更を受けてきた。これまでのすべての改善の累積的な結果として、未処理のMinIONリードは今やユーザーの手元で93%の同定率に達すると報告されており[ref.11]、リード長分布はおよそ10 kb前後 [ref.18]である。ただしこれらの特徴はサンプルの調製方法や種によって異なることが知られている[ref.20、21]。
 ONTのアップデートスケジュールは、着実に価値を高めるツールをユーザーコミュニティに提供しているが、ダウンストリーム分析ツールの開発者はツールを繰り返し再パラメータ化する必要がある。これらのツールに最新のベンチマークを提供することも同様に困難であることが証明されている。 de novoアセンブリパイプラインの場合、ある時点で最も人気のあるツールのいくつかのベンチマークが実行され、査読誌に掲載されている[ref.9、4、6、1]。ただし、いずれの場合も、ONTはpublish後にリードの品質の一部を大幅に改善し、それ故に比較は部分的に古くなっている。さらに、各ベンチマークの取り組みは1つの生物に焦点を当てているが、リードの品質と最良のアセンブリ方法はtaxonごとに異なる可能性があることが示されている[ref.19、15、16]。 ONTはプラットフォームの頻繁な改良を続けていくつもりであるため、ONTのハードウェアを大幅に更新しない限り、現実には合理的に多様な生物群についてde novoアセンブリパイプラインのベンチマークを行い、その成果を発表することはできない。

 ナノポアシーケンシングの急速な発展に追いつくために、ONTユーザーコミュニティは新しいツールを広めるいくつかの戦略を採用した。例えば、コミュニティはBioRxivのようなプレプリントサーバへのpublishを受け入れ、伝統的な査読付き(peer-reviewed)ジャーナルへのpublishはむしろユーザコミュニティがそれ自身の非公式の評価を行ったずっと後にformallyに研究の妥当性を確認するために行われている [e.g. ref.7, 8]。同様に、学術雑誌出版社のF1000によって提供された高速オープンピアレビューシステムは、ナノポアシーケンシング専用の出版チャネル(link)での活動から明らかなように、やや普及してきていることが証明された。最近、Wick et et alは興味深いアプローチを取っており、新しい発見があると定期的にGithubベンチマークを更新して、MinION base caller のパフォーマンスに関する調査結果を共有している [ref.22 github]。ショートリードアセンブリパイプライン用のベンチマークプラットフォームであるnucleotid.esにはより協調的な取り組みが採用されており、ユーザーがパイプラインのDockerイメージを送信してこれらを標準データセットで評価できるようにしている。 nucleotid.esは、このように繰り返しのベンチマークとパイプラインの客観的比較を容易にする。ただし、エラーが発生しやすいロングリードやユーザー提供のデータセットベンチマークはできない。また、生のナノポアシグナルを使用したアセンブリ後のpolishなど、ナノポアアセンブリの基本的な方法もサポートされていない。
 ハードおよびソフトウェアの更新によるde novoアセンブリパイプラインベンチマークの急速なdevaluationと分類群間でのパフォーマンスのばらつきの両方に対処するために、ここでは、コミュニティ主導の頻繁なベンチマークラクティスを提案し、これを容易にするツールを提示する。ナノポアシーケンシングを利用する研究グループに、標準化された手順に従って興味のある生物のアセンブリパイプラインのベンチマークを行い、その結果をオンラインで直接公開することを勧める。これは、同じまたは類似の分類群で作業している他のユーザーに、最新のハードウェアおよびソフトウェアを使用した自分のケースに最適なアセンブリパイプラインの指示を提供する。本ツール、poreTallyは、頻繁に使用されるアセンブリパイプライン、パフォーマンス分析ルーチン、レポート生成、および無料のリポジトリホスティングサービスGithubまたはGitlabでのpublishを1つのパッケージで提供し、プロセス全体の透明性を高める。 poreTallyは、異なるパラメータ設定で他のパイプラインまたは同じパイプラインの複数のインスタンスに簡単に拡張できるように設計されている。任意選択的に、ユーザはそれらの結果を集団的ベンチマークエフォートに提出することができる。提出されたベンチマーク結果は定期的に要約され、全体的なパフォーマンスの尺度および特定のユーザー事例の選択ガイドとしてコミュニティに提示される。もちろん、提出者は正式にクレジットされ、referされる。

 

poreTallyに関するツイート 

f:id:kazumaxneo:20190113162656p:plain

Schematic representation of the poreTally workflow. Preprintより転載

 

インストール

ubuntu16.04のminiconda3-4.3.21環境でテストした(docker使用。ホストOS: mac os10.14)。

依存

Ensure you have python3.6, miniconda/anaconda and git installed on your system.

sudo apt install zlib1g-dev
pip install setuptools --upgrade
pip install requests --upgrade

本体 Github

pip install git+https://github.com/cvdelannoy/poreTally.git


#またはdockerを使う
#ビルド
docker build https://github.com/cvdelannoy/poreTally.git -t poretally
#ヘルプ
docker run -t -v mount_this:to_that poretally run_benchmark -h

最初に実行するときにNCBI taxonomy databaseが自動でダウンロードされる。

> poreTally

$ poreTally

NCBI database not present yet (first time used?)

Downloading taxdump.tar.gz from NCBI FTP site (via HTTP)...

Done. Parsing...

Loading node names...

2043937 names loaded.

205187 synonyms loaded.

Loading nodes...

2043937 nodes loaded.

Linking nodes...

Tree is loaded.

Updating database: /home/kazu/.etetoolkit/taxa.sqlite ...

 2043000 generating entries... 

Uploading to /home/kazu/.etetoolkit/taxa.sqlite

 

Inserting synonyms:      205000 

Inserting taxid merges:  50000 

Inserting taxids:       2040000

 

 

ヘルプ

> poreTally -h

$ poreTally -h

usage: poreTally [-h]

                 {run_benchmark,run_assemblies,run_analysis,publish_results}

                 ...

 

A tool for for easy MinION de-novo assembler benchmarking. Runs a number of

assemblers, produces read quality measures, assembly quality and assembler

performance measures and parses the results into a format immediately

publishable on Github/Gitlab. Optionally, upload your data to a collaborative

benchmarking effort and help the MinION user community gain insight in

assembler performance.

 

optional arguments:

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

 

commands:

  {run_benchmark,run_assemblies,run_analysis,publish_results}

> poreTally run_benchmark -h

$ poreTally run_benchmark -h

usage: poreTally run_benchmark [-h] -w WORKING_DIR [-f FAST5_DIR]

                               [-a SHORT_READS_DIR [SHORT_READS_DIR ...]]

                               [-p PIPELINES [PIPELINES ...]] -r REF_FASTA

                               [-t THREADS_PER_JOB] [-s SLURM_CONFIG]

                               [-g GFF_FILE] -i USER_INFO [--git GIT]

                               reads_dir [reads_dir ...]

 

positional arguments:

  reads_dir             directory or list of MinION reads in fastq format

 

optional arguments:

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

  -w WORKING_DIR, --working-dir WORKING_DIR

                        Intermediate folder where results are stored.

  -f FAST5_DIR, --fast5-dir FAST5_DIR

                        Directory containing fast5-reads for the provided

                        reads. Required for some tools (e.g. Nanopolish).

  -a SHORT_READS_DIR [SHORT_READS_DIR ...], --short-reads-dir SHORT_READS_DIR [SHORT_READS_DIR ...]

                        Directory containing short accurate reads in fasta

                        format. Required for some tools (e.g. for error

                        correction). Config file variable: {SHORT_READS}

  -p PIPELINES [PIPELINES ...], --pipelines PIPELINES [PIPELINES ...]

                        Run benchmark for one or more specific pipelines,

                        instead of the standard 5. Given names must either be

                        one of the included pipelines

                        (minimap2_miniasm_nanopolish, wtdbg2, smartdenovo,

                        canu, flye, minimap2_miniasm,

                        minimap2_miniasm_raconX2), or be a path to a yaml file

                        defining the commands and prerequisites (mixing

                        allowed). Provide keyword 'default' to also run Canu,

                        Flye,SMARTdenovo, Minimap2+Miniasm and

                        Minimap2+Miniasm+RaconX2

  -r REF_FASTA, --ref-fasta REF_FASTA

                        Reference genome in fasta-format, not provided to

                        assemblers but used to estimate genome size and stored

                        for later use in analysis step.

  -t THREADS_PER_JOB, --threads-per-job THREADS_PER_JOB

                        Define how many threads each job (most importantly

                        assembly pipeline, but also analysis job) can

                        maximally use. (default is 4).

  -s SLURM_CONFIG, --slurm-config SLURM_CONFIG

                        If jobs need to be run using SLURM, provide a json-

                        file containing header information, (i.e. partition,

                        running time, memory etc.)

  -g GFF_FILE, --gff-file GFF_FILE

                        Gene annotation file in GFF(v2/3) format. If provided,

                        report number of found genes.

  -i USER_INFO, --user-info USER_INFO

                        Provide a yaml-file with author names, organism name

                        and/or NCBI Taxonomy ID, basecaller, ONT flowcell type

                        and ONT chemistry kit.

  --git GIT             Full ssh address of a Github/Gitlab repo for which you

                        set up access with a key pair.If provided, poreTally

                        pushes the results of your benchmark run to this repo.

 

 

実行方法

ランにはリードとリファレンスゲノム、ユーザー情報を記したyamlファイルが必要になる。

yamlファイルの内容例

authors: B. Honeydew
species: Escherichia coli
basecaller: Albacore 2.2.7
flowcell: FLO-MIN106
kit: SQK-LSK108

オーサー、種名、ベースコーラー、フローセル、キット名を書くようになっている。

 

準備ができたら実行する。リファレンスゲノム(fasta)、yamlファイル、スレッド数、作業ディレクトリ、そして最後にbasecallして得たfastqが収納されているディレクトリを指定する。

poreTally run_benchmark \
-w path/to/working_directory \
-r reference_genome.fasta \
-i user_info.yaml \
-t 16 \

fastqs_dir/

オンラインで直接公開したい場合、-git フラグとURLを指定し、指定したレポジトリに結果を自動でpushすることもできます(前もって共通鍵認証してsshアクセスできるようにしておく)。

Environment for ../assembler_results/conda_files/flye.yaml created (location: .snakemake/conda/28e5af27)

Creating conda environment ../assembler_results/conda_files/canu.yaml...

Downloading remote packages.

Environment for ../assembler_results/conda_files/canu.yaml created (location: .snakemake/conda/c96fb034)

Using shell: /bin/bash

Provided cores: 16

Rules claiming more threads will be scaled down.

Job counts:

count jobs

1 canu

1 flye

1 minimap2_miniasm

1 minimap2_miniasm_raconX2

1 smartdenovo

5

 

[Mon Jan 14 14:37:33 2019]

rule flye:

    input: /data/work/all_reads.fastq

    output: /data/work/assembler_results/assemblies/flye.fasta

    log: /data/work/assembler_results/log_files/flye.log

    jobid: 0

    benchmark: /data/work/assembler_results/cpu_files/flye.bm

    threads: 16

ランが終わるとanalysis/に様々なレポートが出力される。

f:id:kazumaxneo:20190116141458j:plain

 

command_files/  - 実行されたコマンド

> cat minimap2_miniasm_raconX2.cmd

$ cat /work/analysis/summary/command_files/minimap2_miniasm_raconX2.cmd 

minimap2 -x ava-ont -t 20 {input.fastq} {input.fastq} | gzip -1 > minimap2.paf.gz

miniasm -f {input.fastq} minimap2.paf.gz > minimap2_miniasm.gfa

grep -Po '(?<=S\t)utg.+\s[ACTG]+' minimap2_miniasm.gfa | awk '{{print ">"$1"\\n"$2}}' | fold > minimap2_miniasm.fasta

minimap2 -x ava-ont -t 20 minimap2_miniasm.fasta {input.fastq} > minimap2_readsToContigs1.paf

racon -t 20 {input.fastq} minimap2_readsToContigs1.paf minimap2_miniasm.fasta > minimap2_miniasm_raconX1.fasta

minimap2 -x ava-ont -t 20 minimap2_miniasm_raconX1.fasta {input.fastq} > minimap2_readsToContigs2.paf

racon -t 20 {input.fastq} minimap2_readsToContigs2.paf minimap2_miniasm_raconX1.fasta > {output}

 

quast PDFレポート

f:id:kazumaxneo:20190116141545j:plain

NanoPlot-report.html

f:id:kazumaxneo:20190116141622j:plain

 

multiqc_report - アセンブリ要約統計。multiQC(紹介)で統合され、htmlレポートになっている。

f:id:kazumaxneo:20190116142051j:plain

f:id:kazumaxneo:20190116142054j:plain

 

assembler_results/にはrunning logやアセンブリされた配列などが保存されている。

f:id:kazumaxneo:20190116141917j:plain

running logは何らかの理由でアセンブリが正しく終わらなかった時、エラー原因を探るのに役立ちます。テストでは、2ツールのみ正常に終わりました。

引用

poreTally: run and publish de novo Nanopore assembler benchmarks

Carlos de Lannoy, Judith Risse, Dick de Ridder

Bioinformatics, bty1045, https://doi.org/10.1093/bioinformatics/bty1045
Published: 24 December 2018

 

poreTally: run and publish de novo Nanopore assembler benchmarks

Carlos de Lannoy, Judith Risse, Dick de Ridder

bioRxiv preprint first posted online Sep. 23, 2018

 

bamからのリードの抽出と他のゲノムアセンブリへのリアライメントを素早く実行する Bazam

2019 4/20  論文引用

2020 11/12 誤字修正、タイトル修正

 

 過去10年間にわたるハイスループットゲノムシーケンシングマシンの大規模な採用は、巨大な可能性を有する膨大な量のゲノムデータを生み出してきた。ゲノムデータは、座標 (coordinate) ソートされたBAMまたはCRAMフォーマットでアライメントされたリードとしてよく保存されたり交換される。多くのアプリケーション(アライメントのviewingやルーチンのvariant callingなど)で直接使用できるため、この形式は一般的である。しかしながら、アライメントされた形式での保存は、データがリファレンスゲノムおよび使用されるアライメント方法に結び付けられるという重大な欠点を有する。多くの結果はこれらのパラメータに非常に敏感であり、組み合わされたデータセットは通常これらのパラメータが同一で​​ない限り全く一緒に分析することはできない。その結果、データを最適に利用するために、ユーザは最近ビルドされたゲノムおよびリファレンスにデータをリアライメントする必要があることが多い。これは、ゲノムデータを効率的にリアライメントするための能力に対する広範なそして増大する必要性をもたらしている。
 しかし、アライメントされたデータからペアになったリードを再位置合わせすることは、計算量が多く、標準的な方法では不便である。これらの問題は、アライナーが最適にアラインするためにペアリードの両方に同時にアクセスしなければならないために発生する。両方のリードは通常アライメントファイルに格納されているが、coordinateソートファイルでは、かなりの部分が互いに離れている可能性がある。これらの場合、ペアになった両方のリードを一緒に出力に書き込むことができるような高価なランダムルックアップが必要になる。したがって、標準的なリアライメント方法では、最初にすべてのリードを抽出し、次にリアライメント前にそれらをリード名でソートする。これは抽出を可能にするが、その過程は時間がかかりそして中間工程のためにかなりのコンピュータリソースを必要とする。興味深いことに、Picard Tools [ref.1]は別の方法、SamToFastqの形式でペアのリードを抽出する。これはペアのリードを抽出する際のこれら中間ステップの必要性を回避している。ただし、この方法はコミュニティでは広く使用されていない。  SamToFastqはメモリ使用のために最適化されておらず、大きなデータセットでの使用には実用的ではないためである。さらに、Picard Toolsは特定のlocusをターゲットにすることはできず、シングルの出力ストリームしか発行できないため、下流のシングルプロセスの最大スループット(アライメントなど)がボトルネックになる。
 ここでは、並列処理やその他の追加機能を提供しながら、メモリ使用を最適化するSamToFastqの代替手段であるBazamを紹介する。 Bazamは出力ストリームを別々のリアライメントのために複数のパスに分割することで並列性を高めている。この手法を使用すると、無制限の数の並列アライナを使用してソースのシングルアラインメントをリアライメントでき、計算クラスタまたはクラウドコンピューティングリソースが使用可能になったときのプロセスが大幅に高速化される。

 リアライメントは重要なアプリケーションだが、それ以外にBazamはペアリードの詳細な情報に依存する他のアプリケーションのためのユーティリティも提供する。応用例としては、クオリティ管理やstructural variant callingがある。 Bazamは、特に興味のある2つの追加機能を提供している:read position taggingとlocalised extractionである。Read position taggingは、ストリーミングされる各リード名を元のアライメントポジションが含まれるようにリネームする。この機能により、リアライメント後に新旧のアライメントアライメントポジションを簡単に比較できる。Localised extractionは、リアライメントが特定のゲノム座標と重複するリードに限定されることを可能にする。リアライメントと同様に、これは標準的なツールを使用して実現できる。ただし、これらのツールは、ペアの片方だけが関心領域に重なっている場合、ペアの両方のリードを出力することはしないため、ペアの両方のリードを必要とするアプリケーションには適していない。このPreprintではBazamの実装について説明し、それが精度を犠牲にすることなく効率を向上させることを実証する。

 

https://www.biorxiv.org/content/biorxiv/early/2018/10/04/433003.full.pdf

f:id:kazumaxneo:20190114161609p:plain

Different configurations for using Bazam.  Preprintより転載

 


 

 

インストール

ビルドするかjavaの実行ファイルをダウンロードする。またはcondaで導入する。

本体 Github

#Anaconda環境でcondaを使い導入
conda install -c bioconda -y bazam

> bazam -h

$ bazam -h

================================================================================

 

Bazam

 

================================================================================

 

error: Missing required option: bam

usage: java -jar bazam.jar -bam <bam> -L <regions>

 -bam <arg>           BAM file to extract read pairs from

 -dr <arg>            Specify a read name to debug: processing of the read

                      will be verbosey printed

 -f,--filter <arg>    Filter using specified groovy expression

 -gene <arg>          Extract region of given gene

 -h,--help            Show help

 -L,--regions <arg>   Regions to include reads (and mates of reads) from

 -n <arg>             Concurrency parameter (4)

 -namepos             Add original position to the read names

 -o <arg>             Output file

 -pad <arg>           Amount to pad regions by (0)

 -r1 <arg>            Output for R1 if extracting FASTQ in separate files

 -r2 <arg>            Output for R2 if extracting FASTQ in separate files

 -s <arg>             Sharding factor: format <n>,<N>: output only reads

                      belonging to shard n of N

 

This tool is built with Groovy NGS - the Groovy way to work with NGS data. 

 

実行方法

bwaを作って新しいリファレンスゲノムにマッピングし直す。 新しいリファレンスのindexingはあらかじめ行っておく。

bazam -bam my.bam | bwa mem -t 8 -p ref.fa - | \
samtools view -bSu - | \
samtools sort -o output.bam


#または
bazam -bam my.bam | bwa mem -t 8 -p ref.fa - | \
samtools sort -O BAM -@ 8 -o output.bam -
  • -bam   BAM file to extract read pairs from
  • -n    Concurrency parameter (4)

 

bazamだけ実行した場合はfastqが出力される。

bazam -bam test.bam > tmp.fastq

 

 特定の領域のアライメントだけ新しいリファレンスゲノムにマッピングし直す。 

bazam -bam my.bam -L chr1:5000000-6000000 | bwa mem -p ref.fa - | \
samtools view -bSu - | \
samtools sort -o out.bam
  • -L    Regions to include reads (and mates of reads) from.
     

 特定の領域のアライメントだけ新しいリファレンスゲノムにマッピングし直す。 4リードごとに1リードだけ(2リード目)だけ取り出す。

bazam -s 2,4 -bam my.bam | bwa mem -p ref.fa - | \
samtools view -bSu - | \
samtools sort -o out.bam
  • -L    Regions to include reads (and mates of reads) from.
     

 

Groovyの正規表現を使い、より高度なフィルタリングを行いながらfastqを取り出すことも可能になっている。詳細はGithubで確認して下さい。

引用

Bazam: a rapid method for read extraction and realignment of high-throughput sequencing data

Simon P. Sadedin, Alicia Oshlack
Genome Biology 2019 20:78

 

Bazam : A rapid method for read extraction and realignment of high throughput sequencing data

Simon P Sadedin, Alicia Oshlack

bioRxiv preprint first posted online Oct. 3, 2018

doi: https://doi.org/10.1101/433003

 

関連


 *1

ピークメモリ他の要素については調べてませんが、スピードだけで言えば、samtools fastq -@ threads の方が早く終わるかもしれません(本ツールは"130G or so of data could require up to 16G of RAM"という表現があるように、メモリ使用量が極めて少ない)。

review article要約 16Sアンプリコンシーケンシングによる微生物コミュニティの定量

 


 いくつかの例を挙げると、微生物群集は、地球規模の元素循環、排水処理プラントでの廃棄物除去、およびバイオガスプラントでのメタン生産を促進する、多くの自然および人工生態系における隠れたチャンピオンである。これらのシステムを理解しモデル化するためには、分類群特有の存在量を正確に定量化することが極めて重要になる。存在量から、遺伝子存在量、ゲノム存在量、細胞数およびバイオマスを指すことができる。微生物生態学の研究では、存在量はしばしば16S rRNA遺伝子のコピー数に基づいているが、力学的な数学モデルでは微生物量を乾燥重量としてのバイオマス定量と考えている。

 微生物群集を研究するために、メタゲノミクス(Eloe-Fadrosh et al、2016年; Shakya et al、2013)、メタプロテオミクス(Kleiner et al、2017年)、フローサイトメトリー(Lambrecht)、蛍光in situハイブリダイゼーション(FISH)、およびアンプリコンシークエンシングなどの培養に依存しない様々な分子生物学に基づく技術が用いられている。アンプリコンシークエンシングでは、一般的に、16S rRNA遺伝子がコミュニティ構成同定に使用されるが、他の遺伝子、例えばメタン生成古細菌に焦点を合わせるためのmcrA遺伝子もまたターゲットとされている(Steinberg and Regan、2008)。 16S rRNA遺伝子アンプリコンシーケンシングは、相対的な分類群特異的遺伝子存在量についての情報を与え、これは株特異的16S rRNAオペロンコピー数情報を用いて相対的分類群特異的ゲノム存在量に変換することができる。相対的な遺伝子とゲノムの存在量は、一般的に微生物群集の構成と環境パラメータとの関係を分析するために使用される。

 しかしながら、総存在量が未知である場合(Props et al、2017)、相対存在量はあまり役に立たない(論文 追加ファイル1、A.1章参照)。絶対的なゲノム存在量は、個々の分類群についての定量的リアルタイムPCR(qPCR)によって(Yu et al、2005)および16S rRNA遺伝子アンプリコンシークエンシングをqPCRと組み合わせることによって一度に決定することができる(Dannemiller et al、2014)。アンプリコンシークエンシングおよびqPCRの両方が実質的なエラーを引き起こす可能性があり、その多くは文献で広く議論されてきた。ただし、相対的および絶対的なゲノム存在量について報告する場合、それらの影響は依然として無視されることが多く、体系的に修正されていない。

 本レビューでは16S rRNA遺伝子アンプリコンシークエンシングおよびqPCRの定量潜在的なエラーを批判的に評価する。さらに、これらの誤差を推定し最小化するためのツールとガイドラインを提供する。このレビューで説明されているエラーは、DNA抽出、PCR、NGSおよびqPCRデータの分析に関連している。さらに、実験結果の妥当性をチェックするための絶対存在量を推定する方法を提示する。最後に、著者らは絶対的な分類群特異的ゲノム存在量の分類群特異的細胞数への変換および数学的モデリングに使用されるべきバイオマスに関連するエラーに対処した。上記のエラーを説明するために、著者らは主に複雑な微生物群集によって動かされる嫌気性消化からの例を参照する。

 

アンプリコンシークエンシングとqPCRの両方に関連するエラー
2.1   DNA抽出効率関連エラーの回避、定量、および修正

  • 複雑なマトリックスから多様なコミュニティのDNAを抽出することは困難な作業である。溶解条件は、あらゆる種類の細胞を分解するのに十分過酷でなければならないが、DNAに損傷を与えてはいけない。回収DNA量は、試料マトリックス、種の形態、および抽出方法に依存する。
  • 例えば細胞壁および膜の違いにより株間のDNA抽出効率の差があると、偏った相対および絶対ゲノム存在量にバイアスをもたらす。このエラーは、既知および代表的な組成の微生物モックコミュニティをサンプルにスパイクし、さまざまなDNA抽出方法をテストすることによって最小限に抑えることができる(Willner et al、2012 link)。
  • モックコミュニティは、サンプルおよび大腸菌を代表とする様々な形態のものを含むべきである。モックコミュニティメンバーの最も存在量に偏りのない抽出方法を選択する必要がある。
  • 抽出バイアスを最小化した後、原核生物DNAの全体的な抽出効率を決定する必要がある。抽出中のDNA損失を無視した場合、サンプル中の絶対ゲノム量は過小評価される。
  • 効率推定のために提案された標準は、一般に、既知数の大腸菌細胞をサンプルにスパイクすることに頼っている。次いでゲノムDNA中または大腸菌のプラスミド上の標的遺伝子を定量する。全体の抽出効率は、検出された標的遺伝子の数をスパイクされた標的遺伝子の数で割ったものによって計算される。大腸菌がすでに分析対象のコミュニティのメンバーである場合は、全体の抽出効率を計算する前に、サンプルに含まれている元々存在していた標的遺伝子を差し引く必要がある。大腸菌のスパイクを牛の糞尿に使用した場合、全体の抽出効率は、さまざまな抽出方法で38〜99.97%であった(Lebuhn et al、2016)。抽出効率が38%だと、絶対ゲノム存在量に263%の誤差をもたらすことになる。
  • DNA抽出の前に、死細胞由来の細胞外DNAを除去するための追加の工程を、例えばpropidium monoazideを用いて実施することができる(Emerson et al、2017)(参考)。より正確な結果につながる一方で、混濁試料へのpropidium monoazideの適用は、実際には依然としてチャレジングなことである(Kirkegaard et al、2017 pubmed)。
  • 結論として、DNA抽出効率の種間差は不正確な相対ゲノム存在量を引き起こし得る。このエラーは事後修正できない。このエラーを最小限に抑えるために、モックコミュニティを使用して最適なDNA抽出方法を選択できる。

 

2.2   PCR関連バイアスの回避

  • PCR増幅は主要なバイアス源となり得る。これらのエラーは、PCRテンプレートの特性(テンプレート濃度、GC含有量)、プライマーの選択(プライマーの範囲とミスマッチ)、ポリメラーゼの選択、およびPCRプロトコル(アニーリング温度とPCRサイクル数)と関連している。

 

2.2.1   PCRテンプレートの特性

  • 阻害剤がサンプル中に存在する場合、DNAテンプレート濃度を希釈するとPCR効率に良い影響を与える。しかしながら、アンプリコンシークエンシングにおいてDNAテンプレート濃度を希釈すると、レアな分類群が除外され、したがって観察される種の豊富さが減る(Wu et al、2010)。DNAテンプレート濃度が低すぎることによる潜在的なエラーは、レアな分類群について推定も補正もすることができず、したがって避けるべきである。
  • 特定の分類群のテンプレートDNAのGC含有量が多いと、PCR中の初期変性効率が悪くなり、増幅効率が低下するため、この分類群が過少になる可能性がある(Laursen et al 、2017 link)。
  • ゲノムGC含有量の違いによって生じる誤差は、他の誤差源と絡み合っているため推定するのが困難であり、最大1桁以上の誤差になり得る。 PCR中の初期変性時間を長くするとこの誤差を減らすことができるが、それを完全に抑制することはできない(Pinto and Raskin、2012)。

 

2.2.2   プライマーカバレッジ

  • 複雑な微生物群集を標的とするには、サンプル中に存在するすべてのバクテリアおよびアーキアの16S rRNA遺伝子配列をカバーするプライマーペアが必要になる。いくつかの研究によって示されるように、両方のドメインを等しくうまくカバーするユニバーサルプライマーペアはない(Baker et al、2003; Bru et al、2008; Takahashi et al、2014)。
  • 提案された1つの解決策は、各domainに対して別々のプライマーペアを使用することである(Fischer et al、2016 link)。さらに、すべてのバクテリアの全phylaをカバーするプライマーペアも利用可能ではなく(Klindworth et al、2013 link)、実行可能でさえないかもしれないので、バクテリアではいくつかのプライマーペアの使用が推奨される。
  • 500個のバクテリア16S rRNA遺伝子配列の分析から、非常に限定された領域(788〜798)を除いて、絶対的な塩基保存は連続では4塩基以下に制限されることが明らかになった(Baker et al、2003 link)。プライマーは一定の長さを有する故、全ての原核生物の16S rRNA遺伝子配列をカバーするように設計することはできない。
  • 非常に普遍的なプライマーペアを設計するために、Silva TestPrime(HP) のようなツールを使用してin silicoカバレッジ が計算できる。使用例はKlindworth et al、2013 (link)。
  • しかしながら、予測カバレッジと測定カバレッジ比較から、いくつかの分類群について高い不一致が示されている(Claesson et al、2010; Fischer et al、2016; Thijs et al、2017)。従って、In silicoカバレッジは、In situカバレッジを確実に予測することはできず、したがって、不十分にカバーされた分類群を事後修正するために適用することはできない。
  • プライマーのカバレッジは、プライマーと標的配列の配列類似性によって決定される。プライマーと標的とのミスマッチは、PCR増幅効率を実質的に低下させ(最大1000倍)、特異的分類群の有意な過少表示につながる可能性がある(Bru et al、2008 link)。
  • 多くのシーケンシング技術はリード長に制限がある。そのため、通常は16S rRNA遺伝子の可変領域の限られた数、例えばV3 / V4領域(Albertsen et al、2015)またはV1-V3領域(Cai et al、2013)のみがターゲットとなる。
  • 16S rRNA遺伝子データベース研究では、部分領域のターゲティングは、完全長配列よりも低い系統学的解像度を提供していた(Kim et al、2011 link)。対照的に、別の研究では、全長配列とV1からV4領域を標的とした場合の比較では、同様の群集構成が報告されている(Kraková et al、2016 link)。これらの矛盾する結果より、複雑な微生物群集を特徴付けるためにどの可変領域を扱うべきかについての明白な推薦はない。
  • rRNA遺伝子の代わりにSSU rRNA分子を標的とする最近の方法は、プライマーバイアスのない完全長のrRNA遺伝子配列を何百万という結果とした(Karst et al、2018 link)。しかしながら、この方法は面倒で複雑であり、したがって標準的方法としてはまだ適用できない。
  • 結論として、(i)バクテリアまたはアーキアのいずれかに特異的でありそして各domainを別々にターゲットにするプライマーペアを使用すること、および(ii)各domainに対して異なる可変領域をターゲットにした2つのプライマーペアを使用することが賢明である。

 

2.2.3   ポリメラーゼの選択

  • 伸長に使用されるDNAポリメラーゼは、それらのFidelityおよび校正活性によって特徴付けられる。置換エラー率は、2kb以下あたり1塩基かそれ以下の範囲内である(Potapov and Ong、2017 link)。このエラー率は、通常のアンプリコン長300〜500bpを考慮すると無視できる。
  • 置換エラーのプロファイルが知られているので、このエラーは、理論的に、事後的に修正出来得る(Shagin et al、2017)。ただし、そのようなバイオインフォマティクスツールはまだ利用できない。
  • ポリメラーゼのproofreading活性はプライマーeditingにつながる可能性がある(Gohl et al、2016)。これがPCRの早期に起こる場合、プライマー標的ミスマッチを示す分類群は効率的に増幅されるようになるため、上記のようなミスマッチに起因する可能性のある1000倍のバイアスは回避される。それゆえ、高い忠実度および校正活性を有するポリメラーゼが望まれる。

 

2.2.4   PCRプロトコル

  • PCRアニーリング温度が微生物群集の相対存在量に与える影響についての研究は矛盾する結果を示している。鶏盲腸サンプルのような複雑な群集ではアニーリング温度を下げることによる有意な影響は見られなかったが(Sergeant et al、2012 link)、活性汚泥でOTU数の増加が観察された(Albertsen et al、2015 link)。その効果は明ら​​かにプライマーと鋳型DNA間の配列相同性に依存している。
  • プライマーとテンプレートが完全に一致する場合、アニーリング温度を下げても2つのモックバクテリアPCR産物比には影響がなかったが、1つミスマッチがある場合は、2つのバクテリアDNAテンプレートの最初の1:1比からの指数関数的偏差が報告された (Sipos et al、2007)。結論として、ミスマッチはコミュニティ構成の偏りにつながる可能性があるため、高いアニーリング温度は避けなければならない。
  • PCR産物に対するPCRサイクル数の影響もまた曖昧である。活性汚泥については影響は見られなかった(Albertsen et al、2015 link)。これは、PCRサイクルが増えると見かけの豊富さが増すことを報告している別の研究とは対照的である(Ahn et al、2012 link)。しかしながら、これはPCRの成分が制限的になったときに起こると思われるキメラ配列のような PCRアーティファクトの形成に起因し得るかもしれない。
  • キメラ配列は、伸長が1回のPCRサイクル内に完了せず、次のサイクルでそのDNAフラグメントがサンプル中に存在する別の分類群の鋳型DNAに結合し、プライマーとして働くときに生成される。
  • 最大45%のキメラを有するライブラリーが見出されたので、キメラ配列はPCR産物の実質的な部分であり得、これがさらなる分類群として誤って解釈され得る(Ashelford et al、2006 link)。キメラ形成は複雑なコミュニティでは定量化できないため、関連するエラーを修正することはできない。結論として、PCRサイクル数を制限することによってキメラ形成を最小限に抑え、そして以下に論じるように適切なシーケンス分析によって残りのキメラを最大限フィルタリングすることが有益である。
  • 別の種類のPCRアーティファクトはキメラより頻度が低いヘテロ配列間のハイブリダイゼーションから生じるヘテロ二本鎖分子である(Qiu et al、2001 link)。 DNAはシーケンシング前に変性されるので、イルミナのシーケンシングやパイロシーケンシングのような一般的なNGS法で得られる相対量には影響しない。この結論は、SMRT PacbioシーケンシングまたはOxford nanoporeシーケンシングのように、シーケンシングにdsDNAを使用する方法では異なってくるかもしれない。ヘテロ二本鎖の形成は、上述のようにPCRサイクル数を減らし、高DNAテンプレート濃度を避けることによって減らすことができる(Thompson、2002)。

 

2.3   16S rRNAオペロンコピー数の変動に関連したエラーの修正と定量

  • 相対的および絶対的な分類群特異的なゲノム存在量の定量化に16S rRNA遺伝子を使用することの先天的なバイアスは、株特異的な16S rRNAオペロンコピー数の変動で(Kembel et al、2012 link)、バクテリアについては1-17コピー、アーキアについては1〜4コピー報告されている(Stoddard et al、2015 link)。
  • 特定の分類群ゲノム当たりでより高い16S rRNAオペロンコピー数があると、この分類群のより高い相対的および絶対的ゲノム存在量として現れるだろう。したがって、例えば、rrnDBデータベースを使用することによって、ゲノムあたりの株特異的な16S rRNAオペロンコピー数の補正が必要である(Stoddard et al、2015 link)。
  • ゲノムごとの株特異的な16S rRNAオペロンコピー数の補正は、データがすべての株について利用可能ではないこと、およびOTUを分類学的に株レベルでアサインできないため不完全である。株特異的な数が欠けている場合、それぞれのより高い分類ランクについて中央値または平均コピー数のいずれかを使用することができる。しかし、これは不正確さにつながる。
  • ここでは、株特異的な16S rRNA遺伝子の補正の効果を説明するために、3つのデータセットを例として説明する。A(Klassen et al、2017)、B(Maus et al、2017)およびC(Müller et al、2016)を使用した(詳細は、追加ファイル1、章A.2を参照)。本発明者らの例では、コピー数補正により、相対的16S rRNA遺伝子存在量と比較して相対的ゲノム存在量が平均で22%変化したが、すべての分類群について一様ではなかった(論文 図1a)。(以下省略)

 

アンプリコンシークエンシングにのみ関連するエラー
3.1   シーケンシング技術が相対的遺伝子量に与える影響

  • 454パイロシーケンシング、Illumina、IonTorrent、およびPacBioなどのNGSプラットフォームでは、DNAのシーケンスに異なる原則が採用されている(Goodwin et al、2016)。これは次に、リード長とクオリティ、ならびにシーケンシングデプスに実質的に違いをもたらし、それはコミュニティ構成推定に影響を与える。
  • シーケンシング技術により配列長が制限されているので、16S rRNA遺伝子の可変領域のサブセットのみが標的とされる。これは、上記のようにプライマーの選択と強く関連している。
  • リードのクオリティは、シーケンシングプラットフォームに大きく依存している。例えば、頻繁に使用されるMiSeq Illuminaシーケンスプラットフォームは、1%未満のシーケンスエラー率に関連している(Schirmer et al、2016 link)。
  • NGSプラットフォームのシーケンシングデプスは、そのリード数によって異なるが、通常は数千から数百万リードである。より多くのリードが読まれると、よりまれな分類群が検出され、より高い見かけの豊富さが生み出される(Claesson et al、2010 link)。それにもかかわらず、バイオインフォマティック分析では、まれな分類群検出の効率と人為的な分類群(誤ったシーケンス)除去との間にはトレードオフの関係がある。さらなる議論については(Zhan and MacIsaac、2015 link)を参照のこと。
  • 稀な分類群とはさておき、異なるシーケンシングプラットフォームで同じプライマーペアを適用した場合、同じ分類群が検出された(D'Amore et al、2016; Tremblay et al、2015)。
  • 結論として、まれな分類群を標的とするために十分なシーケンシングデプスが必要であり、シーケンシングエラーはマイナーなエラーソースとしてのみ考えられる。しかしながら、リード長による限界のために、シーケンシングプラットフォームはNGSプラットフォーム自体よりも大きな影響を与えるプライマーの選択を制限する(Hiergeist et al。、2016)。

 

3.2   NGSデータ分析に関連したエラーの回避

  • ウェットラボの手順によるバイアスに加えて、データ処理中にエラーが発生する可能性がある。アンプリコンシーケンシングデータの分析のために、いくつかのパイプラインが利用可能である。異なるパイプラインはかなり異なる相対的な16S rRNA遺伝子量をもたらす(Golob et al、2017; Plummer and Twin、2015; Werner et al、2012)。ここでは、アンプリコンシーケンスデータの解析中に発生する可能性があり、特定の解析パイプラインに限定されない一般的なバイアスに焦点を当てる。

 

3.2.1   低クオリティおよびキメラ配列のフィルタリング

  • rawリードのクオリティ管理、すなわち低クオリティおよびキメラ配列のフィルタリングは、すべてのパイプラインに共通している。キメラ配列は全てのリードのかなりの部分を占めることがあり得るので、それらの除去は重要である。
  • 培養細菌および古細菌の16S rRNA遺伝子配列を含むデータベース(e.g., the Gold reference collection)を使用して、キメラについて配列をフィルタリングすることができる。しかしながら、すべてのキメラ配列がこのアプローチによって検出されるわけではない(Ahn et al、2012)。さらに、このデータベースによるキメラ検出は、微生物コミュニティがまだ培養されていない有機物を含む場合にはうまく機能しない(Schloss et al、2011)。
  • キメラ検出効率を高めるために、場合によりデータベースの検出と組み合わせて、新たな検出方法を適用することができる(Schloss et al、2011 link)。しかしながら、まだ全てのキメラを検出することができるわけではないので(Haas et al、2011)、上記のようにPCR条件を適切に調整することによってキメラ形成を減少させることが重要である。
  • 結論として、キメラ形成は、最初にPCR条件を最適化することによって減少させる必要がある。残りのキメラ配列の全部ではないがかなりの部分をデータ分析中に除去することができる。多くの記述されていない微生物を含む微生物コミュニティについては、参照ベースの検出と任意に組み合わせたde novo検出方法を適用すべきである。

 

3.2.2   OTUクラスタリング

  • フィルタリングされたシーケンスは、シーケンスの類似性に従ってOTUにまとめられる。クラスタリングのためには、一般に認められている種の定義(Callahan et al。、2017 link)に基づくのではなく、arbitraryな16S rRNA遺伝子配列類似性の閾値97%が用いられる。それゆえ、異なる種が同じOTUにアサインされたり、または、1つ​​の種の16S rRNAオペロンのバリエーションにより1つ​​の種がいくつかのOTUにアサインされることがあり得る。
  • クラスタリングの後、OTUごとに1つの代表的なシーケンスが選択され、分類学的にアサインされる。各OTUに対する代表的なシーケンスの選択の効果は、論文 図1bに示されている。 QIIME分析における標準として、OTUを定義するためにこれまで使用されてきたcentroid sequence (*1)が代表として取られる。あるいは、最長で最も豊富な配列を選択することができる。
  • OTUあたり最も豊富な配列が選択された場合、データセットCを除いて、相対16S rRNA遺伝子存在量は平均0.3%変化する。ここでは、5%の平均変化は、未分類OTUの割合が高いことに起因している。
  • 誤ったアサインをもたらすOTUクラスタリングのための任意の閾値設定を回避するために、DADA2のような最近開発された分析パイプラインは、OTUクラスタリングを完全に回避し、代わりに1ヌクレオチド配列差までの配列変動を説明する(Callahan et al、2016)。
  • OTUクラスタリングアプローチおよび正確な配列推論から導き出された例示的なデータセットのコミュニティ組成は、相対的な16S rRNA遺伝子存在量の比較と平均45%異なっていた(論文図1b参照)。腸ミクロバイオームサンプルについても同様の差異が報告された(Allali et al。、2017)。
  • 結論として、本著者らのデータセットに基づいて、OTUクラスタリングフリーアプローチは、任意の配列類似性閾値の設定を回避するために使用されるべきである。 OTUクラスタリングが必要な場合は、最も豊富なシーケンスを選択しないでください。代わりに、各OTUのcentroid sequenceを代表シーケンスと見なす必要がある。

 

3.2.3   taxonomyアサインメントに対する16S rRNAデータベースの影響

  • 代表的な配列を選択するか正確な配列を推論した後、これらはtaxonomicデータベースに対して分類される。データベースの選択は観察されたコミュニティ構成に強い影響を与えた(論文 図1c)。
  • Greengenes  taxonomy (HP) の代わりにSILVAまたはSILVAベースのMiDAS(Microbial Database for Activated Sludge)を使用した場合、相対的な16S rRNA遺伝子量は平均で9%変化した。以前の報告はまた、分類学的割り当てのための異なるデータベースが異なるコミュニティ構成を与えることを示した(Werner et al、2012)。
  • 最新のGreengenesバージョンは2013年のものであり[ref.25]、最近発表された微生物の16S rRNA配列を欠いているため、データセットによっては問題がある。
  • SILVA、RDP、そしてMiDASはもっと最新のものである。 RDPデータベースを使用すると、本exampleデータセットの場合、分類されていないOTUの数が大幅に増加するため、お勧めできない。 MiDASデータベースはSILVAデータベース上に構築されており、活性汚泥、嫌気性消化槽、および流入廃水中に存在する分類群に合わせて修正されており(McIlroy et al、2015 link、McIlroy et al。、2017 link)、このようなデータセットと嫌気性digesterのサンプルに向いている。
  • MiDASと同様に、他の専用のデータベースが存在する。例えば、ヒトの腸内(Ritari et al、2015 link)、ヒト口腔内(Chen et al、2010 link)、およびミツバチの腸内(Newton and Roeselers、2012 link)微生物コミュニティのデータベースが存在する。

 

4.   qPCRデータ解析にのみ関連するエラー

  • qPCRについては、ハイブリダイゼーションプローブ(TaqMan(TM)プローブとも呼ばれる)およびSYBR Greenなどのインターカレート色素の2つのレポーター系が一般的に使用される(Smith, and Osborn、2009 link)。インターカレート色素は、すべてのアンプリコンに非特異的に結合する。したがって、PCR後のmelting curve分析は、標的遺伝子のみが定量化され、プライマー二量体などの非特異的PCR産物は定量化されていないことを確認する必要がある(Smith、and Osborn、2009)。
  • ハイブリダイゼーションプローブは、標的遺伝子上の保存された部位に結合するように設計されており、確実に標的遺伝子のみが定量される(Smith、and Osborn、2009)。しかしながら、そのような保存された部位は、潜在的に未知のメンバーとの混合コミュニティの様々なメンバーに存在する標的遺伝子については存在しないかもしれない。ここでは、プローブはすべてのメンバーの16S rRNA遺伝子に不均等に結合し、偏った結果につながる可能性がある。
  • qPCRによる絶対遺伝子定量のためには、外部スタンダードが必要になる。スタンダードの蛍光と比較したサンプルの蛍光から、サンプル中の16S rRNA遺伝子コピー数を決定する。 qPCRスタンダードは、関心のある微生物群の単一のメンバーまたはメンバーの混合物のいずれか由来の、既知の数の16S rRNA遺伝子を含む。
  • 16S rRNA遺伝子は、精製PCR産物またはプラスミドインサートの形態であり得る。プラスミド標準は線状化でき、それは微細藻類を定量するときにより正確な結果を与えた(Hou et al、2010 link)。
  • その研究において、線状化してないスタンダードだと、標的遺伝子コピー数を777%過大評価した。しかし、2つのバクテリア種と2つのアーキア種を対象とした研究では、環状プラスミドを用いた系統的な過大評価は見られず、線状化、スーパーコイルまたはニックプラスミドまたは精製PCR産物いずれを用いても同様の絶対遺伝子数が得られた(Oldham and Duncan、2012 link)。 
  • 理想的には、コミュニティの構成を表す新しいスタンダードは各サンプルから個別に作成される。しかしながら、これは資源集約的であり、それ故、単一種からのスタンダードを使用することは一般的である。しかしながら、例えば、10%増幅効率が低いと、 275%過大評価された絶対遺伝子コピー数を生じ得る(Pérezet al、2013 link)。より低い増幅効率はまた、サンプルマトリックス中の阻害剤によっても引き起こされ得る。
  • 全ての個々の試料およびスタンダードの増幅効率は、例えば、文献に記載されているように(Brankatschk et al、2012)、LinReg PCR Programを用いて決定することができる。増幅効率の差が検出された場合、それを例えば一点較正によって(Brankatschk et al、2012)または希釈したDNA鋳型濃度で分析を繰り返すことによって補正する必要がある。一点較正方法を適用するための便利なスプレッドシートは、追加ファイル2に提供されている。このスプレッドシートはまた、効率の差の誤差および上述した他の誤差を推定するために使用することができる。
  • qPCRにおけるスタンダードとサンプル間の増幅効率の違いの問題は、スタンダードを必要としない、デジタルPCR(dPCR)を使用することによって回避することができる(Kim et al、2015 link)。
  • 単一の分類群の絶対的なゲノム存在量は、特異的プライマー対を用いたqPCRによって得ることができる。しかしながら、混合培養において、標的とされたもの以外の分類群がさらに増幅される可能性があり、不正確な定量結果をもたらす。ハイブリダイゼーションプローブの使用はこの問題を軽減することができる。さらに、同じプライマーペアを用いたアンプリコンシークエンシングを用いて、単一の分類群の絶対的ゲノム存在量に対する非特異的増幅の影響を同定および補正することができる。
  • qPCRデータの公表は、“minimum information for publication of quantitative real-time PCR experiments”(MIQE)に従うべきである(Bustin et al、2009 link)。特に、qPCRの生データの公表がに望まれる。これは、公表後の誤差推定および増幅効率の差に対する補正を可能にするためである。
  • 結論として、qPCRには、合計で数桁の差を引き起こす可能性のあるエラーソースがいくつかある。スタンダードとサンプルの増幅効率の違いは無視されることが多いが、1点キャリブレーションで補正できる。線状プラスミド、環状(スーパーコイルまたはニック入り)プラスミドまたはPCR産物のいずれかを原核生物のスタンダードとして使用することができる。上記のエラーを回避するのに役立つ決定木が論文図2に提供されている。

 

5.   環境パラメータに基づく妥当性チェックによるエラー識別

  • 絶対的な分類群特異的ゲノム存在量の定量は、数桁までの誤差を生じ得る。したがって、妥当性チェックは、結果を検証し、誤ったデータに基づく結論を回避するために強く望まれる。
  • プロセスパラメータおよび環境条件に基づいて絶対バイオマス濃度を推定するためにいくつかの方法が利用可能である。嫌気性消化モデルNo.1(Batstone et al、2002)などの数学モデルを使用して微生物バイオマスを予測することができる。ただし、そのようなモデルでは入力として詳細な情報が必要である。情報が乏しいシステムには、ブラックボックスアプローチ、特に熱力学的考察を含む方法がより適している(Heijnen、2013; Kleerebezem and Van Loosdrecht、2010 link)。
  • 単純な妥当性チェックの例を論文図3に示す。これらの推定は、任意の微生物細胞の異化は電子輸送の最大速度によって制限されるという仮定に基づいていた(Heijnen、2002)。この仮定の下で、蒸解缶で測定されたメタン量を生成するのに必要な最小セル数を計算した(詳細については、論文追加ファイル1、セクションA.4を参照)。細胞数の遺伝子コピーへの変換のために、各細胞は保守的に1つのアーキア16S rRNA遺伝子コピーを含むと仮定された。
  • アーキアの16S rRNA遺伝子のコピー数は、Nettmann et al (2010) (link) の推定最小コピー数よりかなり上にある。しかし、Lee et al (2011) (link) によって測定されたコピー数は、推定された最小値よりも桁違いに小さい。これは、それらの結果が、サンプリングされた蒸解カンの絶対量を過小評価している可能性が高いことを示している。その研究ではDNA抽出効率は考慮されていなかったが、このことがコピー数が信じられないほど低かった理由なのかもしれない。
  • この例は、もっともらしい定量結果を識別するために、どのようなシンプルな妥当性チェックが使用できるかを示している。そのような妥当性チェックはメタン生成環境に限定されない。例えばKleerebezem and Van Loosdrecht(2010)は、電子受容体として酸素、硝酸塩、硫酸塩、二酸化炭素のいずれかを使う、61の有機化合物のバイオマス収量推定値を示した。

 

6.   ゲノム存在量を細胞数およびバイオマスに変換することに関連するエラー

  • 理想的には、分類群特異的なゲノム存在量をより具体的な細胞数に変換することができる。しかしながら、これは倍数性に関する分類群特異的な情報、すなわち細胞当たりのゲノムコピー数を必要とする。原核生物は歴史的にmonoploid(細胞あたり1ゲノムコピー)と考えられてきた(Pecoraro et al、2011)。しかしながら、最近のいくつかの研究では、oligoploid(1細胞あたり10ゲノムコピー未満)およびpolyploid(1細胞あたり10ゲノムコピー以上)のアーキアおよびバクテリアが発見され、monoploidの原核生物はむしろ例外的であると思われる(Soppa、2014)。
  • 倍数性の補正は困難である。倍数性は、1つの属、例えばDesulfovibrio内およびNeisseria内でさえ異なり得る(Pecoraro et al、2011)。さらに、種の倍数性は、細胞周期の間に1から2の間で変わるだけでなく、異なる増殖期の間で大きく異なることがありえる。例えばMethanocaldococcus jannaschiiの、exponential phaseの細胞あたり3から15コピーから、stationary phaseの細胞あたり2から4ゲノムコピーの報告がある(Pecoraro et al、2011 link)。
  • 分類群特異的な倍数性は、純粋培養にて、qPCRと細胞計数と組み合わせることによって実験的に決定されている(Pecoraro et al、2011)。複雑なコミュニティでは、qPCRをfluorescence-activated cell sortingと組み合わせることができるだろう。
  • フローサイトメトリーに由来する絶対細胞数を分類群特異的な16S rRNAゲノム存在量と組み合わせることによって、複雑なコミュニティから分類群特異的細胞数を導き出すことが最近示唆された(Props et al、2017 link)。しかしながら、この方法は、すべての分類群で同じ倍数性を必要とし、原核生物において見出される倍数性の高い分散(Pecoraro et al、2011)を考慮できそうにない。
  • 上記のように、mechanistic models は微生物を細胞ではなくバイオマスと見なすことが多いが、種が豊富で複雑な微生物コミュニティの分類群特異的なバイオマスを実験的に決定することは困難である。それにもかかわらず、原核細胞の質量は数桁の大きさで変化する可能性があるため、細胞数とバイオマスの違いを無視してはならない(Loferer-Krößbacheret al、1998 link)。
  • 分類群特異的バイオマスは、デジタル画像分析と組み合わせたFISHによって決定された細胞体積から推測できる(Daims、2009)。 FISHに加えて、メタプロテオミクスが分類群特異的バイオマス定量のための方法として最近提案されている(Kleiner et al、2017)。
  • 結論として、細胞あたりの分類群特異的平均ゲノムコピー数およびバイオマスは分類群間で実質的に異なり得、そしてこの事実を無視すると、最大10,000%の誤差をもたらし得る。ゲノム量と細胞数およびバイオマスとの間の正確な変換は依然として課題である。

 

結論

 相対的および絶対的な分類群特異的ゲノム存在量は、微生物コミュニティの動態を研究するための重要なパラメータだが、PCRに基づくアプローチによるそれらの定量は、数桁に達する可能性があるいくつかの潜在的な誤差を有する。 これらのエラーとそれらを回避または軽減するための推奨される対策は論文表1にまとめている。多くのエラーは、適切なデータ分析によってすでに軽減されている。 他の人たちはDNA抽出効率を評価するために既知の微生物のスパイクのような追加の実験的努力を必要とする。 バクテリアアーキアに異なるプライマーペアを使用することは正確な分析には不可欠だが、かなりの実験的努力が必要となる。 分類群特異的ゲノム存在量の細胞数およびバイオマスへの正確な変換は、それらを数学モデルで使用するために重要であるが、依然として課題がある。 フローサイトメトリー、FISHおよびメタプロテオミクスは、将来この問題を解決するために貴重な、培養に依存しない方法で貢献をもたらすかもしれない。

 

論文

PCR-based quantification of taxa-specific abundances in microbial communities: Quantifying and avoiding common pitfalls

Bonk F, Popp D, Harms H, Centler F

J Microbiol Methods. 2018 Oct;153:139-147

 

*1

http://readiab.org/book/0.1.3/2/5#1.3 より

For example, if we have a group of 16S rRNA reads that are within 97% identity to one member of that cluster (the cluster centroid) we may assume that the taxonomic origin of the cluster centroid is the same as the taxonomic origin of all of the sequences in the group. This is an assumption - it may or may not be true - but it is a necessary evil given the current technology.

植物RNA seqシーケンシングデータからvirusリードを検出する kodoja

 

Kodojaはk-merプロファイリングを使用してRNA-seqまたはsRNA-seのfastq/fasta生データからウイルス配列を特定するツール。 k-merを用いた系統分類ツールKrakenとおよびタンパク質レベルでの配列マッチングのKaijuを組み合わせている(Burrows-Wheeler変換している)。

 

 

wiki

https://github.com/abaizan/kodoja/wiki/Kodoja-Manual

 

インストール

mac os10.14のminiconda3-4.3.30環境でテストした。

依存

You can use Python 2.7 or Python 3, specifically Kodoja has been tested on Python 3.6.

  • FastQC v0.11.5
  • Trimmomatic v0.36
  • Kraken v1.0
  • Kaiju v1.5.0
  • Python packages:
  • numpy v1.9
  • biopython v1.67
  • pandas v0.14
  • ncbi-genome-download v0.2.6

 

本体 Github

#Anaconda環境でcondaを使い導入、公式では仮想環境を使っているが、ここでは直接導入
conda install -y -c bioconda kodoja

> kodoja_search.py -h

$ kodoja_search.py -h

usage: kodoja_search.py [-h] [--version] -o OUTPUT_DIR -d1 KRAKEN_DB -d2

                        KAIJU_DB -r1 READ1 [-r2 READ2] [-f DATA_FORMAT]

                        [-t THREADS] [-s HOST_SUBSET] [-m TRIM_MINLEN]

                        [-a TRIM_ADAPT] [-q KRAKEN_QUICK] [-p]

                        [-c KAIJU_SCORE] [-l KAIJU_MINLEN] [-i KAIJU_MISMATCH]

 

Kodoja Search is a tool intended to identify viral sequences

in a FASTQ/FASTA sequencing run by matching them against both Kraken and

Kaiju databases.

 

optional arguments:

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

  --version             show program's version number and exit

  -o OUTPUT_DIR, --output_dir OUTPUT_DIR

                        Output directory path, required

  -d1 KRAKEN_DB, --kraken_db KRAKEN_DB

                        Kraken database path, required

  -d2 KAIJU_DB, --kaiju_db KAIJU_DB

                        Kaiju database path, required

  -r1 READ1, --read1 READ1

                        Read 1 file path, required

  -r2 READ2, --read2 READ2

                        Read 2 file path

  -f DATA_FORMAT, --data_format DATA_FORMAT

                        Sequence data format (default fastq)

  -t THREADS, --threads THREADS

                        Number of threads (default 1)

  -s HOST_SUBSET, --host_subset HOST_SUBSET

                        Subset sequences with this tax id from results

  -m TRIM_MINLEN, --trim_minlen TRIM_MINLEN

                        Trimmomatic minimum length

  -a TRIM_ADAPT, --trim_adapt TRIM_ADAPT

                        Illumina adapter sequence file

  -q KRAKEN_QUICK, --kraken_quick KRAKEN_QUICK

                        Number of minium hits by Kraken

  -p, --kraken_preload  Kraken preload database

  -c KAIJU_SCORE, --kaiju_score KAIJU_SCORE

                        Kaju alignment score

  -l KAIJU_MINLEN, --kaiju_minlen KAIJU_MINLEN

                        Kaju minimum length

  -i KAIJU_MISMATCH, --kaiju_mismatch KAIJU_MISMATCH

                        Kaju allowed mismatches

 

The main output of ``kodoja_search.py`` is a file called ``virus_table.txt``

in the specified output directory. This is a plain text tab-separated table,

the columns are as follows:

 

1. Species name,

2. Species NCBI taxonomy identifier (TaxID),

3. Number of reads assigned by *either* Kraken or Kaiju to this species,

4. Number of Reads assigned by *both* Kraken and Kaiju to this species,

5. Genus name,

6. Number of reads assigned by *either* Kraken or Kaiju to this genus,

7. Number of reads assigned by *both* Kraken and Kaiju to this genus.

 

The output directory includes additional files, including ``kodoja_VRL.txt``

(a table listing the read identifiers used) which is intended mainly as

input to the ``kodoja_retrieve.py`` script.

> kodoja_build.py -h

kazuma@kamisakumanoMBP:~/Documents/metagenome_simulation$ kodoja_build.py -h

usage: kodoja_build.py [-h] [--version] -o OUTPUT_DIR [-t THREADS]

                       [-p HOST_TAXID] [-d DOWNLOAD_PARALLEL] [-n]

                       [-e [EXTRA_FILES [EXTRA_FILES ...]]]

                       [-x [EXTRA_TAXIDS [EXTRA_TAXIDS ...]]] [-v]

                       [-b KRAKEN_TAX] [-k KRAKEN_KMER] [-m KRAKEN_MINIMIZER]

                       [-a DB_TAG]

 

Kodoja database construction

 

optional arguments:

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

  --version             show program's version number and exit

  -o OUTPUT_DIR, --output_dir OUTPUT_DIR

                        Output directory path, required

  -t THREADS, --threads THREADS

                        Number of threads, default=1

  -p HOST_TAXID, --host_taxid HOST_TAXID

                        Host tax ID

  -d DOWNLOAD_PARALLEL, --download_parallel DOWNLOAD_PARALLEL

                        Parallel genome download, default=4

  -n, --no_download     Genomes have already been downloaded

  -e [EXTRA_FILES [EXTRA_FILES ...]], --extra_files [EXTRA_FILES [EXTRA_FILES ...]]

                        List of extra files added to "extra" dir

  -x [EXTRA_TAXIDS [EXTRA_TAXIDS ...]], --extra_taxids [EXTRA_TAXIDS [EXTRA_TAXIDS ...]]

                        List of taxID of extra files

  -v, --all_viruses     Build databases with all viruses (not plant specific)

  -b KRAKEN_TAX, --kraken_tax KRAKEN_TAX

                        Path to taxonomy directory

  -k KRAKEN_KMER, --kraken_kmer KRAKEN_KMER

                        Kraken kmer size, default=31

  -m KRAKEN_MINIMIZER, --kraken_minimizer KRAKEN_MINIMIZER

                        Kraken minimizer size, default=15

  -a DB_TAG, --db_tag DB_TAG

                        Suffix for databases

> kodoja_retrieve.py -h

$ kodoja_retrieve.py -h

usage: kodoja_retrieve.py [-h] [--version] -o FILE_DIR -r1 READ1 [-r2 READ2]

                          [-f USER_FORMAT] [-t TAXID] [-g] [-s]

 

Kodoja Retrieve is used with the output of Kodoja Search to

give subsets of your input sequencing reads matching viruses.

 

optional arguments:

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

  --version             show program's version number and exit

  -o FILE_DIR, --file_dir FILE_DIR

                        Path to directory of kodoja_search results, required

  -r1 READ1, --read1 READ1

                        Read 1 file path, required

  -r2 READ2, --read2 READ2

                        Read 2 file path, default: False

  -f USER_FORMAT, --user_format USER_FORMAT

                        Sequence data format, default: fastq

  -t TAXID, --taxID TAXID

                        Virus tax ID for subsetting, default: All viral

                        sequences

  -g, --genus           Include sequences classified at genus

  -s, --stringent       Only subset sequences identified by both tools

 

The main output of ``kodoja_search.py`` is a file called ``virus_table.txt``

(a table summarising the potential viruses found), but the specified output

directory will also contain ``kodoja_VRL.txt`` (a table listing the read

identifiers). This second file is used as input to ``kodoja_retrieve.py``

along with the original sequencing read files.

 

A sub-directory ``subreads/`` will be created in the output directory,

which will include either FASTA or FASTQ files named as follows:

 

* ``subset_files/virus_all_sequences1.fasta`` FASTA output

* ``subset_files/virus_all_sequences1.fastq`` FASTQ output

 

And, for paired end datasets,

 

* ``subset_files/virus_all_sequences2.fasta`` FASTA output

* ``subset_files/virus_all_sequences2.fastq`` FASTQ output

 

However, if the ``-t 12345`` option is used rather than ``virus_all_...``

the files will be named ``virus_12345_...`` instead.

kodoja_build.pyはウイルス/宿主ゲノムをダウンロードして、新しいKrakenデータベースとKaijuデータベースを作成するコマンド。 kodoja_retrieve.pyはサーチ結果から関心のあるシーケンスを取り出すコマンド。

 

データベースの作成

mkdir kodojaDB_v1.0
cd kodojaDB_v1.0/
wget https://zenodo.org/record/1406071/files/kodojaDB_v1.0.tar.gz
tar -zxvf kodojaDB_v1.0.tar.gz

  

実行方法

クエリのfastqとデータベースを指定して実行する。

kodoja_search.py --kraken_db krakenDB/ --kaiju_db kaijuDB/\
--read1 pair_R1.fastq --read2 pair_R2.fastq\
-o out_dir

>  column -t out_dir/virus_table.txt

$ column -t out_dir/virus_table.txt 

Species  Species  TaxID   Species  sequences  Species  sequences  (stringent)  Genus       Genus  sequences  Genus  sequences  (stringent)

Cassava  brown    streak  virus    137758     45       45         Ipomovirus   0           0

Ugandan  cassava  brown   streak   virus      946046   28         28           Ipomovirus  0      0

Tobacco  etch     virus   12227    19         19       Potyvirus  0            0

 

Galaxyでも使えるようです。マニュアルwikiを読んでください。

引用

https://github.com/abaizan/kodoja

 

関連ツール


 

 

 

 

バクテリアシーケンシングデータの種間、種内汚染を検出する ConFindr

 

 ConFindrはバクテリア種間およびバクテリア種内のNGSデータの汚染を検出できるパイプライン。かなり良い感受性で実行でき、 2つのサンプルを混ぜ合わせ、それらの間にわずか500のSNP(> 99.9%同一!)がある場合でも同定することができる。これにより、NGSサンプルの厳格な品質管理が可能になる。ConFindrはrMLST遺伝子を調べることで機能する(Jolley et al、2012 pubmed)(rMLST: バクテリアリボソームタンパク質サブユニット(rps遺伝子)をコードする53の遺伝子)。これらの53個の遺伝子はシングルピーであり、ほぼすべてのバクテリアで保存されていることが知られているため(いくつかの例外があるが、ConFindrはハンドリングできる)、素晴らしいマーカーとなる。それらはシングルコピーであることが知られているので、複数rMLST遺伝子があると汚染されていると考えられる。1サンプル中に複数のアレルがあるかどうか同定するために、以下のワークフローが行われる:

1、属特異的rMLSTデータベースを構築し、種間汚染をチェックするためにMashを使用して各サンプルの属を決定する。
2、厳しい条件でクオリティトリミングを実行し、BBDukを使用してrMLST遺伝子配列を含むリードを取り出す。
3、rMLST遺伝子にアライメントする。
4、アラインメントを見て、コンタミネーティングSNV - 複数のアレルが存在し、汚染を示すことを示す複数の塩基が存在する部位を有するSNVを見つける。

 

Document

https://lowandrew.github.io/ConFindr/

 

インストール

mac os10.12の miniconda3-4.0.5環境でテストした。

依存

本体 GIthub

 

#anaconda環境ならcondaで導入できる
conda install -y -c bioconda confindr

 > confindr.py -h

$ confindr.py -h

usage: confindr.py [-h] -i INPUT_DIRECTORY -o OUTPUT_NAME [-d DATABASES]

                   [-t THREADS] [-k] [-fid FORWARD_ID] [-rid REVERSE_ID] [-v]

                   [-verbosity {debug,info,warning}]

 

optional arguments:

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

  -i INPUT_DIRECTORY, --input_directory INPUT_DIRECTORY

                        Folder that contains fastq files you want to check for

                        contamination. Will find any fastq file that contains

                        .fq or .fastq in the filename.

  -o OUTPUT_NAME, --output_name OUTPUT_NAME

                        Base name for output/temporary directories.

  -d DATABASES, --databases DATABASES

                        Databases folder. If you don't already have databases,

                        they will be downloaded automatically. You may also

                        specify the full path to the databases.

  -t THREADS, --threads THREADS

                        Number of threads to run analysis with.

  -k, --keep_files      By default, intermediate files are deleted. Activate

                        this flag to keep intermediate files.

  -fid FORWARD_ID, --forward_id FORWARD_ID

                        Identifier for forward reads.

  -rid REVERSE_ID, --reverse_id REVERSE_ID

                        Identifier for reverse reads.

  -v, --version         show program's version number and exit

  -verbosity {debug,info,warning}, --verbosity {debug,info,warning}

                        Amount of output you want printed to the screen.

                        Defaults to info, which should be good for most users.

 

 

実行方法

1、テストデータダウンロード

wget https://ndownloader.figshare.com/files/9972709 && tar xf 9972709 && rm 9972709

>ls -alh  

$ ls -alh example-data/

total 612696

drwxr-xr-x    4 kazuma  staff   128B 12 13  2017 .

drwx------+ 160 kazuma  staff   5.0K 12  8 21:29 ..

-rw-r--r--    1 kazuma  staff   150M 12 13  2017 example_R1.fastq.gz

-rw-r--r--    1 kazuma  staff   150M 12 13  2017 example_R2.fastq.gz

ペアエンドfastqだけ用意すればよい。

 

2、confindr実行

confindr.py -i example-data -o example-out

 出力

$ ls -alth example-out/

total 56

drwx------+ 470 user  staff    16K 12 15 16:35 ..

drwxr-xr-x    6 user  staff   204B 12 15 11:57 .

-rw-r--r--@   1 user  staff   144B 12 15 11:57 confindr_report.csv

-rw-r--r--@   1 user  staff   755B 12 15 11:57 example_contamination.csv

-rw-r--r--    1 user  staff    13K 12 15 11:57 confindr_log.txt

-rw-r--r--@   1 user  staff   731B 12 15 11:57 example_rmlst.csv

 

confindr_report.csv

f:id:kazumaxneo:20181215163339j:plain

example_contamination.csv

f:id:kazumaxneo:20181215163510j:plain
example_rmlst.csv

f:id:kazumaxneo:20181215163437j:plain

 

バージョン0.4.4からrMLSTの代わりにcgMLST(core genome MLST)を使うオプションも実装されている。詳細はGithubで確認してください。

引用

GitHub - lowandrew/ConFindr: Intra-species bacterial contamination detection

 

HIVのアミノ酸配列にアライメントを行う NucAmino

 

 ヒト免疫不全ウイルス1型(HIV-1)療法の分子標的は逆転写酵素(RT)、プロテアーゼおよびインテグラーゼを含む。これら遺伝子は臨床ラボで最も一般的にシーケンシングされた遺伝子の1つである。多くの国で、これらの遺伝子は、HIV-1薬物療法を開始する前の患者および治療中のウイルス障害を有する患者において、日常的にシーケンシングされる。このようなシーケンシングは、通常、直接ポリメラーゼ連鎖反応(PCR)とサンガーシーケンシングを用いて行われる。次いでヌクレオチド配列を参照アミノ酸配列にアライメントさせて、薬物感受性の低下に関連するアミノ酸置換、挿入および欠失を同定する。

 現在のLocal Alignment Program(LAP)[論文より、ref.1]やGeneWise [ref.2]などのヌクレオチドからアミノ酸へのアライメントプログラムは、主に真核生物ゲノムの遺伝子エクソンを検出するために開発されたため、長い遺伝子配列をスピーディに検索したりイントロン - エクソン境界を識別することに焦点が置かれている。著者らは、遺伝子発見よりもむしろウイルスシーケンシングのために最適化されたヌクレオチド - アミノ酸アラインメントプログラムを開発しようとした。本著者らのプログラムは、電気泳動でもmixureになってしまうため、通常シーケンシングされたサンプル内に複数のウイルス変異体を反映しIUPACの曖昧なコドンに対処可能なようにデザインされた。

 さらに重要なことに、ウイルスのgenotypingでは、最適化されたアラインメントで挿入または欠失が置かれるポジションとは異なる特定のポジションに、特定の挿入または欠失が配置される必要がある。例えば、残基64〜72のHIV-1 RTβ3-β4ループにおける挿入は、伝統的に残基69に配置される。なぜなら、ほとんどの遺伝子型耐性解釈ソフトウェアは、この挿入(しかし、近くの同様の挿入では扱わない)をいくつかの逆転写阻害剤[ref.3,4]に高い耐性なるものとして扱うためである。この問題は、非常に可変性のウイルスでは、indels周辺のヌクレオチドおよびアミノ酸の変化が、ペアワイズアライメントでのindel配置にしばしば影響するために生じる。

 ここでは、ウイルスヌクレオチド配列をリファレンスアミノ酸配列にアライメントさせるために設計されたNucAminoと呼ばれるプログラムについて説明する。著者らは115,118人からのHIV-1分析についてこのプログラムの性能をLAPと比較する。また、これらの配列を用いてNucAminoをJAlignerと比較した。これは、2つのヌクレオチド配列をアライメントさせるためのSmith-Watermanアルゴリズムの一般的な実装である[ref.5,6]。我々(著者ら)は、NucAminoが、電気泳動mixtureを含むpolymorphicなウイルス配列を扱い、HIV-1遺伝子型耐性試験を実施する臨床検査ラボに有用な可能性が高いことを示す。

 

インストール

mac os10.14のminiconda2-4.0.5環境でテストした。

依存

NucAmino is a program written in Go programming language. You need to have Go installed to compile it.

 本体 Github

 

#Anaconda環境ならcondaで導入できる
conda install -c bioconda -y nucamino

> nucamino --help

$ nucamino --help

Usage:

  nucamino [OPTIONS] <hiv1b>

 

Help Options:

  -h, --help  Show this help message

 

Available commands:

  hiv1b  Align HIV-1 type B sequences

 

> nucamino hiv1b -h

$ nucamino hiv1b -h

Usage:

  nucamino [OPTIONS] hiv1b [hiv1b-OPTIONS]

 

Use HIV-1 type B consensus from LANL to align input sequences; support genes POL (56gag + 99PR + 560RT + 288IN)

 

Help Options:

  -h, --help                                         Show this help message

 

[hiv1b command options]

      -q, --quiet                                    hide non-error information output

      -g, --gene=[GAG|POL|GP41]                      gene(s) the input sequences should be aligned with

          --indel-codon-opening-bonus=BONUS          bonus score when a indel codon was opened (default: 0)

          --indel-codon-extension-bonus=BONUS        bonus score when a indel codon was extended (default: 2)

          --stop-codon-penalty=PENALTY               penalty score when a stop codon was met (default: 4)

          --gap-opening-penalty=PENALTY              penalty score when a gap was opened (default: 10)

          --gap-extension-penalty=PENALTY            penalty score when a gap was extended (default: 2)

          --goroutines=GOROUTINES                    number of goroutines the alignment will use. Use the core number when equals to 0 (default: 0)

          --output-format=OUTPUT_FORMAT[tsv|json]    output format of the alignment result (default: tsv)

 

    File Options:

      -i, --input=INPUT                              FASTA file contains one or more DNA sequences (default: -)

      -o, --output=OUTPUT                            output destination of the alignment results (default: -)

 

    Pprof Options:

          --pprof                                    output pprof benchmark result

 

 

docker イメージのビルド

git clone https://github.com/hivdb/nucamino.git
cd nucamino/
make build

  

実行方法

クエリのfastaと、HIVのアライメント対象遺伝子(GAG、POL、GP41)を選ぶ。

nucamino hiv1b --input=input.fasta --gene=POL --output-format=tsv
  • --gene=[GAG|POL|GP41]   gene(s) the input sequences should be aligned with
  • --input=    fasta file contains one or more DNA sequences (default: -)
  • --output=   output destination of the alignment results (default: -)

     

出力をexcelで開いた - GAGを探索

f:id:kazumaxneo:20190110210451p:plain

 

引用

NucAmino: a nucleotide to amino acid alignment optimized for virus gene sequences
Philip L. Tzou, Xiaoqiu Huang, Robert W. Shafer

BMC Bioinformatics. 2017; 18: 138. Published online 2017 Mar 1