# Reviewer asks for effect sizes: what to report and how to reply

> Add the effect in your own units with its 95% confidence interval first, and a standardised effect only where units mean little. Per-design table, R and Python code, and reply templates.

Canonical: https://www.licklider.ai/guides/reviewer-asks-for-effect-sizes/
Section: Guides › Responding to reviewers
Author: Licklider · Published 2026-11-10 · Last reviewed 2026-11-10 (UTC)

> **Quick answer.** Add the effect **in your own units with its 95% confidence interval** for every comparison you report: a difference in means (13.0 g, 95% CI 4.6 to 21.4), a ratio when you analysed log values, or a difference in proportions. Add a **standardised** effect such as Hedges' g, also with its interval, when your units mean little to readers or the journal asks for one — and say which version you used. With 6 animals per group a standardised effect is imprecise (g = 1.83; 95% CI for δ 0.53 to 3.37 in the example), so report the interval rather than a size label; that interval is for the population standardised difference δ and applies to d and g alike. The reply to the reviewer is two sentences; templates are below.

> **In ten minutes.** 1. Pick the row for your analysis in the table below. 2. Run the matching code. 3. Put the difference (or ratio, or risk difference) with its 95% CI in Results. 4. Add Hedges' g with its CI only if the reviewer or journal asked for a standardised effect. 5. Paste and adapt a reply template, deleting any bracketed clause you did not use.

> **Terms used below.** An *effect size* is a number that says how big a difference or association is. *Unstandardised* means in the original units (grams, U/L, percentage points). A *standardised* effect divides by an SD so it has no units; *Cohen's d* divides the difference in means by the pooled SD, and *Hedges' g* is d corrected for its small-sample bias. A *95% confidence interval (CI)* is the range of effects compatible with the data at that level. The *pooled SD* combines both groups' SDs. *Welch's t-test* does not assume equal spreads and is the default this site recommends. The *probability of superiority* is the chance that a randomly chosen animal from one group has a higher value than one drawn from the other group. The *Hodges–Lehmann shift* is the median of all between-group differences. *Risk difference* is the difference between two proportions; the *odds ratio (OR)* compares their odds. *δ (delta)* is the true standardised difference that d and g estimate; its CI comes from the *noncentral t distribution*, the distribution of t when a real difference exists. *d_z* divides the mean of paired differences by their SD; *d_av* divides the same mean of paired differences by the average of the two groups' SDs. *Simultaneous* CIs hold for all pairs at once; *Games–Howell* is the procedure that compares every pair of groups after Welch's ANOVA, with simultaneous intervals, without assuming equal spreads. *ω² (omega squared)* is the share of variance explained by group. *Newcombe's* CI is a reliable interval for a difference in proportions.

## What the reviewer is asking for

