Transcriptome
Multiple testing and volcano plot
Adjust p-values for multiple testing by four methods, count the significant genes and draw a volcano plot from DESeq2 or edgeR output.
Columns are recognised from the header: gene name, log2FoldChange and pvalue. Without a header the first three columns are assumed in that order.
Benjamini-Hochberg controls the false discovery rate and is the conventional choice for RNA-seq. Benjamini-Yekutieli is more conservative and holds under arbitrary dependence between tests. Bonferroni and Holm control the family-wise error rate and are far too strict across tens of thousands of genes. This tool does not generate p-values; they must come from DESeq2, edgeR or limma.
Formula
adjusted p (BH) = min over all k ≥ i of (n ÷ k) × p₍ₖ₎
- n
- the total number of genes tested
- k
- the rank of a gene once p-values are sorted ascending
- BH
- controls the false discovery rate — the conventional choice for RNA-seq
- Bonferroni
- controls the family-wise error rate — a plain multiplication by n
Worked example
Five genes with p from 0.01 to 0.05
- p = 0.01, 0.02, 0.03, 0.04, 0.05
- n = 5
- For each rank, p times n over the rank: 0.05, 0.05, 0.05, 0.05, 0.05
- Walk from the largest downwards taking a running minimum, so the result stays monotone.
- Bonferroni instead multiplies each p by 5: 0.05 through 0.25
Answer BH calls all five significant at 0.05; Bonferroni calls one
Common mistakes
- Correcting a column that was already corrected. The padj column from DESeq2 has already been through BH; this tool wants the raw pvalue column.
- Using Bonferroni across twenty thousand genes. It was designed for a handful of tests and at transcriptome scale it rejects almost everything.
- Filtering genes on raw p and then correcting only the survivors. That breaks the false discovery rate guarantee; correction must run over every gene tested.
- Setting a log2FC threshold on unshrunken estimates. For low-count genes the raw log2FC is noisy; DESeq2 offers shrunken values that are far better suited to thresholding.
Frequently asked
Which method should I use?
For RNA-seq, Benjamini-Hochberg. If you want to be conservative without assuming anything about dependence between tests, Benjamini-Yekutieli. Keep Bonferroni and Holm for a small number of hypotheses.
Why do some DESeq2 genes have no padj?
Independent filtering: very lowly expressed genes are set aside so the correction has more power for the rest. If you paste those rows into this tool they will take part in the correction and your result will differ from DESeq2.
Should the vertical axis use raw or adjusted p?
The conventional plot uses raw p with significance shown by colour. Choose adjusted p if you want the horizontal threshold line to be exactly your decision threshold.