All examples · Example 6 of 34
Strip Plot: qPCR ΔCt per Animal
ΔCt (target − GAPDH) for each animal in four treatment groups (n = 8 per group); lower ΔCt means higher target expression.

Key findings
- One-way ANOVA F = 67.11, p = 6.7 × 10⁻¹³, ω² = 0.861: dose explains most of the variation in ΔCt.
- With n = 8 animals per group the minimum detectable effect is d = 1.51 at 80% power; every observed contrast is larger than that.
- 6 of 6 pairwise contrasts survive Holm correction.
Descriptive statistics
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 |
|---|---|---|---|---|---|---|---|---|---|
| Vehicle | 8 | 6.125 | 0.4818 | 0.1703 | 6.225 | 5.893 – 6.5 | 5.16 – 6.62 | -1.18 | 1.34 |
| Low dose | 8 | 5.081 | 0.467 | 0.1651 | 5.085 | 4.86 – 5.418 | 4.3 – 5.67 | -0.412 | -0.493 |
| Mid dose | 8 | 4.026 | 0.2902 | 0.1026 | 4.03 | 3.947 – 4.105 | 3.51 – 4.53 | -0.0705 | 1.75 |
| High dose | 8 | 3.318 | 0.43 | 0.152 | 3.305 | 3.11 – 3.643 | 2.69 – 3.85 | -0.288 | -1.1 |
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.
Normality
Three tests of the same question — could these values come from a normal distribution? Shapiro–Wilk has the best power at bench sample sizes, Anderson–Darling is more sensitive in the tails, and Kolmogorov–Smirnov (Lilliefors-corrected) is included for comparability with older papers. A significant p means normality is rejected.
| Group | n | Shapiro–Wilk W | p | Anderson–Darling A² | p | K–S D | p | Verdict |
|---|---|---|---|---|---|---|---|---|
| Vehicle | 8 | 0.8984 | 0.28 | 0.3637 | 0.34 | 0.1704 | 0.71 | Consistent with normal |
| Low dose | 8 | 0.9606 | 0.82 | 0.1876 | 0.86 | 0.1312 | 0.95 | Consistent with normal |
| Mid dose | 8 | 0.9491 | 0.70 | 0.3383 | 0.40 | 0.1901 | 0.54 | Consistent with normal |
| High dose | 8 | 0.931 | 0.53 | 0.2561 | 0.62 | 0.1603 | 0.79 | Consistent with normal |
LabTools calls (3)
stats.normalitylabtools stats normality --groups @groups.json --method shapiro-wilk
stats.normalitylabtools stats normality --groups @groups.json --method anderson-darling
stats.normalitylabtools stats normality --groups @groups.json --method kolmogorov-smirnov
The same method is available as an MCP tool (stats_normality) and from the desktop app's statistics panel.
LabTools notes
- Group 'High dose' has n = 8; normality screening has very low power at this size, so a non-significant Shapiro–Wilk is weak evidence of normality.
- Group 'Low dose' has n = 8; normality screening has very low power at this size, so a non-significant Shapiro–Wilk is weak evidence of normality.
- Group 'Mid dose' has n = 8; normality screening has very low power at this size, so a non-significant Shapiro–Wilk is weak evidence of normality.
- Group 'Vehicle' has n = 8; normality screening has very low power at this size, so a non-significant Shapiro–Wilk is weak evidence of normality.
Equal variances
Student's t and one-way ANOVA assume every group has the same spread. LabTools' Levene test uses deviations from the group median (the Brown–Forsythe form), which stays reliable on skewed data; Bartlett's test is more powerful but only trustworthy when the data are normal. A significant p means the equal-variance assumption fails — prefer Welch's t-test or a rank-based test.
| Test | Statistic | p | Largest / smallest variance | Verdict |
|---|---|---|---|---|
| Levene (Brown–Forsythe, median-centred) | 0.7357 | 0.54 | 2.76 | Homogeneous |
| Bartlett | 1.869 | 0.60 | 2.76 | Homogeneous |
LabTools calls (2)
stats.levenelabtools stats levene --groups @groups.json --method levene
stats.levenelabtools stats levene --groups @groups.json --method bartlett
The same method is available as an MCP tool (stats_levene) and from the desktop app's statistics panel.
LabTools notes
- Group 'High dose' has n = 8; normality screening has very low power at this size, so a non-significant Shapiro–Wilk is weak evidence of normality.
- Group 'Low dose' has n = 8; normality screening has very low power at this size, so a non-significant Shapiro–Wilk is weak evidence of normality.
- Group 'Mid dose' has n = 8; normality screening has very low power at this size, so a non-significant Shapiro–Wilk is weak evidence of normality.
- Group 'Vehicle' has n = 8; normality screening has very low power at this size, so a non-significant Shapiro–Wilk is weak evidence of normality.
- Non-significant. This test has low power on small samples, so treat this as 'no evidence against equal variances', not as evidence for them.
- Bartlett's test assumes normality and is badly inflated when that fails — confirm with stats.normality, or use method='levene'.
Outlier screen
Five detectors with different assumptions. Grubbs tests the single most extreme point, generalised ESD looks for up to several (immune to masking), Dixon's Q is the small-sample chemistry test, modified-z uses the median and MAD so needs no normality, and the IQR rule is Tukey's boxplot fence. LabTools flags points; it never deletes them.
| Method | Vehicle | Low dose | Mid dose | High dose |
|---|---|---|---|---|
| Grubbs | none | none | none | none |
| Generalised ESD | none | none | none | none |
| Dixon's Q | none | none | none | none |
| Modified z (MAD) | none | none | none | none |
| IQR fences (1.5×) | none | none | 2 (3.51, 4.53) | none |
LabTools calls (5)
stats.outlierslabtools stats outliers --groups @groups.json --method grubbs
stats.outlierslabtools stats outliers --groups @groups.json --method generalized-esd --max-outliers 5
stats.outlierslabtools stats outliers --groups @groups.json --method dixon-q
stats.outlierslabtools stats outliers --groups @groups.json --method modified-z
stats.outlierslabtools stats outliers --groups @groups.json --method iqr
The same method is available as an MCP tool (stats_outliers) and from the desktop app's statistics panel.
LabTools notes
- Flagged points are candidates, not verdicts, and nothing has been removed. Look for a physical cause before excluding anything; if there is none, keep the point and use a robust test instead. Any exclusion must be reported.
- The IQR rule is descriptive — it has no p-value and flags roughly 0.7% of a perfectly normal sample by construction.
Confidence intervals for the mean
t-based intervals: the range of population means these data are consistent with. Report them alongside p-values — an interval shows the size of an effect, a p-value does not.
| Group | n | Mean | 95% CI |
|---|---|---|---|
| Vehicle | 8 | 6.125 | [5.722, 6.528] |
| Low dose | 8 | 5.081 | [4.691, 5.472] |
| Mid dose | 8 | 4.026 | [3.784, 4.269] |
| High dose | 8 | 3.318 | [2.958, 3.677] |
LabTools calls (2)
stats.cilabtools stats ci --data @Vehicle.json --conf-level 0.95
stats.cilabtools stats ci --data @High_dose.json --conf-level 0.95
The same method is available as an MCP tool (stats_ci) and from the desktop app's statistics panel.
Do the groups differ? (omnibus tests)
One-way ANOVA compares means and assumes normal residuals with equal variances; Kruskal–Wallis compares ranks and assumes neither. Both only say the groups differ somewhere — the pairwise table below says where.
| Test | Statistic | df | p | Effect size |
|---|---|---|---|---|
| One-way ANOVA | F = 67.11 | 3, 28 | 6.7 × 10⁻¹³ | ω² = 0.861 · η² = 0.878 · Cohen's f = 2.68 |
| Kruskal–Wallis H | H = 27.78 | 3 | 4.0 × 10⁻⁶ | ε² = 0.896 |
LabTools calls (2)
stats.anovalabtools stats anova --groups @groups.json
stats.kruskallabtools stats kruskal --groups @groups.json
The same method is available as an MCP tool (stats_anova) and from the desktop app's statistics panel.
LabTools notes
- Group 'High dose' has n = 8; normality screening has very low power at this size, so a non-significant Shapiro–Wilk is weak evidence of normality.
Which groups differ? (pairwise, corrected)
6 comparisons (every pair), each run as a Welch t-test and a Mann–Whitney test. Testing many pairs inflates false positives, so every p-value is corrected with Holm (family-wise) and Benjamini–Hochberg (false-discovery rate) through stats.adjust.
| Comparison | Mean diff. | 95% CI | Hedges' g | Welch p | Holm | BH | Mann–Whitney p | Holm | Cliff's δ |
|---|---|---|---|---|---|---|---|---|---|
| Vehicle vs Low dose | 1.044 | [0.5349, 1.553] | 2.08 | 0.0006 | 0.001 | 0.0007 | 0.003 | 0.006 | 0.906 |
| Vehicle vs Mid dose | 2.099 | [1.663, 2.534] | 4.99 | 2.9 × 10⁻⁷ | 1.5 × 10⁻⁶ | 8.8 × 10⁻⁷ | 0.0009 | 0.006 | 1 |
| Vehicle vs High dose | 2.807 | [2.317, 3.298] | 5.81 | 7.9 × 10⁻⁹ | 4.7 × 10⁻⁸ | 4.7 × 10⁻⁸ | 0.0009 | 0.006 | 1 |
| Low dose vs Mid dose | 1.055 | [0.6303, 1.48] | 2.57 | 0.0002 | 0.0005 | 0.0003 | 0.001 | 0.006 | 0.969 |
| Low dose vs High dose | 1.764 | [1.282, 2.245] | 3.71 | 1.8 × 10⁻⁶ | 7.0 × 10⁻⁶ | 3.5 × 10⁻⁶ | 0.0009 | 0.006 | 1 |
| Mid dose vs High dose | 0.7088 | [0.3101, 1.107] | 1.83 | 0.002 | 0.002 | 0.002 | 0.003 | 0.006 | 0.891 |
LabTools calls (3)
stats.ttestlabtools stats ttest --a @Vehicle.json --b @Low_dose.json --test welch --no-assumption-checks
stats.mannwhitneylabtools stats mannwhitney --a @Vehicle.json --b @Low_dose.json
stats.adjustlabtools stats adjust --p-values @p_values.json --labels @labels.json --method holm
The same method is available as an MCP tool (stats_ttest) and from the desktop app's statistics panel.
Design sensitivity
LabTools calls (2)
stats.powerlabtools stats power --n1 8 --n2 8 --mode mde --power 0.8
stats.powerlabtools stats power --n1 8 --n2 8 --effect-size 0.5
The same method is available as an MCP tool (stats_power) and from the desktop app's statistics panel.
Methods paragraph
Written to go straight into a manuscript.
Groups were compared by one-way ANOVA (F(3,28) = 67.1, p < 0.0001, ω² = 0.86); variances were homogeneous (Levene p = 0.54).
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.