What Is Dunnett's Test?
Dunnett's Test is a post hoc multiple comparison procedure used after a one-way ANOVA to compare each of several treatment groups to a single designated control group. It controls the family-wise error rate (FWER) at α across all comparisons simultaneously, while being more statistically powerful than all-pairwise tests when only control-vs-treatment differences are of interest. It was introduced by Charles Dunnett in his 1955 paper in the Journal of the American Statistical Association.
H₀: μᵢ = μ₀ for each treatment i | H₁: μᵢ ≠ μ₀After running a one-way ANOVA and finding a significant F-statistic, you know at least one group mean differs — but not which one. Post hoc tests answer that follow-up question. The choice of test depends entirely on what comparisons the study was designed to make.
When you need every group compared to every other group, Tukey's HSD or the Bonferroni correction are appropriate. When one group is a natural control and the only question is whether each treatment differs from it, Dunnett's Test is the right tool — and it delivers greater power for each individual comparison.
Why Dunnett's Test Exists: The Multiple Comparisons Problem
Every statistical test at α = 0.05 carries a 5% false-positive risk. Run multiple tests on the same dataset and that risk compounds. With k treatment groups and one control, you face k−1 pairwise comparisons. If each uses α = 0.05 independently, the family-wise error rate reaches 1 − (0.95)^(k−1). With four treatments that figure climbs to roughly 14% — a 14% chance of at least one spurious result in the set.
Dunnett's Test adjusts its critical values so the probability of any false rejection across all k−1 comparisons stays exactly at α. It does this more efficiently than the Bonferroni correction because it uses the exact joint distribution of the test statistics, which are correlated through the shared control group and shared MSE. That correlation means the actual joint error rate under Bonferroni is below α — making Bonferroni needlessly conservative. Dunnett's Test exploits that correlation to set tighter (less conservative) critical values and gain power.
With 5 treatment groups and 1 control, Dunnett's Test accounts for 5 comparisons; Tukey HSD accounts for 15. Because Tukey must guard against more potential false positives, its critical value is larger — meaning a bigger observed difference is required to reach significance. Dunnett's narrower critical values directly reflect the smaller comparison set, so each individual test is more powerful.
The Dunnett's Test Formula
The test statistic for comparing treatment group i to the control group (group 0) is:
ȳᵢ = mean of treatment group i
ȳ₀ = mean of control group
MSE = mean squared error from ANOVA
nᵢ = sample size of treatment group i
n₀ = sample size of control group
The statistic dᵢ follows a multivariate t-distribution. Its critical value d* is obtained from Dunnett's table at significance level α, with k (the number of treatment groups, not counting the control) and ν = N − k − 1 degrees of freedom where N is the total sample size across all groups.
The critical value d* is not the same as the ordinary t-critical value. Dunnett's critical value is larger because it accounts for the simultaneous probability over all k−1 comparisons. Using the standard t-table underestimates the required threshold and inflates the family-wise error rate. Use the Dunnett's critical value table or statistical software.
Decision Rule
For each treatment group i, compare the absolute value |dᵢ| to the two-tailed critical value d*(α, k, ν):
- If |dᵢ| ≥ d* → Reject H₀. Statistically significant evidence that treatment i differs from the control.
- If |dᵢ| < d* → Fail to reject H₀. Insufficient evidence of a difference at the chosen α level.
For a one-tailed test — for example, testing whether a drug reduces blood pressure rather than merely changes it — compare the signed dᵢ to the one-tailed critical value and reject only when the sign matches the predicted direction.
Simultaneous Confidence Intervals
Dunnett's procedure also produces simultaneous 95% confidence intervals for each difference μᵢ − μ₀. All k−1 intervals jointly cover the true differences with probability 1 − α:
An interval that excludes zero indicates a statistically significant difference between that treatment and the control. Report these intervals alongside p-values — they communicate the direction and plausible magnitude of each effect, not just whether it clears a significance threshold.
Assumptions of Dunnett's Test
Dunnett's Test shares the assumptions of one-way ANOVA. Violating them can produce inaccurate p-values and incorrect conclusions.
Independence
Observations must be independent within and across all groups. Each subject or experimental unit should belong to exactly one group. Repeated measures or matched designs require a repeated-measures ANOVA framework with an appropriately adapted post hoc procedure.
Normality Within Groups
Data within each group should be approximately normally distributed. The test tolerates moderate departures from normality when group sizes reach around 15–20 observations. Verify with Shapiro-Wilk or inspect Q-Q plots. With small samples and clear non-normality, a non-parametric alternative such as Dunn's test with a control correction is more reliable. See the full guide to normality tests.
Homogeneity of Variances
All groups should have approximately equal population variances — the homoscedasticity assumption also required by ANOVA. The pooled MSE used in the Dunnett formula is only a valid variance estimate when this holds. Check with Levene's test before proceeding. When variances are unequal, consider a log or square-root transformation, or use a modified Dunnett procedure with group-specific variance estimates available in some software packages. See statistical assumptions for practical remediation steps.
Pre-Specified Control Group
One group must be identified as the control before data collection. Selecting the "control" post-hoc — for example by choosing the group with the lowest mean — invalidates the critical values and inflates the Type I error rate. The control should be established by the study design, not determined by the data.
Dunnett's Test is reasonably robust to mild normality violations when group sizes are roughly equal and at least 15. Moderate imbalance (largest-to-smallest ratio under 2:1) is usually acceptable. The equal variance assumption matters more — when it fails, the pooled MSE is not a valid shared variance estimate and the test statistics become unreliable.
When to Use Dunnett's Test
Post Hoc Test Selection: Decision Guide
Real-World Applications
Clinical Pharmacology
Comparing low, medium, and high drug doses to a placebo control for blood pressure reduction. Each dose is a treatment group; the placebo is the control.
Agriculture
Testing four fertilizer formulations against an untreated control plot for crop yield. The control-vs-treatment structure matches Dunnett's Test exactly.
Quality Control
Evaluating two new manufacturing processes against the established baseline process for defect rate. The baseline is the pre-specified control.
Toxicology
Exposing groups to three concentrations of a compound versus a vehicle control, measuring enzyme activity. Classic dose-response design.
Education Research
Testing three new teaching interventions against a traditional instruction control group for exam performance outcomes.
Marketing Science
Comparing conversion rates for three new landing page designs against the current live page in a controlled web experiment.
Worked Example 1: Drug Efficacy Study
This is the most common application context. A pharmaceutical company tests three drug doses against a placebo control, measuring systolic blood pressure (mmHg) after four weeks of treatment.
Four groups (control + 3 doses), n = 10 per group. ANOVA: F(3, 36) = 8.42, p < .001, MSE = 64.0, df_error = 36. Test at α = 0.05, two-tailed.
| Group | n | Mean (ȳ) | SD |
|---|---|---|---|
| Control (Placebo) | 10 | 130.2 | 7.9 |
| Drug A (Low Dose) | 10 | 124.6 | 8.1 |
| Drug B (Mid Dose) | 10 | 118.3 | 8.4 |
| Drug C (High Dose) | 10 | 112.1 | 7.6 |
Hypotheses (per drug): H₀: μᵢ = μ₀ (drug i has same BP as placebo) | H₁: μᵢ ≠ μ₀ (two-tailed)
ANOVA result: F(3, 36) = 8.42, p < .001 — significant overall effect. The ANOVA error df = 36 and MSE = 64.0 are used in Dunnett's formula.
Standard Error (equal group sizes):
SE = √[MSE × (1/nᵢ + 1/n₀)] = √[64.0 × (1/10 + 1/10)] = √[64.0 × 0.2] = √12.8 = 3.578
Dunnett's d statistics:
Drug A: d₁ = (124.6 − 130.2) / 3.578 = −5.6 / 3.578 = −1.565
Drug B: d₂ = (118.3 − 130.2) / 3.578 = −11.9 / 3.578 = −3.326
Drug C: d₃ = (112.1 − 130.2) / 3.578 = −18.1 / 3.578 = −5.059
Critical value: From Dunnett's table at α = 0.05 (two-tailed), k = 3 treatments, ν = 36 df: d* ≈ 2.47
Decisions:
Drug A: |−1.565| = 1.565 < 2.47 → Not significant. Insufficient evidence Drug A differs from placebo.
Drug B: |−3.326| = 3.326 > 2.47 → Significant. Drug B reduces BP vs. placebo.
Drug C: |−5.059| = 5.059 > 2.47 → Significant. Drug C reduces BP vs. placebo.
✅ Conclusion: At α = 0.05, Dunnett's Test shows Drug B and Drug C produce significantly lower systolic blood pressure than the placebo control. Drug A (low dose) does not reach significance at this sample size — the observed 5.6 mmHg reduction could plausibly reflect sampling variation alone.
Worked Example 2: Agricultural Fertilizer Trial
An agronomist tests four fertilizer treatments against an untreated control, recording wheat yield (kg per plot) across a growing season. The control-versus-treatment design is standard in field trials and maps directly onto Dunnett's Test.
Five groups (control + 4 fertilizers), n = 8 per group. ANOVA: F(4, 35) = 7.18, p < .001, MSE = 18.25, df_error = 35. Test at α = 0.05.
| Group | n | Mean Yield (kg) |
|---|---|---|
| Control (No Fertilizer) | 8 | 41.2 |
| Fertilizer A (Nitrogen-heavy) | 8 | 48.7 |
| Fertilizer B (Balanced NPK) | 8 | 53.1 |
| Fertilizer C (Potassium-heavy) | 8 | 44.4 |
| Organic Blend | 8 | 49.3 |
Standard Error:
SE = √[18.25 × (1/8 + 1/8)] = √[18.25 × 0.25] = √4.5625 = 2.136
Dunnett's d statistics (ȳ₀ = 41.2):
Fert A: d = (48.7 − 41.2) / 2.136 = 7.5 / 2.136 = 3.511
Fert B: d = (53.1 − 41.2) / 2.136 = 11.9 / 2.136 = 5.571
Fert C: d = (44.4 − 41.2) / 2.136 = 3.2 / 2.136 = 1.498
Organic: d = (49.3 − 41.2) / 2.136 = 8.1 / 2.136 = 3.792
Critical value: k = 4 treatments, ν = 35, α = 0.05 (two-tailed): d* ≈ 2.59
Decisions:
Fert A: 3.511 > 2.59 → Significant
Fert B: 5.571 > 2.59 → Significant
Fert C: 1.498 < 2.59 → Not significant
Organic: 3.792 > 2.59 → Significant
✅ Conclusion: Fertilizers A, B, and the Organic Blend each produce significantly higher wheat yield than the untreated control (α = 0.05). The potassium-heavy Fertilizer C does not show a statistically significant yield advantage in this trial.
Dunnett's Test vs. Tukey HSD vs. Bonferroni vs. Scheffé
Choosing among post hoc tests is one of the most common sources of confusion in applied statistics. The comparison below covers the four main options across every dimension that matters for a real analysis decision.
| Feature | Dunnett's Test | Tukey HSD | Bonferroni | Scheffé |
|---|---|---|---|---|
| Comparisons made | k−1 (each treatment vs. control only) | All k(k−1)/2 pairs | Any pre-specified set | All possible contrasts |
| FWER control | Exact at α | Exact at α | Conservative (≤ α) | Conservative (≤ α) |
| Statistical power | Highest for control comparisons | Moderate | Low (conservative) | Lowest |
| Requires control group | Yes — mandatory | No | No | No |
| Best use case | Designed treatments-vs-control study | Exploratory all-pair comparisons | Few pre-planned comparisons | Complex unplanned contrasts |
| Critical value source | Dunnett's table / software | Studentized range table | t-table at α/m | F-table |
Step-by-Step Procedure
Verify the Study Design
Confirm you have one pre-specified control group and two or more treatment groups. If you need all pairwise comparisons, switch to Tukey HSD. If the control was determined by looking at the data, Dunnett's critical values are invalid.
Check Assumptions
Run Levene's test for homogeneity of variance. Inspect Shapiro-Wilk results or Q-Q plots for normality within each group. Address violations before proceeding — transformation or a non-parametric approach if needed.
Run One-Way ANOVA
Conduct the overall F-test across all groups. Record the MSE and the error degrees of freedom ν = N − k − 1. These values feed directly into the Dunnett formula. See the full ANOVA guide for calculation steps.
Calculate the Standard Error
Use SE = √[MSE × (1/nᵢ + 1/n₀)]. For equal sample sizes (the balanced case) this simplifies to SE = √[2·MSE/n]. The MSE comes from the full ANOVA — pooled across all groups, not just the pair being compared.
Compute d Statistics for Each Treatment
For each treatment group i, compute dᵢ = (ȳᵢ − ȳ₀) / SE. Track the sign — negative means the treatment mean is below the control, positive means above. For a two-tailed test, use the absolute value |dᵢ| when comparing to d*.
Find the Critical Value d*
Look up d*(α, k, ν) in the Dunnett's critical value table, where k is the number of treatment groups (not counting the control) and ν is the ANOVA error degrees of freedom. For values between table entries, interpolate or use software.
Make Decisions and Report
For each comparison, report the mean difference, the d statistic, significance at α, and the 95% simultaneous confidence interval. Include Cohen's d effect sizes. See APA Reporting Format below.
Dunnett's Critical Values Reference Table (α = 0.05, Two-Tailed)
This table gives approximate two-tailed critical values d* at α = 0.05. Rows are error degrees of freedom (ν) from the ANOVA; columns are the number of treatment groups k, not counting the control. For the complete table including α = 0.01 and one-tailed values, see Dunnett's Table.
| ν (Error df) | k = 1 | k = 2 | k = 3 | k = 4 | k = 5 | k = 6 | k = 8 | k = 10 |
|---|---|---|---|---|---|---|---|---|
| 5 | 2.571 | 3.03 | 3.29 | 3.48 | 3.62 | 3.73 | 3.90 | 4.02 |
| 6 | 2.447 | 2.86 | 3.10 | 3.26 | 3.39 | 3.49 | 3.65 | 3.76 |
| 10 | 2.228 | 2.57 | 2.76 | 2.89 | 2.99 | 3.07 | 3.20 | 3.29 |
| 15 | 2.131 | 2.44 | 2.61 | 2.73 | 2.82 | 2.89 | 3.01 | 3.09 |
| 20 | 2.086 | 2.38 | 2.54 | 2.65 | 2.73 | 2.80 | 2.91 | 2.99 |
| 24 | 2.064 | 2.35 | 2.51 | 2.61 | 2.70 | 2.76 | 2.87 | 2.94 |
| 30 | 2.042 | 2.32 | 2.47 | 2.58 | 2.66 | 2.72 | 2.82 | 2.89 |
| 40 | 2.021 | 2.29 | 2.44 | 2.54 | 2.62 | 2.68 | 2.78 | 2.85 |
| 60 | 2.000 | 2.27 | 2.41 | 2.51 | 2.58 | 2.64 | 2.74 | 2.81 |
| 120 | 1.980 | 2.24 | 2.38 | 2.47 | 2.55 | 2.60 | 2.70 | 2.77 |
| ∞ | 1.960 | 2.21 | 2.35 | 2.44 | 2.51 | 2.56 | 2.65 | 2.72 |
- Count your treatment groups (k). Do not count the control group in k.
- Find ν from the ANOVA output: ν = N − (k+1) for a balanced one-way design.
- Read d* at the intersection of your ν row and k column in the table above.
- For exact values at any ν and k, use the
qDunnett()function in R's DescTools package. - For α = 0.01 or one-tailed tests, use a separate table or software — the values above are two-tailed α = 0.05 only.
Running Dunnett's Test in Software
R
The DescTools package provides the most direct implementation. The multcomp package offers additional flexibility for contrast plots and confidence intervals.
# install.packages("DescTools") library(DescTools) # Data: Drug efficacy study bp <- c( 131,129,133,128,132,130,127,131,133,126, # Control 125,123,126,122,125,124,121,126,127,121, # Drug A 118,117,120,116,119,118,115,120,119,117, # Drug B 112,111,114,110,113,112,110,113,111,114 # Drug C ) grp <- factor(rep(c("Control","DrugA","DrugB","DrugC"), each=10)) # Step 1: One-way ANOVA model <- aov(bp ~ grp) summary(model) # Step 2: Dunnett's Test — specify the control group DunnettTest(x=bp, g=grp, control="Control", conf.level=0.95)
library(multcomp) model <- aov(bp ~ grp) # Dunnett contrasts vs. control (alphabetically first) dc <- glht(model, linfct=mcp(grp="Dunnett")) summary(dc) # adjusted p-values confint(dc) # simultaneous confidence intervals plot(confint(dc)) # CI plot
Python
# pip install scikit-posthocs scipy import numpy as np import pandas as pd from scipy import stats import scikit_posthocs as sp bp_data = { "Control": [131,129,133,128,132,130,127,131,133,126], "DrugA": [125,123,126,122,125,124,121,126,127,121], "DrugB": [118,117,120,116,119,118,115,120,119,117], "DrugC": [112,111,114,110,113,112,110,113,111,114] } values = np.concatenate(list(bp_data.values())) labels = np.repeat(list(bp_data.keys()), [len(v) for v in bp_data.values()]) # ANOVA first f, p = stats.f_oneway(*bp_data.values()) print(ff"F = {f:.3f}, p = {p:.4f}") # Dunnett's Test vs. control df = pd.DataFrame({"val": values, "group": labels}) result = sp.posthoc_dunnett(df, val_col="val", group_col="group", control="Control") print(result)
SPSS
- Go to Analyze → Compare Means → One-Way ANOVA
- Move the dependent variable to the Dependent List and the grouping variable to Factor
- Click Post Hoc
- Under "Tests that assume equal variance," check Dunnett
- In the "Control Category" field, specify whether control is the first or last category, or enter the value directly
- Set α = 0.05 and click Continue → OK
Worked Example 3: Manufacturing Quality Control
Case Study — Industrial Context
Production Line Defect Rate Comparison
A factory runs its established baseline process (control) alongside three modified processes aimed at reducing defects. Each runs for n = 12 batches. ANOVA: F(3, 44) = 6.31, p = .001, MSE = 2.14, df_error = 44.
| Process | Mean Defect Rate (%) | d statistic | |d| vs. d* = 2.51 | Decision |
|---|---|---|---|---|
| Baseline (Control) | 8.4 | — | — | — |
| Process A | 6.7 | −2.68 | 2.68 > 2.51 | Significant ✓ |
| Process B | 5.9 | −3.95 | 3.95 > 2.51 | Significant ✓ |
| Process C | 7.8 | −0.95 | 0.95 < 2.51 | Not significant |
SE = √[2.14 × (2/12)] = √0.357 = 0.597. Critical value d*(0.05, k=3, ν=44) ≈ 2.51. Processes A and B achieve significantly lower defect rates than the baseline; Process C does not reach significance.
Effect Size: Cohen's d for Each Comparison
Statistical significance tells you whether a difference is real given your sample size. Effect size tells you how large that difference is in practical terms. For each Dunnett comparison, report Cohen's d:
√MSE = pooled SD estimate from ANOVA
|d| ≈ 0.2 = small effect
|d| ≈ 0.5 = medium effect
|d| ≈ 0.8 = large effect
For Drug C in Example 1: Cohen's d = (112.1 − 130.2) / √64 = −18.1 / 8 = −2.26. This is a very large effect — the blood pressure reduction is more than twice the pooled standard deviation. A statistically significant result with a tiny effect size may have limited clinical or practical relevance; always report both. See the full effect size guide for more on interpreting Cohen's d.
APA Reporting Format
The APA Publication Manual (7th edition) does not specify a unique template for Dunnett's Test, so follow the general guidance for post hoc comparisons. The key elements are the ANOVA F-statistic, the name of the post hoc test, group means and SDs, mean differences, d statistics, adjusted p-values, and confidence intervals.
- ANOVA: "A one-way ANOVA revealed a significant effect of [factor], F([k], [ν]) = [F value], p = [p value], η² = [effect size]."
- Post hoc: "Dunnett's test was used to compare each treatment to the control group (α = .05)."
- Significant result: "[Treatment i] (M = [mean], SD = [sd]) differed significantly from the control (M = [mean], SD = [sd]), d = [statistic], adjusted p = [p], 95% CI [[lower], [upper]], Cohen's d = [effect size]."
- Non-significant result: "[Treatment j] (M = [mean], SD = [sd]) did not differ significantly from the control, d = [statistic], adjusted p = [p]."
A one-way ANOVA found a significant effect of drug treatment on systolic blood pressure, F(3, 36) = 8.42, p < .001, η² = .41. Dunnett's test was used to compare each drug dose to the placebo control at a family-wise α = .05. Drug B (M = 118.3, SD = 8.4) differed significantly from the placebo (M = 130.2, SD = 7.9), d = −3.33, adjusted p = .008, 95% CI [−20.7, −3.1], Cohen's d = −1.49. Drug C (M = 112.1, SD = 7.6) also differed significantly from placebo, d = −5.06, adjusted p < .001, 95% CI [−26.9, −9.3], Cohen's d = −2.26. Drug A (M = 124.6, SD = 8.1) did not differ significantly from placebo, d = −1.57, adjusted p = .29.
Interactive Dunnett's Test Calculator
Enter group means, sample size per group (balanced design), and the ANOVA MSE to compute all Dunnett d statistics and compare each to the approximate critical value. For exact critical values at any ν and k, use R or the full Dunnett's table.
Dunnett's Test Calculator (Balanced Design)
Common Mistakes and How to Avoid Them
| Mistake | Why It Matters | Correct Approach |
|---|---|---|
| Using Tukey HSD when only control comparisons are needed | Tukey is more conservative; loses power for each test | Use Dunnett's Test when the design has one pre-specified control |
| Using the ordinary t-critical value instead of d* | FWER is not controlled — inflates Type I error | Look up d* from Dunnett's table at the correct α, k, and ν |
| Selecting the "control" after seeing the data | Data-snooping invalidates the critical values entirely | Designate the control group in the study protocol before data collection |
| Counting the control group in k | Wrong degrees of freedom → wrong critical value | k = number of treatment groups only, excluding the control |
| Not reporting effect sizes | Significance alone does not convey practical importance | Report Cohen's d and 95% simultaneous confidence intervals |
| Skipping the ANOVA and assumption checks | Missed violations of homoscedasticity or normality | Run ANOVA first; check Levene's test and Q-Q plots before Dunnett's |
Frequently Asked Questions
Summary
- Use Dunnett's Test when you have one control group and need to compare each treatment to it — not to each other.
- The test statistic is dᵢ = (ȳᵢ − ȳ₀) / √[MSE × (1/nᵢ + 1/n₀)]. The MSE comes from the full one-way ANOVA.
- Compare each |dᵢ| to d*(α, k, ν) from Dunnett's table — not to the ordinary t-critical value.
- Dunnett's Test is more powerful than Tukey HSD and Bonferroni for control-vs-treatment comparisons because it accounts for fewer simultaneous tests.
- Four assumptions: independence, normality within groups, equal variances, and a control group designated before data collection.
- Report ANOVA F-statistic, Dunnett d-statistics, adjusted p-values, simultaneous 95% CIs, and Cohen's d for each comparison.
- In R, use
DunnettTest()from DescTools orglht(model, mcp(group="Dunnett"))from multcomp.