All examples · Example 30 of 34
Volcano Plot: RNA-seq
Differential expression of 8,000 genes: log2 fold change against −log10 adjusted p; red up-regulated, blue down-regulated.

Key findings
- LabTools' Benjamini–Hochberg values match the upstream pipeline to within 2 × 10⁻¹⁶.
- 423 genes up and 318 down (BH < 0.05, |log2 FC| ≥ 1). Bonferroni would keep only 505 genes at any fold change, against 797 for BH.
Distribution of fold changes
Location, spread and shape for every group — the first thing to read before choosing a test. Skewness near 0 and excess kurtosis near 0 are what a normal distribution looks like.
| Group | n | Mean | SD | SEM | Median | Q1 – Q3 | Min – Max | Skewness | Excess kurtosis |
|---|---|---|---|---|---|---|---|---|---|
| log2 fold change | 8,000 | 0.03918 | 0.8748 | 0.009781 | 0.002 | -0.3413 – 0.348 | -4.157 – 4.705 | 0.649 | 6.56 |
LabTools call
stats.describelabtools stats describe --groups @groups.json
The same method is available as an MCP tool (stats_describe) and from the desktop app's statistics panel.
8,000 tests: correcting the p-values
The dataset ships with Benjamini–Hochberg adjusted p-values from the upstream pipeline. LabTools recomputes them from the raw p-values and applies three further corrections, to show how much the hit list depends on the error rate controlled.
8,000 tests, α = 0.05
| Correction | Controls | Tests | Raw p < 0.05 | Significant after correction |
|---|---|---|---|---|
| Bonferroni | family-wise error | 8,000 | 1,426 | 505 |
| Holm | family-wise error | 8,000 | 1,426 | 506 |
| Benjamini–Hochberg | false discovery rate | 8,000 | 1,426 | 797 |
| Benjamini–Yekutieli | false discovery rate | 8,000 | 1,426 | 620 |
LabTools calls (4)
stats.adjustlabtools stats adjust --p-values @p_values.json --labels @labels.json --method bonferroni --alpha 0.05
stats.adjustlabtools stats adjust --p-values @p_values.json --labels @labels.json --method holm --alpha 0.05
stats.adjustlabtools stats adjust --p-values @p_values.json --labels @labels.json --method benjamini-hochberg --alpha 0.05
stats.adjustlabtools stats adjust --p-values @p_values.json --labels @labels.json --method benjamini-yekutieli --alpha 0.05
The same method is available as an MCP tool (stats_adjust) and from the desktop app's statistics panel.
Top 10 by raw p
| Gene | log2 FC | Raw p | Bonferroni | Holm | BH | BY |
|---|---|---|---|---|---|---|
| GENE7304 | 4.69 | 1.8 × 10⁻⁵⁴ | 1.4 × 10⁻⁵⁰ | 1.4 × 10⁻⁵⁰ | 1.4 × 10⁻⁵⁰ | 1.4 × 10⁻⁴⁹ |
| GENE5734 | 4.51 | 2.7 × 10⁻⁵⁰ | 2.2 × 10⁻⁴⁶ | 2.2 × 10⁻⁴⁶ | 1.1 × 10⁻⁴⁶ | 1.0 × 10⁻⁴⁵ |
| GENE3270 | 4.47 | 3.4 × 10⁻⁴⁷ | 2.7 × 10⁻⁴³ | 2.7 × 10⁻⁴³ | 9.0 × 10⁻⁴⁴ | 8.6 × 10⁻⁴³ |
| GENE0282 | 4.11 | 2.3 × 10⁻⁴⁴ | 1.8 × 10⁻⁴⁰ | 1.8 × 10⁻⁴⁰ | 4.5 × 10⁻⁴¹ | 4.3 × 10⁻⁴⁰ |
| GENE1798 | 4.35 | 8.9 × 10⁻⁴⁴ | 7.2 × 10⁻⁴⁰ | 7.1 × 10⁻⁴⁰ | 1.4 × 10⁻⁴⁰ | 1.4 × 10⁻³⁹ |
| GENE2271 | 4.04 | 5.9 × 10⁻⁴¹ | 4.7 × 10⁻³⁷ | 4.7 × 10⁻³⁷ | 7.8 × 10⁻³⁸ | 7.5 × 10⁻³⁷ |
| GENE3307 | 3.9 | 6.4 × 10⁻⁴⁰ | 5.1 × 10⁻³⁶ | 5.1 × 10⁻³⁶ | 7.3 × 10⁻³⁷ | 7.0 × 10⁻³⁶ |
| GENE1011 | 3.99 | 8.5 × 10⁻³⁹ | 6.8 × 10⁻³⁵ | 6.8 × 10⁻³⁵ | 7.9 × 10⁻³⁶ | 7.6 × 10⁻³⁵ |
| GENE3821 | -4.16 | 8.9 × 10⁻³⁹ | 7.1 × 10⁻³⁵ | 7.1 × 10⁻³⁵ | 7.9 × 10⁻³⁶ | 7.6 × 10⁻³⁵ |
| GENE5354 | 4.39 | 4.0 × 10⁻³⁸ | 3.2 × 10⁻³⁴ | 3.2 × 10⁻³⁴ | 3.2 × 10⁻³⁵ | 3.1 × 10⁻³⁴ |
LabTools notes
- 921 comparison(s) were significant on the raw p-values but are not after correction. Report the adjusted values.
- Holm controls the same familywise error rate as Bonferroni and rejects at least as much, so there is no statistical reason to prefer bonferroni.
- 920 comparison(s) were significant on the raw p-values but are not after correction. Report the adjusted values.
- 629 comparison(s) were significant on the raw p-values but are not after correction. Report the adjusted values.
- 806 comparison(s) were significant on the raw p-values but are not after correction. Report the adjusted values.
Check against the supplied BH column
Methods paragraph
Written to go straight into a manuscript.
At |log2 FC| > 1 and BH-adjusted p < 0.05, 423 genes were up-regulated and 318 down-regulated.
Every number on this page was computed by the LabTools statistics engine (version 0.14.3) from the example's CSV on 2026-09-23. Where a value was derived before the data reached LabTools (replicate means, paired differences, log odds ratios), the text says so. The data are simulated from a fixed random seed.
Get started
Run the same analysis on your data
Every test on this page is built into LabTools — from the statistics panel, the command line, or an AI assistant through MCP.