Processing
QIIME 2 and DADA2
QIIME 2 is not an analysis method — it is a framework that wraps other people's methods and records what it did. DADA2 is one of those methods, and the one that turns reads into the table everything downstream depends on. Between them sits the parameter most likely to destroy a dataset while reporting success.
Artifacts carry their own history
A .qza is a zip file containing the data and a full record of how it came
to exist. This is the feature that distinguishes QIIME 2 from a pile of shell scripts, and it is
the one most commonly discarded — the moment you export to TSV, the chain is broken.
QIIME 2 releases quarterly and the packaging has moved recently: as of 2026.4 the
amplicon distribution was renamed back to qiime2 and environment files
carry a rachis- prefix. Pin the release in your environment file and read the
release notes before upgrading mid-project — an artifact from an older release still loads, but
plugin behaviour and defaults do move.
What DADA2 actually does
Denoising is not filtering. DADA2 builds a model of this run's error process and then asks, for each candidate sequence, whether it is better explained as a real biological sequence or as errors off a more abundant neighbour.
Instruments that report binned quality scores — NovaSeq and NextSeq among them — give the error model a handful of discrete Q values instead of a continuous range, and the fit degrades. This is a known, actively discussed problem with community workarounds that modify the error-estimation function; it is not solved by a flag in the default workflow. If your data came off a binned-quality instrument, check the current DADA2 guidance before trusting the default fit, and look at the error plots rather than assuming.
The truncation trap
This is the one that costs people whole datasets. Truncating reads to improve quality is correct. Truncating them past the point where the pair can still overlap destroys the run — and DADA2 does not fail. It returns a table, with almost nothing in it.
Where the reads went, in percentage points of input
The same 50-sample run, expressed as loss rather than survival. Pooled across all 9,973,604 input reads.
Read loss by stage
Chimera removal is the largest single loss, and that is normal.
A 21-point loss to chimera removal looks alarming the first time. It is not: PCR chimeras are genuinely abundant in 16S amplicon libraries, and removing them is the point. What would be alarming is the pair-joining step taking 21 points instead of 7 — that is the truncation arithmetic failing, and it is the number to check first when a run looks thin.
A short checklist
- Remove primers before denoising
Cutadapt, or
--p-trim-leftif the primers are a fixed length and definitely present. Primer sequence left in place becomes conserved sequence that the error model and the classifier both have to deal with. - Work out the truncation arithmetic on paper Amplicon length for your primer pair, minus it from the sum of your two truncation lengths, and leave 20–30 bases of margin rather than 12.
- One error model per sequencing run
Denoise each run separately, then
qiime feature-table merge. If you cannot tell which run a sample came from, that is a metadata problem to fix before an analysis problem. - Read the denoising stats every time
qiime metadata tabulateon the DADA2 stats artifact. Look at themergedcolumn first, then the spread across samples — not just the mean. - Keep the artifacts Export at the end. The provenance is the only complete record of what you did, and it is free as long as you do not throw it away.