Reporting guidelines ask for the size of each effect, not only its p-value. ARRIVE 2.0 item 10b asks authors to report, "If applicable, the effect size with a confidence interval" ([ARRIVE guidelines](https://arriveguidelines.org/arrive-guidelines/results)). The reason is simple: "The effect size is the main finding of a quantitative study. While a P value can inform the reader whether an effect exists, the P value will not reveal the size of the effect" ([Sullivan & Feinn 2012](https://doi.org/10.4300/JGME-D-12-00156.1)). Cumming (2014) argues for estimation "based on effect sizes, confidence intervals, and meta-analysis" in place of reliance on significance testing ([Cumming 2014](https://doi.org/10.1177/0956797613504966)).

The comment does not ask you to change your analysis. Add the effect sizes to the analysis you planned, and check whether they change how you describe the result: a small p with a small effect deserves different words from a small p with a large effect.

**Do this:** report one effect in original units with its 95% CI for every comparison in Results, using the table below.

## Pick the effect for your design

Prefer the effect in original units. Baguley (2009) concludes that "for most purposes simple (unstandardized) effect size is more robust and versatile than standardized effect size", and recommends "a preference for simple effect size over standardized effect size" with confidence intervals ([Baguley 2009](https://doi.org/10.1348/000712608X377117)). A standardised effect earns its place when the measurement has no intrinsic meaning, such as a score on an arbitrary scale ([Sullivan & Feinn 2012](https://doi.org/10.4300/JGME-D-12-00156.1)), when you need to compare across studies, or when the journal requires it.

| Your analysis | Report first (original units) | Add if asked or units mean little | Software |
| --- | --- | --- | --- |
| Two groups, Welch's t-test | Difference in means, Welch 95% CI | Hedges' g (pooled SD) with the noncentral-t 95% CI for δ | R `t.test()`, `effectsize::cohens_d()` (its CI is the δ interval); SciPy `ttest_ind(..., equal_var=False).confidence_interval()` plus the code below |
| Two groups, log-scale analysis (natural log) | Ratio of geometric means: exp() of the difference and of both CI limits on the log scale | Hedges' g on the log values | R `t.test(log(y) ~ group)`, then `exp(...)`; SciPy the same on `np.log(y)` |
| Paired t-test | Mean of the differences with 95% CI | d_z with its CI (mean ÷ SD of the differences); d_av (mean ÷ average of the two SDs) as a point value only; name which | R `t.test(..., paired = TRUE)`; `effectsize::cohens_d(after, before, paired = TRUE)` returns d_z with its CI although it prints "Cohen's d"; d_av = mean difference ÷ ((SD₁ + SD₂) / 2) by hand |
| Welch's ANOVA, then Games–Howell | Pairwise differences with simultaneous 95% CIs | ω² from the classical ANOVA, labelled as such | R `rstatix::games_howell_test()`; `fit <- aov(y ~ group, data = d)` then `effectsize::omega_squared(fit, partial = FALSE, alternative = "two.sided")`; SciPy `tukey_hsd(..., equal_var=False)` |
| Mann–Whitney test | Probability of superiority, U ÷ (n₁ × n₂) (a probability, no units); Hodges–Lehmann shift with its 95% CI, when the two distributions have a similar shape | — | R `wilcox.test(..., conf.int = TRUE)` |
| 2 × 2 table of counts (yes/no outcome by group; each count a different, independently treated animal) | Risk difference with Newcombe 95% CI | Odds ratio with exact 95% CI; say whether conditional or sample OR | statsmodels `confint_proportions_2indep(..., method="newcomb", compare="diff")`; R: the Newcombe function on the [chi-square vs Fisher page](/guides/chi-square-vs-fisher-exact-test/), `fisher.test()` for the OR |
| Two-way design (e.g. genotype × treatment) | The interaction as a difference of differences with its 95% CI, as on the [two-way ANOVA page](/guides/two-way-anova-vs-multiple-t-tests/) | — | R `emmeans` contrasts; statsmodels `ols` |

**Do this:** choose one row per comparison before you open the data again, and use the same effect for every comparison of the same kind.

## Worked example: two groups

Grip strength in 6 control and 6 treated mice (constructed data): control 98, 104, 91, 110, 95, 102 g; treated 112, 108, 121, 104, 118, 115 g. The planned analysis was Welch's t-test.

| Effect | Estimate | 95% CI |
| --- | --- | --- |
| Difference in means (treated − control) | 13.0 g | 4.6 to 21.4 (Welch, t(9.95) = 3.43, p = 0.0064) |
| Standardised difference δ: Cohen's d (pooled SD 6.56 g) | 1.98 | 0.53 to 3.37 (one interval for δ) |
| Standardised difference δ: Hedges' g | 1.83 | 0.53 to 3.37 (same interval) |

Hedges' g multiplies d by a correction factor J; with 10 degrees of freedom J = 0.923. Lakens (2013) gives the approximation 1 − 3/(4(n₁ + n₂) − 9) = 0.923 and advises that it is "preferable (and just as easy) to report Hedges's g" ([Lakens 2013](https://doi.org/10.3389/fpsyg.2013.00863)); R's effectsize and the Python code below use the exact factor. d and g are two estimates of the same quantity δ, so they share one 95% CI, found from the noncentral t distribution. R's `effectsize::hedges_g()` prints 0.49 to 3.11 because it multiplies those limits by J; in our simulation at 6 per group that scaled interval covered δ in 93.8% of datasets when δ = 2, against 94.9% for the unscaled one, so report the unscaled interval. The standardised effect uses the pooled SD while the difference in means uses Welch's interval: a standardised effect needs one SD for both groups, so when spreads differ clearly, report the difference only, or Glass's Δ (difference ÷ control SD) and say so.

```r
# install.packages("effectsize")   # once
library(effectsize)   # version 0.8.6 used here

control <- c(98, 104, 91, 110, 95, 102)   # grip strength, g: replace with your values
treated <- c(112, 108, 121, 104, 118, 115)

# 1. Effect in original units: difference in means with Welch's 95% CI
w <- t.test(treated, control)             # Welch by default; first argument minus second: treated - control
cat(sprintf("difference %.1f g, 95%% CI %.1f to %.1f\n",
            mean(treated) - mean(control), w$conf.int[1], w$conf.int[2]))
cat(sprintf("treated %.1f +/- %.1f g, control %.1f +/- %.1f g (mean +/- SD, n = %d each); t(%.2f) = %.2f, p = %.4f\n",
            mean(treated), sd(treated), mean(control), sd(control), length(treated),
            w$parameter, w$statistic, w$p.value))

# 2. Standardised effect: d and Hedges' g share one 95% CI for delta (noncentral t, pooled SD)
d <- cohens_d(treated, control)
g <- hedges_g(treated, control)
cat(sprintf("d %.2f, g %.2f, 95%% CI for delta %.2f to %.2f\n",
            d$Cohens_d, g$Hedges_g, d$CI_low, d$CI_high))
# expected output:
# difference 13.0 g, 95% CI 4.6 to 21.4
# treated 113.0 +/- 6.3 g, control 100.0 +/- 6.8 g (mean +/- SD, n = 6 each); t(9.95) = 3.43, p = 0.0064
# d 1.98, g 1.83, 95% CI for delta 0.53 to 3.37

# Paired design: d_z = mean of the differences / SD of the differences, with its CI
before <- c(52, 48, 61, 55, 50, 58)       # replace with your paired values (same animal in each position)
after  <- c(57, 50, 66, 61, 51, 64)
print(cohens_d(after, before, paired = TRUE))   # printed as "Cohen's d"; it is d_z (after - before)

# Log-scale analysis: ratio of geometric means (treated / control) with its 95% CI
lt <- t.test(log(treated), log(control))
cat(sprintf("ratio %.3f, 95%% CI %.3f to %.3f\n",
            exp(lt$estimate[1] - lt$estimate[2]), exp(lt$conf.int[1]), exp(lt$conf.int[2])))
# expected output: d_z 1.95, 95% CI 0.51 to 3.34; ratio 1.131, 95% CI 1.043 to 1.225
```

A second, separate example: the cytokine data from the [Mann–Whitney page](/guides/mann-whitney-vs-t-test/), in pg/mL.

```r
mc <- c(12, 15, 9, 18, 11, 14, 10, 13)          # control, pg/mL
mt <- c(16, 22, 14.5, 31, 19, 95, 17, 25)       # treated, pg/mL
mw <- wilcox.test(mt, mc, conf.int = TRUE, exact = TRUE)
cat(sprintf("shift %.1f pg/mL, 95%% CI %.1f to %.1f; probability of superiority %.2f\n",
            mw$estimate, mw$conf.int[1], mw$conf.int[2], mw$statistic / (length(mt) * length(mc))))
# expected output: shift 8.0 pg/mL, 95% CI 3.5 to 17.0; probability of superiority 0.94
```

```python
import math
import numpy as np
from scipy import stats
from scipy.optimize import brentq
from scipy.special import gammaln

control = np.array([98, 104, 91, 110, 95, 102], dtype=float)   # grip strength, g: replace with your values
treated = np.array([112, 108, 121, 104, 118, 115], dtype=float)

# 1. Effect in original units: difference in means with Welch's 95% CI
welch = stats.ttest_ind(treated, control, equal_var=False)
ci = welch.confidence_interval(0.95)
print(f"difference {treated.mean() - control.mean():.1f} g, 95% CI {ci.low:.1f} to {ci.high:.1f}")  # treated - control
print(f"treated {treated.mean():.1f} +/- {treated.std(ddof=1):.1f} g, control {control.mean():.1f} +/- {control.std(ddof=1):.1f} g "
      f"(mean +/- SD, n = {len(treated)} each); t({welch.df:.2f}) = {welch.statistic:.2f}, p = {welch.pvalue:.4f}")

# 2. Standardised effect with the pooled SD
n1, n2 = len(treated), len(control)
df = n1 + n2 - 2
sp = math.sqrt(((n1 - 1) * treated.var(ddof=1) + (n2 - 1) * control.var(ddof=1)) / df)  # pooled SD
d = (treated.mean() - control.mean()) / sp                                              # Cohen's d
J = math.exp(gammaln(df / 2) - 0.5 * math.log(df / 2) - gammaln((df - 1) / 2))           # exact correction
scale = math.sqrt(1 / n1 + 1 / n2)
t = d / scale                                                                           # Student's t

# 3. 95% CI for delta: the noncentral-t values that put t at the 2.5% and 97.5% points
def cdf(ncp):  # SciPy returns nan in its far lower tail (issue #25470); that probability is ~0
    v = stats.nct.cdf(t, df, ncp)
    return v if not math.isnan(v) else (0.0 if ncp > t else 1.0)

lo = brentq(lambda ncp: cdf(ncp) - 0.975, t - 12, t + 12)
hi = brentq(lambda ncp: cdf(ncp) - 0.025, t - 12, t + 12)
print(f"d {d:.2f}, g {d * J:.2f}, 95% CI for delta {lo * scale:.2f} to {hi * scale:.2f}")
# expected output:
# difference 13.0 g, 95% CI 4.6 to 21.4
# treated 113.0 +/- 6.3 g, control 100.0 +/- 6.8 g (mean +/- SD, n = 6 each); t(9.95) = 3.43, p = 0.0064
# d 1.98, g 1.83, 95% CI for delta 0.53 to 3.37
```

Both print a difference of 13.0 g (95% CI 4.6 to 21.4) and g = 1.83 with the 95% CI for δ of 0.53 to 3.37. If the treatment changes the spread as well as the mean, Lakens lists Glass's Δ (difference ÷ control SD); say so if you use it. If you only have summary statistics, pooled SD = √[((n₁ − 1)SD₁² + (n₂ − 1)SD₂²) ÷ (n₁ + n₂ − 2)] and d = (mean₁ − mean₂) ÷ pooled SD; the [effect size calculator](/tools/effect-size-calculator/) gives the same numbers with the interval.

**Do this:** report the difference and its CI in Results first; add g only if the row above calls for it.

## How precise is a standardised effect at small n?

The interval around g is wide at the group sizes typical of lab studies. For an observed g of exactly 1.0 with equal groups (95% CI for δ from the noncentral t; stored code, and Python and R agree):

| Animals per group | 95% CI for δ when g = 1.0 |
| --- | --- |
| 3 | −0.61 to 3.00 |
| 4 | −0.41 to 2.64 |
| 6 | −0.16 to 2.29 |
| 10 | 0.09 to 1.97 |
| 20 | 0.35 to 1.67 |
| 50 | 0.59 to 1.42 |

At 6 per group the data are compatible with anything from a slightly negative effect to one more than twice as large. That is why the interval, not the point estimate, belongs in the paper, and why a sample-size calculation should not take its effect size from one small pilot ([how many biological replicates](/guides/how-many-biological-replicates/)).

**Do this:** report every standardised effect with its interval, and describe the interval rather than the estimate.

## Other designs, with numbers

**After Welch's ANOVA.** Lead with the pairwise differences your plan named, with their simultaneous intervals. In the ALT example on the [Welch's ANOVA page](/guides/welch-anova/), high dose − vehicle was 15.2 U/L (Games–Howell simultaneous 95% CI −2.6 to 33.0). If a single overall number is requested, ω² from the classical one-way ANOVA is 0.36 (two-sided 95% CI 0.03 to 0.59, R effectsize); label it as computed under equal variances, because these groups' spreads differ. Set `alternative = "two.sided"`: by default effectsize 0.8.6 prints a one-sided interval for ω² (here 0.07 to 1.00), which is not the usual two-sided 95% CI. Defaults change between versions, so check yours with `args(effectsize::omega_squared)`; if `alternative` is not accepted, report the pairwise intervals only.

**After a Mann–Whitney test.** Report the probability of superiority (also called Vargha and Delaney's A; [Vargha & Delaney 2000](https://doi.org/10.3102/10769986025002101)) and, if a shift in units helps, the Hodges–Lehmann estimate with its exact interval. With the cytokine data on the [Mann–Whitney page](/guides/mann-whitney-vs-t-test/), U = 60, the probability that a treated mouse exceeded a control mouse was 0.94, and and, because the two distributions here have a similar shape apart from one high value, the Hodges–Lehmann shift of 8.0 pg/mL (exact 95% CI 3.5 to 17.0; R `wilcox.test`, matched by our Python code) is a fair summary. When the shapes differ, report the probability of superiority alone.

**After a 2 × 2 table.** Count each animal once: a 2 × 2 table needs independently treated animals, not cells or fields from a few animals ([what counts as n](/guides/what-counts-as-n/)). Report the difference in proportions: in the tumour example on the [chi-square vs Fisher page](/guides/chi-square-vs-fisher-exact-test/), 8 of 10 vehicle mice versus 3 of 10 treated, a risk difference of 50 percentage points (Newcombe 95% CI 7 to 74). If an odds ratio is requested, name which one in the same sentence: the conditional odds ratio from R's Fisher's exact test is 8.15 (exact 95% CI 0.88 to 127), while the sample odds ratio from SciPy's `fisher_exact` is 9.33.

**Do this:** for a design not listed, report the quantity your test is about (the difference, ratio or contrast it tests) with its 95% CI, and say how it was computed.

## What to write

Replace the bracketed parts with your numbers and delete any bracketed clause that does not apply to you. Keep the analysis you planned; these templates add effect sizes to it.

**Response letter (you added effects in original units):**

> We thank the reviewer and agree. We now report, for every comparison, the effect in its original units with a 95% confidence interval (for example, grip strength was 13.0 g higher in treated mice, 95% CI 4.6 to 21.4; Results, [section]). [Delete if not used: Where a standardised effect was requested, we also report Hedges' g with the 95% confidence interval for the standardised difference, computed with the pooled SD.]

**Response letter (the reviewer asked specifically for Cohen's d):**

> We now report Hedges' g, which is Cohen's d with a small-sample correction (Lakens 2013), with the 95% confidence interval for the standardised difference from the noncentral t distribution (Results, [section]). Because the outcome is measured in [grams], we report the difference in [grams] with its 95% confidence interval as the primary effect.

**Results sentence (two groups):**

> Grip strength was higher in treated mice (113.0 ± 6.3 g, mean ± SD, n = 6) than in controls (100.0 ± 6.8 g, n = 6); difference 13.0 g, 95% CI 4.6 to 21.4 (two-sided Welch's t-test, t(9.95) = 3.43, p = 0.0064; Hedges' g = 1.83, 95% CI for δ 0.53 to 3.37).

**Results sentence (the interval includes zero):**

> [Outcome] did not differ clearly between groups: difference [1.2 g], 95% CI [−3.1 to 5.5] (two-sided Welch's t-test, p = [0.55]). The data are compatible with effects from a [3.1 g] decrease to a [5.5 g] increase.

**Methods sentence:**

> Effects are reported as differences in means with Welch 95% confidence intervals[, ratios of geometric means for log-transformed outcomes] and, where indicated, as Hedges' g (pooled SD; 95% confidence interval for the standardised difference from the noncentral t distribution, limits not multiplied by the correction factor; R effectsize 0.8.6).

Then update the abstract and discussion if adding the effects changes how a finding should be described, and say so in the reply.

## Cohen's "small, medium, large"

Cohen's thresholds of d = 0.2, 0.5 and 0.8 were proposed for the behavioural sciences. Lakens (2013) notes that "these values are arbitrary and should not be interpreted rigidly", and that, following Cohen, "the only reason to use these benchmarks is because findings are extremely novel, and cannot be compared to related findings in the literature" ([Lakens 2013](https://doi.org/10.3389/fpsyg.2013.00863)). In the grip-strength example g = 1.83 is above Cohen's 0.8 threshold, yet its interval runs from 0.53 to 3.37 and so spans every label at once.

**Do this:** compare an effect with what matters in your system (a change in grams, a fold change, a published effect in a similar model) rather than labelling it with Cohen's terms.

## Check what an AI assistant computed

Effect sizes are easy to compute in a way that looks right and is not. When an assistant gives you a d or g, check:

1. **Which SD?** Pooled SD, control SD (Glass's Δ) or, for paired data, the SD of the differences. The Methods sentence must name it.
2. **d or g?** Many functions return d; Hedges' g needs the correction.
3. **Is there a CI, and how was it computed?** If the interval is missing, compute it with the code above; if it came from `hedges_g()`, its limits are multiplied by J, so report the unscaled interval instead.
4. **Did it convert from a test statistic correctly?** Only for Student's (pooled-SD) t with two independent groups does d = t × √(1/n₁ + 1/n₂) hold; it does not hold for Welch's t, the shortcut 2t ÷ √df is only approximate, and for paired data neither formula gives d_av.
5. **Which odds ratio?** SciPy's `fisher_exact` returns the sample odds ratio; R's `fisher.test` returns the conditional odds ratio.

**Do this:** check one effect yourself with the code above before you paste the assistant's numbers into the paper.

## References

- ARRIVE 2.0: Percie du Sert N, et al. (2020). The ARRIVE guidelines 2.0: updated guidelines for reporting animal research. *PLOS Biology* 18:e3000410. [doi:10.1371/journal.pbio.3000410](https://doi.org/10.1371/journal.pbio.3000410). Item 10b quoted from [arriveguidelines.org](https://arriveguidelines.org/arrive-guidelines/results).
- Baguley T (2009). Standardized or simple effect size: what should be reported? *British Journal of Psychology* 100:603–617. [doi:10.1348/000712608X377117](https://doi.org/10.1348/000712608X377117)
- Cumming G (2014). The new statistics: why and how. *Psychological Science* 25:7–29. [doi:10.1177/0956797613504966](https://doi.org/10.1177/0956797613504966)
- Lakens D (2013). Calculating and reporting effect sizes to facilitate cumulative science: a practical primer for t-tests and ANOVAs. *Frontiers in Psychology* 4:863. [doi:10.3389/fpsyg.2013.00863](https://doi.org/10.3389/fpsyg.2013.00863)
- Sullivan GM, Feinn R (2012). Using effect size—or why the P value is not enough. *Journal of Graduate Medical Education* 4:279–282. [doi:10.4300/JGME-D-12-00156.1](https://doi.org/10.4300/JGME-D-12-00156.1)
- Vargha A, Delaney HD (2000). A critique and improvement of the CL common language effect size statistics of McGraw and Wong. *Journal of Educational and Behavioral Statistics* 25:101–132. [doi:10.3102/10769986025002101](https://doi.org/10.3102/10769986025002101)

## Related

- [How to report a t-test](https://www.licklider.ai/guides/how-to-report-a-t-test/)
- [Reviewer asks you to justify your sample size](https://www.licklider.ai/guides/reviewer-asks-to-justify-sample-size/)
- [Reviewer asks for a multiple-comparison correction](https://www.licklider.ai/guides/reviewer-asks-for-multiple-comparison-correction/)
- [Cohen's d vs Hedges' g](https://www.licklider.ai/guides/cohens-d-vs-hedges-g/)

## How this page was made

- Written and published by Licklider. Reporting requirements are quoted from the ARRIVE 2.0 guidelines; recommendations on which effect size to report come from the peer-reviewed papers listed under References. Cited text was checked against the source.
- The worked examples use constructed data or data from other guides on this site. Every number was produced by stored code (Python 3.13 with SciPy 1.18.1 and statsmodels 0.15.0; R 4.3.3 with effectsize 0.8.6), and the two implementations agree where both compute the value.
- Separate review passes checked the statistics, the citations and readability before publication.
