QIIME2 pipeline for ASV/OTU table, alpha/beta diversity

Diversity & QC Parameters

Path to raw fastq/
16S rRNA amplicon sequencing reads
Primer pair used
Taxonomic reference database
Upload metadata.tsv
QIIME2 metadata file
SHELL QIIME2 Pipeline
#!/bin/bash
# Step 1.1: Import reads into QIIME2
qiime tools import \
  --type 'SampleData[PairedEndSequencesWithQuality]' \
  --input-path {reads_dir} \
  --input-format CasavaOneEightSingleLanePerSampleDirFmt \
  --output-path 01_demux.qza

# Step 1.2: DADA2 denoising
qiime dada2 denoise-paired \
  --i-demultiplexed-seqs 01_demux.qza \
  --p-trunc-len-f 240 --p-trunc-len-r 200 \
  --p-n-threads 8 \
  --o-table 02_table.qza --o-representative-sequences 02_seqs.qza \
  --o-denoising-stats 02_stats.qza

# Step 1.3: Taxonomic classification
qiime feature-classifier classify-sklearn \
  --i-classifier {classifier}.qza \
  --i-reads 02_seqs.qza \
  --o-classification 03_taxonomy.qza

# Step 1.4: Generate phylogenetic tree
qiime phylogeny align-to-tree-mafft-fasttree \
  --i-sequences 02_seqs.qza \
  --o-alignment 04_aligned.qza --o-masked-alignment 04_masked.qza \
  --o-tree 04_tree.qza --o-rooted-tree 04_rooted_tree.qza
Configure parameters on the left, then click "Generate Code" to produce customized commands
Differential abundance, LEFSe, and community succession

Community Analysis Parameters

Upload QIIME2 table
ASV/OTU frequency table
Upload taxonomy.qza
Taxonomic classifications
Upload rooted_tree.qza
Phylogenetic tree
Upload metadata.tsv
Sample metadata
R Differential Abundance (ANCOM-BC)
library(qiime2R)
library(ANCOMBC)
library(phyloseq)
library(ggplot2)
library(tidyverse)

# Step 2.1: Create phyloseq object
SVs <- read_qza("{feature_table}")$data
taxonomy <- read_qza("{taxonomy_qza}")$data %>% parse_taxonomy()
metadata <- read_q2metadata("{metadata_tsv}")
tree <- read_qza("{tree_qza}")$data

ps <- phyloseq(otu_table(SVs, taxa_are_rows=TRUE),
               tax_table(as.matrix(taxonomy)),
               sample_data(metadata),
               phy_tree(tree))

# Step 2.2: Rarefaction
ps_rare <- rarefy_even_depth(ps, rngseed=42)

# Step 2.3: Alpha diversity
alpha <- estimate_richness(ps_rare, measures=c("Observed","Shannon","Simpson"))
alpha$sample <- rownames(alpha)
alpha <- merge(alpha, metadata, by.x="sample", by.y="sample_name")

ggplot(alpha, aes(x=condition, y=Shannon, fill=condition)) +
  geom_boxplot() + geom_jitter(width=0.2) +
  theme_bw(base_size=14) + labs(title="Alpha Diversity (Shannon)")
ggsave("05_alpha_diversity.pdf", width=6, height=5)

# Step 2.4: Beta diversity (PCoA)
ord <- ordinate(ps_rare, method="PCoA", distance="bray")
p <- plot_ordination(ps_rare, ord, color="condition", shape="season") +
  geom_point(size=4) + theme_bw(base_size=14) +
  labs(title="Bray-Curtis PCoA")
ggsave("05_pcoa.pdf", p, width=7, height=6)

# Step 2.5: ANCOM-BC differential abundance
abc <- ancombc(phyloseq=ps, formula="condition", group="condition",
               p_adj_method="holm", alpha=0.05)
write.csv(abc$res, "05_ancombc_results.csv")
Configure parameters on the left, then click "Generate Code" to produce customized commands
PICRUSt2 for functional prediction and pathway analysis

Functional Prediction Parameters

Upload rep-seqs.qza
Representative ASV sequences
Upload table.qza
ASV abundance table
Functional database
SHELL PICRUSt2 Functional Prediction
#!/bin/bash
# Step 3.1: Run PICRUSt2
qiime picrust2 full-pipeline \
  --i-seq {rep_seqs} \
  --i-table {feature_table} \
  --output-dir 06_picrust2 \
  --p-placement-tool sepp \
  --p-threads 8 \
  --p-hsp-method mp \
  --p-max-nsti 2

# Step 3.2: Add descriptions
add_descriptions.py -i 06_picrust2/ec_metagenome_out/pred_metagenome_contrib.tsv -m EC -o 06_picrust2/ec_named.tsv
add_descriptions.py -i 06_picrust2/ko_metagenome_out/pred_metagenome_contrib.tsv -m KO -o 06_picrust2/ko_named.tsv

# Step 3.3: Pathway inference
pathway_pipeline.py -i 06_picrust2/ko_metagenome_out/pred_metagenome_unstrat.tsv.gz -o 06_picrust2/pathways_out -p 8
Configure parameters on the left, then click "Generate Code" to produce customized commands
Host-microbiome interaction and multi-kingdom network

Multi-kingdom & Host Parameters

Upload phyloseq object
Phyloseq object with taxonomy
Upload host metabolites/genes
Host metabolite or gene expression
Integration method
R Host-Microbiome Integration
library(phyloseq)
library(vegan)
library(ggplot2)
library(tidyverse)

# Step 4.1: Load data
ps <- readRDS("{microbiome_ps}")
host <- read.csv("{host_data}")

# Step 4.2: Procrustes analysis
micro_dist <- phyloseq::distance(ps, method="bray")
micro_pcoa <- cmdscale(micro_dist, k=2)
host_pca <- prcomp(host[,-1], scale=TRUE)$x[,1:2]

proc <- protest(micro_pcoa, host_pca, permutations=999)
print(paste("Procrustes m12:", round(proc$t0, 4), "p-value:", proc$signif))

# Step 4.3: Plot Procrustes
proc_df <- data.frame(
  micro_X=micro_pcoa[,1], micro_Y=micro_pcoa[,2],
  host_X=host_pca[,1], host_Y=host_pca[,2]
)

ggplot(proc_df) +
  geom_point(aes(x=micro_X, y=micro_Y), color="#006334", size=3, alpha=0.6) +
  geom_point(aes(x=host_X, y=host_Y), color="#ff6f00", size=3, alpha=0.6) +
  geom_segment(aes(x=micro_X, y=micro_Y, xend=host_X, yend=host_Y),
               color="gray60", alpha=0.4) +
  theme_bw(base_size=14) +
  labs(title=paste("Procrustes: m12 =", round(proc$t0, 3)),
       x="PC1", y="PC2")
ggsave("07_procrustes.pdf", width=8, height=6)

# Step 4.4: Correlation network
corr_results <- data.frame()
for(mg in colnames(host[,-1])) {
  for(tax in taxa_names(ps)[1:50]) {
    cor_val <- cor(host[[mg]], as.vector(otu_table(ps)[tax,]), method="spearman")
    if(abs(cor_val) > 0.5) {
      corr_results <- rbind(corr_results, data.frame(metabolite=mg, taxon=tax, rho=cor_val))
    }
  }
}
write.csv(corr_results, "07_host_microbiome_correlations.csv")
Configure parameters on the left, then click "Generate Code" to produce customized commands
Step 1 of 4