SingularityでQIIME2の実行環境を作成する
はじめに
前回、解析環境の保守性の高さと、構築とHPCでコンテナファイルに持っていけば解析ができるような移植性の高さに魅力を感じてSingularityをインストールした。
実際にSingularityでソフトウェアを実行する場合、コンテナファイルである.sif
が必要となる。
今回は例として、QIIME2と周辺ツールを対象に、Singularityコンテナの定義ファイルである.def
の作成から.sif
をビルドするまでを記載する。
1. .defファイル
Singularity CEはカスタム色の強いコンテナ構築ツールで、defファイルにはベースとなるOSや、ソフトウェアのインストール、環境変数、メタデータに至る様々な情報を記載できる。
このdefファイルはheader
とsection
の2つのパートに別れている。
1.1 Header
Headerにはコンテナ構築に使用するOSの情報を記載する。
Bootstrap
は、ヘッダーの最初に記載する必要がある。
既に構築されているイメージ集に関する情報といったことろ。
Bootstrapエージェントはいくつか種類があり、libraryやdocker、shubが良く使われている印象。
後はマシンに保存されているイメージを指定できるlocalimageやCentOS や Scientific Linux などの yumベースのシステムであるyumなどもある。
今回はBootstrapにdocker
を指定して、Dockerレイヤーを使用した基本イメージの作成を行った。
Bootstrap
はキーワードの指定が必須で、一番良く使うのはFrom
。
簡素に書くなら以下のように記載する。
Bootstrap: docker
From: ubuntu:22.04
これでUbuntu 22.04のSingularityコンテナを作ることができるほか、CentOS, DebianなどのOSも指定することもできる。
これができると、特定のOSでしか稼働しないツール (CentOS7を要求するBCL Convertなど) を、手元の環境で実行できるのでこの状態でも十分使えるツールと言える。
1.2 Section
SectionはHeader以外の情報を定義する。%
に続けてセクション名を記載し、以降にセクションにあった情報を記載する。
ちなみにBuild時は/bin/shが利用されこれにはオプションも指定可能。
また、defファイルに記載する各セクションの順序は重要ではないが、Build時には実行される順序がある。
以下の順序で実行される。
以降で今回使用するsectionについて説明する。
ちなみに、SingularityCE v4以降はテンプレートエンジンのような機能をサポートしており、defファイル内に{{ 変数名 }}
と記載しておき、Build時に--build-arg 変数名="入れたい値"
とすることで内部で値を受け取ることができる。
バージョンなどを都度変えたい場合などに使用するといい。
テンプレート機能については以下を参照されたい。
%post
このセクションでは、wget
を利用したファイルをダウンロードや、ソフトウェアのインストール、設定ファイルの編集、ディレクトリの作成などを実施する。
新たなPCを購入した時にツールをインストールするようなイメージでスクリプトを記載する。ここがうまく書ければ大体意図した形でBuildでき、コンテナファイルを作成できるはず。
注意点として、ホストの環境変数は基本的に使用できない。使用したい場合はSingularityCE v4から導入されたテンプレートを利用することで情報を渡す必要がある。
以下では、必要なソフトウェアをaptでインストールしつつ、miniconda3でcondaを使用できるようにして、qiime2をインストールしている。
%post
# Update & Install software
apt update && apt upgrade -y
apt install -y \
wget
# make directory
mkdir -p /opt/bin
# Install miniconda
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh -b -p /opt/miniconda3
. /opt/miniconda3/etc/profile.d/conda.sh
conda activate base
conda update --yes --all
# set channel
conda config --append channels conda-forge
conda config --append channels bioconda
# Install mamba
conda install conda-forge::mamba
# Install qiime2 amplicon
wget https://data.qiime2.org/distro/amplicon/qiime2-amplicon-{{ qiime2_version }}-py38-linux-conda.yml
mamba env create -n qiime2-amplicon-{{ qiime2_version }} --file qiime2-amplicon-{{ qiime2_version }}-py38-linux-conda.yml
以下では後に利用するyamlファイルなどをダウンロードする時に使用するwget
をインストールしている。
# Update & Install software
apt update && apt upgrade -y
apt install -y \
wget
以下で、ツールの置き場を作成。
# make directory
mkdir -p /opt
ここからはminiconda3をインストールして、condaを使えるようにしつつ、高速なインストーラーであるmamaba
をインストールする。
# Install miniconda
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh -b -p /opt/miniconda3
. /opt/miniconda3/etc/profile.d/conda.sh
# Activate
conda activate base
conda update --yes --all
# Install mamba
conda install conda-forge::mamba
続いて、qiime2 2024.2のツールのバージョン情報などが記載されたyamlファイルをダウンロードして、その情報をともに仮想環境を作成後にActivateする。
# Install qiime2 amplicon 2024.02
wget https://data.qiime2.org/distro/amplicon/qiime2-amplicon-{{ qiime2_version }}-py38-linux-conda.yml
mamba env create -n qiime2-amplicon-{{ qiime2_version }} --file qiime2-amplicon-{{ qiime2_version }}-py38-linux-conda.yml
conda activate qiime2-amplicon-{{ qiime2_version }}
QIIME2には後発で開発されている様々なプラグインがある。基本的にpipかgithubリポジトリ上からインストールするものが多い模様。今回は、pipでの導入が推奨されていたのでそちらに従ってインストールした。
# Install plugin
pip install q2-greengenes2
最後にcacheをクリア
# cache clear
conda clean -a
これで%post
の処理ステップは終了
%environment
このセクションには、実行時に設定される環境変数を定義する。注意点として、実行時にはコンテナで使用可能となるが、ビルド時には利用できない。ビルド中に同じ変数が必要な場合には、%post
セクションに定義する必要がある。
先程%post
で作成した仮想環境は常にActivateして使用するわけではないので、Activateした時と同様にPATHに仮想環境内の実行ファイルまでのパスを記載しておく。
また、常に明示的にするのであれば不要な気もするが、ロケール環境変数 LC_ALLにはC.UTF-8
を指定した。
LC_ALLが設定されている場合は、環境変数 LANGもそちらに従い、設定がない場合には個別に割り当てられた値が利用されるらしい。
%environment
# Setting variable for run
export PATH=/opt:/opt/miniconda3/bin:/opt/miniconda3/envs/qiime2-amplicon-{{ qiime2_version }}/bin:${PATH}
export LC_ALL=C.UTF-8
%labels
このセクションでは、コンテナ内の%label
ファイルにメタデータを追加するために使用する。
%labels
Author Author
Build_date 2024.04.21
Version v1.0
テキストの最初のスペースまでの部分がラベルの名前として解釈され、その後の部分がラベルの値として解釈される。
Build後に以下のコマンドを実行すると、イメージで使用可能なラベルを確認できる。
singularity inspect my_container.sif
Author: Author
Build_date: 2024.04.13
Version: v1.0
org.label-schema.build-arch: amd64
org.label-schema.build-date: Sunday_21_April_2024_15:35:52_JST
org.label-schema.schema-version: 1.0
org.label-schema.usage: /.singularity.d/runscript.help
org.label-schema.usage.singularity.deffile.bootstrap: docker
org.label-schema.usage.singularity.deffile.from: ubuntu:22.04
org.label-schema.usage.singularity.runscript.help: /.singularity.d/runscript.help
org.label-schema.usage.singularity.version: 4.1.2
org.opencontainers.image.ref.name: ubuntu
org.opencontainers.image.version: 22.04
%help
このセクションでは、singularity run-help <container>.sif
を実行時に表示されるhelpメッセージを記載する。
%help
This container for 16s amplicon sequence analysis using qiime2 version 2024.02.
次はコンテナをbuildする。
2. .defファイルからSingularityコンテナをBuildする
ここまで説明してきたdefファイルをまとめると以下の通り。
qiime2-2024-02.def
Bootstrap: docker
From: ubuntu:22.04
%post
# Install
apt update && apt upgrade -y
apt install -y \
wget
# make directory
mkdir -p /opt
# Install miniconda
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh -b -p /opt/miniconda3
. /opt/miniconda3/etc/profile.d/conda.sh
# Activate
conda activate base
conda update --yes --all
# Install mamba
conda install conda-forge::mamba
# Install qiime2 amplicon 2024.02
wget https://data.qiime2.org/distro/amplicon/qiime2-amplicon-{{ qiime2_version }}-py38-linux-conda.yml
mamba env create -n qiime2-amplicon-{{ qiime2_version }} --file qiime2-amplicon-{{ qiime2_version }}-py38-linux-conda.yml
conda activate qiime2-amplicon-{{ qiime2_version }}
# Install plugin
pip install q2-greengenes2
# cache clear
conda clean -a
%environment
# Setting variable for run
export PATH=/opt:/opt/miniconda3/bin:/opt/miniconda3/envs/qiime2-amplicon-{{ qiime2_version }}/bin:${PATH}
export LC_ALL=C.UTF-8
%labels
Author Author
Build_date 2024.04.21
Version v1.0
%help
This container for 16s amplicon sequence analysis using qiime2 version 2024.02.
singularityのbuildコマンドでここまで作成したdefファイルからSingularityコンテナをビルドする。
singularity build --fakeroot --build-arg qiime2_version="2024.2" qiime2-2024-02.sif qiime2-2024-02.def
またよく使われる周辺ツールのdefファイルは以下の通り。後で使うのでこちらもBuildしておく。
qiime2_othertools.def
Bootstrap: docker
From: ubuntu:22.04
%post
# Install
apt update && apt upgrade -y
apt install -y \
wget
# make directory
mkdir -p /opt
# Install miniconda
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh -b -p /opt/miniconda3
. /opt/miniconda3/etc/profile.d/conda.sh
# Activate
conda activate base
conda update --yes --all
# set channel
conda config --append channels conda-forge
conda config --append channels bioconda
# Install mamba
conda install conda-forge::mamba
# Install informatics tools
mamba create -n info-tools \
python=3.10 \
fastp=0.23.4 \
multiqc=1.21 \
seqkit=2.8.1 \
parallel \
aria2 \
pigz \
sra-tools=3.0 \
parallel-fastq-dump \
seqfu
%environment
# Setting variable for run
export PATH=/opt:/opt/miniconda3/bin:/opt/miniconda3/envs/info-tools/bin:${PATH}
export LC_ALL=C.UTF-8
%labels
Author Author
Build_date 2024.04.21
Version v1.0
%help
This container for informatics tools with 16s amplicon sequence analysis using qiime2 version 2024.2.
singularity build --fakeroot qiime2_othertools.sif qiime2_othertools.def
3. せっかくなので作ったコンテナとQiime2を使って簡単なデータ解析
使用するのは以下の論文の16s rRNAのシーケンスデータ。
Metadataをダウンロードして、SraRunTable.txtのAssay TypeでAMPLICONのAccession Noを抽出する。
フィルタリングをかけた後のファイルはこちらからもダウンロードできるようにしておきました(SraRunTable.txt)。
3.1 配列データの取得
SraRunTable.txtのうち必要な情報をフィルタリングし、ファイルの1列目の2行目以降を抽出して、arrayとして`data_arrayに代入します。
Accession Numberは全部で298サンプルありそのまま実行するとsraファイルだけで2GB程度になる。もしStrageを節約したい場合は、shuf
でランダムに配列情報を取得して新しいarrayを作成する。
# Accession Numnberのarray化
mapfile -t data_array < <(awk -F '[,]' 'NR > 1 {print $1}' "SraRunTable.txt")
# 元の配列からランダムに10個の要素を選択して新しい配列に代入する場合は以下を使う
# random_data_array=($(shuf -e "${data_array[@]}" -n 10))
コンテナ内にダウンロードしておいたaria2
を使用して、sraファイルをダウンロードする。
# SRA用のフォルダ作成
mkdir 00sra
# sraファイルのダウンロード
for i in ${data_array[@]}; do
singularity exec qiime2_othertools.sif aria2c \
-x 16 \
-ctrue \
--dir=00sra \
https://sra-pub-run-odp.s3.amazonaws.com/sra/${i}/${i}
done
続いて、こちらもコンテナ内にダウンロードしておいたparallel-fastq-dump
とpigz
を使用して、sra形式からPaierd Endのfastq.gzファイルを生成する。
# フォルダの作成
mkdir 00fq
# sra形式 -> fastq -> fastq.gz
printf "%s\n" "${data_array[@]}" | xargs -I {} -P 4 singularity exec qiime2_othertools.sif sh -c "
parallel-fastq-dump \
--sra-id 00sra/{} \
--threads 8 \
--outdir 00fq/ \
--split-files;
pigz -p 8 00fq/{}*fastq
"
Accession Numberをxargsに渡し、並列でコマンドを実行している。
-
printf "%s\n" "${data_array[@]}"
- 配列の要素を改行で区切って出力します。これにより、各行が xargs によって個別のコマンドとして扱われる
-
xargs -I {} -P 4
- -I {} は置換文字列 {} を使用して、入力行をコマンドの任意の位置に挿入できるようにする
- -P 4 は同時に実行するプロセスの最大数を4に設定します。この数はシステムのリソースに応じて調整可能
-
singularity exec qiime2_othertools.sif sh -c "..."
:- singularity exec でコンテナ内部でシェルコマンドを実行します。sh -c は複数のコマンドを含む一連のシェルコマンドを扱うために使用される
これでfastq.gzファイルが生成できた。
3.2 Manifestファイルの作成とQiime2へのデータのインポート
以降ちょっと古いですが、以下の記事を参考にすすめる。
まずはじめにseqfuでManifestファイルを作成。
singularity exec qiime2_othertools.sif \
seqfu metadata \
--format manifest \
-1 "_1" \
-2 "_2" \
--threads 32 \
00fq > Manifest.tsv
続いて、qiime tools import
で解析対象のfastqファイル群をqza形式に変換。
--input-path
にはさっき作成した、Pathが記載されているManifest.tsvを指定。--type
と--iput-format
はこちらを参考にして選択。
mkdir -p 01output/qza 01output/qzv log
singularity exec qiime2-2024-02.sif \
tools import \
--type 'SampleData[PairedEndSequencesWithQuality]' \
--input-format PairedEndFastqManifestPhred33V2 \
--input-path Manifest.tsv \
--output-path 01output/qza/00demux.qza \
2>&1 | tee log/qiime_demux.log
3.3 DADA2によるデノイジング、エラー配列の修正
論文にはMiseqで250PEのシーケンスを下との記載があるが、編集前のSraRunTable.txtには600bpのアンプリコンをシーケンス(300PE)したとの情報があります。seqkitで確認しても、R1, R2ともに300bpあったので300PEで間違いないでしょう。
DADA2の処理についても論文に記載のパラメーターに準拠して解析を実行しており、DADA2のpooling methodにはpseudo-pooling
を使用したと記載があったので、--p-pooling-method puseudo
としています。
--p-pooling-methodに選択できる、'independent', 'pseudo'については、実行時間が増えるもののpuseudoのほうが感度は高い模様。
また、過去のissueで議論されているように、pooling-methodをpuseudoにした場合、chimera-methodもpooldにすることが望ましいようで、将来的に実装されるとのことみたいだが今の所実装されておらず、デフォルトのconsensusが指定されている。今回はそのままとした。
singularity exec qiime2-2024-02.sif \
qiime dada2 denoise-paired \
--i-demultiplexed-seqs ./01output/qza/00demux.qza \
--p-trim-left-f 0 \
--p-trim-left-r 0 \
--p-trunc-len-f 250 \
--p-trunc-len-r 180 \
--p-pooling-method pseudo \
--o-representative-sequences ./01output/qza/02rep-seqs-dada2_f250_r180.qza \
--o-table ./01output/qza/02table-dada2_f250_r180.qza \
--o-denoising-stats ./01output/qza/02stats-dada2_f250_r180.qza \
--p-n-threads 0 \
--verbose 2>&1 | tee log/qiime_dada2.log
3.4 read filtering
論文の情報に従いリード数でテーブルデータに対してフィルタリングを実施する。
singularity exec qiime2-2024-02.sif \
qiime feature-table filter-features \
--i-table 01output/qza/02table-dada2_f250_r180.qza \
--p-min-frequency 2500 \
--o-filtered-table 01output/qza/03frequency-filtered-table.qza
次に、フィルタリング後に残った情報に対応する配列データを抽出する。この作業をしないとテーブルデータと齟齬が出る。
singularity exec qiime2-2024-02.sif \
qiime feature-table filter-seqs \
--i-data 01output/qza/02rep-seqs-dada2_f250_r180.qza \
--i-table 01output/qza/03frequency-filtered-table.qza \
--o-filtered-data 01output/qza/03filtered-rep-seqs.qza
フィルタリング後のデータをqiimeのアーティファクトファイルから抽出したい場合は、tools export
で取得することができる。
singularity exec qiime2-2024-02.sif \
qiime tools export \
--input-path 01output/qza/02rep-seqs-dada2_f250_r180.qza \
--output-path 01output/other1/
singularity exec qiime2-2024-02.sif \
qiime tools export \
--input-path 01output/qza/03filtered-rep-seqs.qza \
--output-path 01output/other2/
seqkit stats
で配列データのサマリーを取得
singularity exec qiime2_othertools.sif \
seqkit stats -a -T \
01output/other1/dna-sequences.fasta > 01output/other1/dna-sequences.tsv
singularity exec qiime2_othertools.sif \
seqkit stats -a -T \
01output/other2/dna-sequences.fasta > 01output/other2/dna-sequences.tsv
format | type | num_seqs | sum_len | min_len | avg_len | max_len | Q1 | Q2 | Q3 | sum_gap | N50 | N50_num | Q20(%) | Q30(%) | AvgQual | GC(%) | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
フィルタリング前 | FASTA | DNA | 1921 | 485669 | 250 | 252.8 | 255 | 253.0 | 253.0 | 253.0 | 0 | 253 | 3 | 0.00 | 0.00 | 0.00 | 52.74 |
フィルタリング後 | FASTA | DNA | 225 | 56894 | 252 | 252.9 | 254 | 253.0 | 253.0 | 253.0 | 0 | 253 | 2 | 0.00 | 0.00 | 0.00 | 52.83 |
だいぶ配列数が減って変わりましたね。
3.5 Greengenes2による系統分類
少し変わり種として、2023年に更新されたGreengenes2のデータベースを使って系統分類してみる。
Greengenes2は初期のGreengenesから設計が大きく更新されており、全ゲノムのデータからマーカー遺伝子に基づく系統樹を作成して分類を決めるというデータベースの構築方法をとっている。これにより、16s rRNAとショットガンの両方で直接統合可能な結果を得ることができるらしい。
QIIME2での使用においては、一般的に用いられるq2-feature-classifierプラグインを使用した系統分類の他にq2-greengenes2が利用できるので、以下の流れで実行しようと思ったがエラーが出てうまく実行できなかった。
Error q2-greengenes2
データベースはこちらからダウンロードした : 2022.10.taxonomy.asv.nwk.qza
mkdir 00ref
wget https://ftp.microbio.me/greengenes_release/current/2022.10.taxonomy.asv.nwk.qza \
--no-check-certificate \
-o 00ref/2022.10.taxonomy.asv.nwk.qza
singularity exec qiime2-2024-02.sif \
qiime greengenes2 filter-features \
--i-reference 00ref/2022.10.taxonomy.asv.nwk.qza \
--i-feature-table 01output/qza/02table-dada2_f250_r180.qza \
--o-filtered-feature-table 01output/qza/04table-dada2_f250_r180_gg2.qza \
--verbose 2>&1 | tee log/qiime_filter-features_gg2.log
singularity exec qiime2-2024-02.sif \
qiime greengenes2 taxonomy-from-table \
--i-reference-taxonomy 00ref/2022.10.taxonomy.asv.nwk.qza \
--i-table 01output/qza/04table-dada2_f250_r180_gg2.qza \
--o-classification 01output/qza/04gg2_taxonomy.qza \
--verbose 2>&1 | tee log/qiime_taxonomy-from-table_gg2.log
Issueもあって解決法が提案されているがあまり時間をかけたくないので、以下のデータベースを使って、q2-feature-classifier
で系統分類を実施した。
データベースはこちらからダウンロードした : 2022.10.backbone.full-length.nb.qza
データベースのダウンロード
# Reference用のフォルダの作成と移動
mkdir 00ref && cd 00ref
# ダウンロード
wget https://ftp.microbio.me/greengenes_release/current/2022.10.backbone.full-length.nb.qza
# もとのフォルダへ移動
cd ..
データベースが用意できればfeature-classifier classify-sklearn
で以下のように系統分類を実行する。
singularity exec qiime2-2024-02.sif \
qiime feature-classifier classify-sklearn \
--i-classifier 00ref/2022.10.backbone.full-length.nb.qza \
--i-reads 01output/qza/03filtered-rep-seqs.qza \
--o-classification 01output/qza/04taxonomy_gg2.qza \
--p-n-jobs 10 \
--verbose 2>&1 | tee log/qiime_taxonomy-from-table_gg2-sklearn.log
10分程度で終了
3.6 Barplotの描画
SraRunTable.txtの情報を整理して適切な形にしたmetadata.tsvを使って、Barplotを描画。
metadata.tsvは以下を参照。
singularity exec qiime2-2024-02.sif \
qiime taxa barplot \
--i-table 01output/qza/03frequency-filtered-table.qza \
--i-taxonomy 01output/qza/04taxonomy_gg2.qza \
--m-metadata-file metadata.tsv \
--o-visualization 01output/qzv/gg2-taxa-bar-plots.qzv
Level4: Orderでsample typeごとに並び替えたbarplot
3.7 α多様性の視覚化 : rarefaction curveの描画
いくつかの多様度指数を算出後、まとめてrarefactionとして描画します。
まずは、phylogeny align-to-tree-mafft-fasttree
で系統樹を作成。
singularity exec qiime2-2024-02.sif \
qiime phylogeny align-to-tree-mafft-fasttree \
--i-sequences 01output/qza/03filtered-rep-seqs.qza \
--output-dir 01output/other/phylogeny-align-to-tree-mafft-fasttree
次に、有根系統樹を使っていくつかの多様度指数のrarefraction curveを作成・描画する。
singularity exec qiime2-2024-02.sif \
qiime diversity alpha-rarefaction \
--i-table 01output/qza/03frequency-filtered-table.qza \
--i-phylogeny 01output/other/phylogeny-align-to-tree-mafft-fasttree/rooted_tree.qza \
--m-metadata-file metadata.tsv \
--p-max-depth 20000 \
--o-visualization 01output/qzv/05alpha-rarefaction-plot.qzv \
--verbose 2>&1 | tee log/qiime_rarefaction.log
observed_features, sample_setの表示
3.8 α多様性の視覚化 : カテゴリごとのα多様性の比較
Metadata.tsvで規定しているカテゴリごとのα多様性を見比べることができる。
singularity exec qiime2-2024-02.sif \
qiime diversity core-metrics-phylogenetic \
--i-phylogeny 01output/other/phylogeny-align-to-tree-mafft-fasttree/rooted_tree.qza \
--i-table 01output/qza/03frequency-filtered-table.qza \
--p-sampling-depth 10000 \
--p-n-jobs-or-threads 32 \
--m-metadata-file metadata.tsv \
--output-dir 01output/other/diversity-core-metrics-phylogenetic
--verbose 2>&1 | tee log/qiime_core-metrics-phylogenetic.log
singularity exec qiime2-2024-02.sif \
qiime diversity alpha-group-significance \
--i-alpha-diversity 01output/other/diversity-core-metrics-phylogenetic/observed_features_vector.qza \
--m-metadata-file metadata.tsv \
--o-visualization 01output/qzv/06alpha-group-sig-obs-feats.qzv \
--verbose 2>&1 | tee tee log/qiime_alpha-group-significance.log
カテゴリごとに確認されたASV数のbox plot
Kruskal-Wallisによる差の検定の結果
他にもたくさんプラグインがあり多様な解析ができる。
3.9 β多様性の視覚化 : PCoA (主座標分析)
PCoAはデータセット内のオブジェクト間の距離を視覚化するために用いられる。一般的にBray-Cutis, Jaccardなどの距離指標を用いた行列から算出・描画する。
以下のスクリプトでは、--p-metric
で指定できる値をloopで指定してすべての結果が出力されるようにした。
# 指定できるmetricsについてすべてのplotを生成
metrics_array=(aitchison braycurtis canberra canberra_adkins chebyshev cityblock correlation cosine dice euclidean generalized_unifrac hamming jaccard jensenshannon kulsinski matching minkowski rogerstanimoto russellrao seuclidean sokalmichener sokalsneath sqeuclidean unweighted_unifrac weighted_normalized_unifrac weighted_unifrac yule)
for met in ${metrics_array[@]};do
singularity exec qiime2-2024-02.sif \
qiime diversity beta-rarefaction \
--i-table 01output/qza/03frequency-filtered-table.qza \
--p-metric ${met} \
--p-clustering-method nj \
--p-sampling-depth 15000 \
--m-metadata-file metadata.tsv \
--o-visualization 01output/qzv/07${met}-rarefaction-plot.qzv \
--verbose 2>&1 | tee log/qiime_beta-rarefaction_${met}.log
done
各距離指標に基づく3Dのこんな図が得られる
3.10 β多様性解析 : PERMANOVA
PERMANOVAは1つのグループ内のサンプル間の距離 (グループ内距離) が、別のグループ内のサンプルまでの距離 (グループ間距離)と異なるという仮説をテストする。
comp_set=(host_sex sample_type)
for comp in ${comp_set[@]}; do
singularity exec qiime2-2024-02.sif \
qiime diversity beta-group-significance \
--i-distance-matrix 01output/other/diversity-core-metrics-phylogenetic/unweighted_unifrac_distance_matrix.qza \
--m-metadata-file metadata.tsv \
--m-metadata-column ${comp} \
--p-pairwise \
--p-method 'permanova' \
--o-visualization 01output/qzv/09uw_unifrac-${comp}-significance.qzv \
--verbose
done
for comp in ${comp_set[@]}; do
singularity exec qiime2-2024-02.sif \
qiime diversity beta-group-significance \
--i-distance-matrix 01output/other/diversity-core-metrics-phylogenetic/weighted_unifrac_distance_matrix.qza \
--m-metadata-file metadata.tsv \
--m-metadata-column ${comp} \
--p-pairwise \
--p-method 'permanova' \
--o-visualization 01output/qzv/09w_unifrac-${comp}-significance.qzv \
--verbose
done
PERMANOVAとセットでよく解析されるのがPERMDISP。こちらはグループ間のβ多様性の等分散性を比較検定できる。
comp_set=(host_sex sample_type)
for comp in ${comp_set[@]}; do
singularity exec qiime2-2024-02.sif \
qiime diversity beta-group-significance \
--i-distance-matrix 01output/other/diversity-core-metrics-phylogenetic/unweighted_unifrac_distance_matrix.qza \
--m-metadata-file metadata.tsv \
--m-metadata-column ${comp} \
--p-pairwise \
--p-method 'permdisp' \
--o-visualization 01output/qzv/09uw_unifrac-${comp}-significance_permdisp.qzv \
--verbose
done
for comp in ${comp_set[@]}; do
singularity exec qiime2-2024-02.sif \
qiime diversity beta-group-significance \
--i-distance-matrix 01output/other/diversity-core-metrics-phylogenetic/weighted_unifrac_distance_matrix.qza \
--m-metadata-file metadata.tsv \
--m-metadata-column ${comp} \
--p-pairwise \
--p-method 'permdisp' \
--o-visualization 01output/qzv/09w_unifrac-${comp}-significance_permdisp.qzv \
--verbose
done
左: PERMDISP, 右: PERMANOVA, カテゴリ: Sample_type
PERMANOVAとPERMDISPはセットで使われることが多い。その必要性と考察の仕方については、以下の和文を参考に参考にされたい。
さいごに
これでなんとなくだがsingularity コンテナが作成できるようになった。defファイルをgithubで管理したりすることで保守的なversion管理ができ、作成したsifファイルを別のPCやスパコンへ持って行くことですぐに解析ができるようになる。はず。
qiime2も年々新しくなって知らないpluginが沢山追加されているので取りこぼさないようにしないといけない。とりあえずはじめは以下のプロトコル論文などを参考に進めるのがいいと思う。
次は、workflow言語としてNextflowでも触ろうかな。
出典
- https://docs.sylabs.io/guides/4.1/user-guide/definition_files.html#templating-how-to-pass-values-into-definition-files
- https://geniac.readthedocs.io/en/latest/conda.html
- https://telatin.github.io/singularities/containers/qiime.html
- https://github.com/apptainer/singularity
- https://github.com/sylabs/singularity
- https://github.com/jianhong/16S_pipeline/blob/main/singularity.def
- https://bioinformatics.ccr.cancer.gov/docs/qiime2/Lesson5/
- https://bioinformatics.ccr.cancer.gov/docs/qiime2/Lesson6/
- https://currentprotocols.onlinelibrary.wiley.com/doi/10.1002/cpbi.100
- https://www.jstage.jst.go.jp/article/seitai/66/1/66_1/_pdf
Discussion