# How to write the statistical methods section: a fill-in template for animal and cell studies

> A fill-in statistical analysis paragraph in the order reviewers check it, mapped to ARRIVE 2.0, SAMPL and the Nature reporting summary, with a filled-in mouse example and code for software versions.

Canonical: https://www.licklider.ai/guides/how-to-write-statistical-methods-section/
Section: Guides › Writing and reporting
Author: Licklider · Published 2026-11-10 · Last reviewed 2026-11-10 (UTC)

> **Quick answer.** Write one paragraph that answers, in this order: **what one independent unit was, and how many there were** per group; **how that number was decided**; **how animals were allocated and who knew the groups**; **what was excluded and why**; **which test for each comparison**, whether it was one- or two-sided, the α level, and whether it was chosen before analysis; **how assumptions were checked and what you did if they failed**; **how multiple comparisons were handled**; **what is reported** (estimates with 95% CIs and exact p-values such as p = 0.062, not p < 0.05); **software with versions**; and **where data and code are**. The fill-in template below does this, and each line maps to an item in ARRIVE 2.0, SAMPL or the Nature Portfolio reporting summary, so a reviewer can tick it off.

> **Terms used below.** *Experimental unit*: the smallest unit that could have received a different treatment (usually the animal); the number of them is n. *A priori*: decided before the data were collected or analysed. *Two-sided test*: one that would detect a difference in either direction. *α (alpha)*: the p-value threshold for calling a result significant, usually 0.05. *Multiple comparisons*: several tests in one family, where the chance of at least one false positive grows with each test. *95% CI*: the range of effects compatible with the data at the 95% level. *Minimum detectable effect* (a sensitivity calculation): the smallest effect your group sizes could detect with a stated power. *Power*: the chance that a study detects an effect of a given size, if that effect is real. *Pooled SD*: one SD combining both groups; a *standardised difference* is a difference divided by it. *Residuals*: each value minus its group mean; a *normal quantile plot* of them shows whether they are roughly normal. *Family*: the set of tests that together support one claim and share one correction. *Exact p-value*: the number itself (p = 0.062), not a threshold (p < 0.05). *Holm's method*: a stepwise correction for a family of tests.

## The template, in the order reviewers check

Replace every bracketed item and delete the variants that do not apply. Use "chosen before the data were analysed" only when a dated protocol, registration or lab notebook shows it was; otherwise use the "no written plan" wording in the same bracket. For cell or culture studies, replace "mouse" with the independent experiment (culture or day).

> **Statistical analysis.** The experimental unit was the [mouse]; [technical replicates were averaged within each mouse before analysis]. Group sizes ([n] per group; [N] animals in total) were [**A**: chosen to detect a difference of [Δ] [units] (SD [s], from [source]) with [80]% power at a two-sided α of [0.05]] [**B**: set by [the number of animals available]; no a priori calculation was done, and with these groups, assuming equal SDs, a standardised difference of [d] SD was detectable with 80% power at a two-sided α of [0.05]]. [Animals were allocated to groups with [a computer-generated random sequence] / Allocation was not randomised: [how groups were formed]], and [the person measuring the outcome and the person analysing the data] [was / were] unaware of group allocation [/ no one was blinded to group allocation]. [**C**: No animals or data points were excluded.] [**D**: [k] animals were excluded because [reason recorded before unblinding], under criteria set before the experiment; results with all animals are in [Table S1].] [Outcome] was compared between groups with a two-sided [Welch's t-test / paired t-test on within-animal differences / Welch's ANOVA followed by Games–Howell comparisons], [chosen before the data were analysed / chosen after data collection, without a written plan][; positive, right-skewed outcomes were analysed on the log scale and reported as ratios]. [If the method was planned: Residuals were inspected with normal quantile plots; no formal normality test was used to choose the method.] [If a normality test chose the method: say so, name the test and the rule, and report the pre-planned test as well.] [If an assumption was not met: say what was done, for example "values were log-transformed, as planned".] [**E**: [Outcome] was the single pre-specified primary outcome; other outcomes are reported as exploratory.] [**F**: p-values for the [k] outcomes in the [family] were adjusted with Holm's method.] Results are reported as [mean differences / ratios] with 95% confidence intervals and exact p-values; two-sided p < 0.05 was considered statistically significant. Analyses used [R 4.3.3 with car 3.1-2 / Python 3.13 with SciPy 1.18.1]; data and code are available at [repository and identifier].

Pick **A** or **B**, and **C** or **D**; then choose **E**, **F**, both (one primary outcome plus an adjusted secondary family) or neither, as applies. The variants differ only where the study differs. If you used statsmodels' default correction, write "Holm–Šidák", not "Holm" (see the last section). For the details behind each choice, see [how many replicates](/guides/how-many-biological-replicates/) (A or B), [excluding outliers](/guides/when-can-you-exclude-an-outlier/) (C or D) and [which correction](/guides/which-multiple-comparison-correction/) (E or F).

**Do this:** paste the template into your draft and fill it from your protocol, not from memory of what you did. In the response letter, one sentence carries it: "We have added the following to the Statistical analysis section: [paragraph]." If the test was not pre-specified, say so there too.

## What each sentence answers

ARRIVE 2.0 splits its checklist into the "Essential 10", which "constitutes the minimum requirement", and a recommended set ([Percie du Sert et al. 2020](https://doi.org/10.1371/journal.pbio.3000410)). The table quotes the item each template line satisfies.

| Template line | ARRIVE 2.0 | SAMPL | Nature Portfolio reporting summary |
| --- | --- | --- | --- |
| Experimental unit and n | 2a: "Specify the exact number of experimental units allocated to each group" | — | "The exact sample size (n) for each experimental group/condition, given as a discrete number and unit of measurement" |
| How n was decided (A/B) | 2b: "Explain how the sample size was decided. Provide details of any a priori sample size calculation, if done." | — | — |
| Randomisation and blinding | 4a: "State whether randomisation was used … If done, provide the method"; 5: "Describe who was aware of the group allocation at the different stages" | — | — |
| Exclusions (C/D) | 3a: "Specify if these criteria were established a priori. If no criteria were set, state this explicitly." | "If relevant, report how any outlying data were treated in the analysis." | — |
| Test, sidedness, α | 7a: "Provide details of the statistical methods used for each analysis" | "Make clear which method was used for each analysis"; "Say whether tests were one- or two-tailed"; "Report the alpha level" | "The statistical test(s) used AND whether they are one- or two-sided" |
| Assumptions | 7b: "Describe any methods used to assess whether the data met the assumptions … and what was done if the assumptions were not met." | "Verify that the data conformed to assumptions of the test used to analyse them." | "A description of any assumptions or corrections, such as tests of normality and adjustment for multiple comparisons" |
| Multiplicity (E/F) | — | "Indicate whether and how any allowance or adjustments were made for multiple comparisons" | (same item as above) |
| Estimates, CIs, exact p | 10b: "the effect size with a confidence interval" | — | "Give P values as exact values whenever suitable." |
| Software and versions | 7a: "including software used" | "Name the statistical package or program used in the analysis." | — |
| Data, code, protocol | 19 (protocol) and 20: "Provide a statement describing if and where study data are available." | — | — |

SAMPL quotations are from Lang & Altman's guidelines ([2013 text](https://www.equator-network.org/reporting-guidelines/sampl/); [published 2015](https://doi.org/10.1016/j.ijnurstu.2014.09.006)); the reporting summary quotations are from the [Nature Portfolio form](https://www.nature.com/documents/nr-reporting-summary-flat.pdf).

**Do this:** before submitting, tick each row against your paragraph; a missing row is the comment you would otherwise get from the reviewer.

## A filled-in example

This is the paragraph for the constructed serum-marker study used across these guides: 12 control and 6 treated mice, one value per mouse, compared with Welch's t-test ([Welch vs Student](/guides/welch-vs-student-t-test/)).

> **Statistical analysis.** The experimental unit was the mouse, and each mouse contributed one serum value. Group sizes (12 control and 6 treated mice; 18 in total) were set by the number of animals available; no a priori sample size calculation was done, and with these groups, assuming equal SDs, a standardised difference of 1.49 SD was detectable with 80% power at a two-sided α of 0.05 (with the unequal SDs observed, Welch's test would have needed a difference of about 19 pg/mL for 80% power). Mice were allocated with a computer-generated random sequence, and the person running the assay and the person analysing the data were unaware of group allocation. No animals or data points were excluded. Serum marker concentration was compared between groups with a two-sided Welch's t-test, chosen before the data were analysed because it does not assume equal variances. Residuals were inspected with normal quantile plots; no formal normality test was used to choose the method. Serum marker concentration was the single pre-specified primary outcome; all other measurements are reported as exploratory. Results are reported as the mean difference (treated − control) with its 95% confidence interval and the exact p-value; two-sided p < 0.05 was considered statistically significant. Analyses used R 4.3.3; data and code are available at [repository and identifier].

The 1.49 SD comes from the standard pooled-SD calculation used by our [sample size calculator](/tools/sample-size-calculator/); SciPy 1.18.1, statsmodels 0.15.0 and R's pwr 1.3.0 all give 1.4923 for 12 versus 6 animals. That calculation assumes equal SDs, and when the smaller group has the larger SD it can greatly overstate power. In this example the SDs were 2.7 (12 controls) and 13.0 (6 treated): at 11.3 pg/mL (1.49 × the pooled SD of 7.6), Welch's test had 41% power in our simulation, and it reached 80% only for a difference of about 19 pg/mL (20,000 simulated experiments per value, seed fixed in advance; R gave the same within simulation error). If you expect the spreads to differ, base the sensitivity statement on a simulation with the SDs you expect, or say "assuming equal SDs" as the template does.

A second filled version, for a study with a calculation (A), an exclusion (D) and a corrected family (F):

> … Group sizes (8 per group; 16 mice) were chosen to detect a difference of 4 g in grip strength (SD 2.5 g, from our pilot data) with 80% power at a two-sided α of 0.05. … One mouse was excluded because its injection failed (recorded before unblinding), under criteria set before the experiment; results with all mice are in Table S1. … p-values for the three cytokine outcomes were adjusted with Holm's method. …

**Do this:** for a new study, write your own version of this paragraph before you look at the results and keep the dated copy; it is the evidence behind "chosen before the data were analysed". For a finished study without one, use the "no written plan" wording.

## Where each detail goes

The reporting summary asks that each item be present "in the figure legend, table legend, main text, or Methods section", so the split below is a convention that keeps each place short.

| Place | What goes there | Example |
| --- | --- | --- |
| Statistical analysis (Methods) | The plan: unit, n decision, allocation, exclusions, tests, assumptions, multiplicity, software | The template above |
| Figure legend | n per group with its unit, what each point and bar shows, the test and p for that panel | "Each point is one mouse; bars show mean ± SD (n = 12 and 6). Two-sided Welch's t-test, p = 0.062." |
| Results text | Group summaries, the estimate with its 95% CI, the test statistic with df, exact p | See [how to report a t-test](/guides/how-to-report-a-t-test/) and [how to report ANOVA](/guides/how-to-report-anova-results/) |
| Supplement | Analyses with excluded animals restored, full software session, extra outcomes | `sessionInfo()` output (below) |

**Do this:** put each number once in its home place and refer to it elsewhere, so the legend, text and Methods cannot disagree.

## Phrases reviewers flag, and the fix

In a review of the 328 research articles published in June 2017 by physiology journals in the top quarter by impact factor, 53% of the papers that used t-tests (95 of 179) did not say whether any were paired or unpaired, 95% of the papers that used ANOVA (213) did not give enough information to tell which ANOVA was run, and about a quarter did not name the post hoc test ([Weissgerber et al. 2018](https://doi.org/10.7554/eLife.36163)).

| Phrase in the draft | What the reviewer cannot tell | Write instead | Details |
| --- | --- | --- | --- |
| "Data were analysed by t-tests." | Paired or unpaired; Welch or Student; one- or two-sided | "Groups were compared with a two-sided Welch's t-test." | [Paired vs unpaired](/guides/paired-vs-unpaired-t-test/) |
| "Data were analysed by ANOVA." | Which factors, how many levels, between- or within-animal | "…with a two-way ANOVA with genotype (WT, KO) and treatment (vehicle, drug) as between-animal factors and their interaction." | [Two-way ANOVA](/guides/two-way-anova-vs-multiple-t-tests/) |
| "Post hoc tests were performed." | Which test and what it adjusts for | "…followed by Games–Howell comparisons of all pairs." | [Which correction](/guides/which-multiple-comparison-correction/) |
| "n = 3." | Three animals, three wells or three repeats | "n = 3 mice per group; each value is the mean of three technical replicates." | [What counts as n](/guides/what-counts-as-n/) |
| "Normality was confirmed with the Shapiro–Wilk test." | Whether the normality test chose the method, which inflates errors | If the method was planned: "[Residuals were inspected with normal quantile plots; the test was chosen before analysis.]" If a normality test chose it: say so, name the rule, and report the pre-planned test as well. | [Normality testing](/guides/should-you-test-for-normality/) |
| "p < 0.05 was considered significant." | Sidedness | "…two-sided tests; p < 0.05 was considered significant." | [One- vs two-tailed](/guides/one-vs-two-tailed-test/) |
| "Sample size was based on previous studies." | The calculation or its absence | Template line A or B | [Justify sample size](/guides/reviewer-asks-to-justify-sample-size/) |
| No sentence on exclusions | Whether animals were dropped after seeing data | Template line C or D | [Excluding outliers](/guides/when-can-you-exclude-an-outlier/) |
| "Analysed in GraphPad Prism." | Version, so the analysis can be repeated | "…GraphPad Prism [version]." | Software section below |

**Do this:** search your draft for each phrase in the first column and replace it with the third.

## When the guidelines seem to disagree

- **Skewed data.** SAMPL asks authors to "specify that … skewed data were analyzed with non-parametric tests". Our guides analyse positive, right-skewed measurements such as concentrations on the log scale, which keeps the answer as a ratio with a confidence interval, and use rank tests for scores or extreme outliers ([ANOVA assumptions not met](/guides/anova-assumptions-not-met/); [Mann–Whitney vs t-test](/guides/mann-whitney-vs-t-test/)). Either approach meets the reporting requirement when the Methods say which one was used and that it was chosen before analysis.
- **Analyses added later.** SAMPL asks you to "identify post-hoc analyses, including unplanned subgroup analyses, as exploratory". Describe them in the Methods with that label, and report them separately from the pre-specified comparison.

**Do this:** when two sources point different ways, write the choice you made and when you made it; a reviewer can then judge the choice, not guess it.

## Get software versions and citations from your session

Name the versions that ran your analysis, from your own computer. Software citations "should facilitate identification of, and access to, the specific version of software that was used" ([Smith et al. 2016](https://doi.org/10.7717/peerj-cs.86)).

In R, `citation()` returns the citation for R and for any package ([R FAQ 2.8](https://cran.r-project.org/doc/FAQ/R-FAQ.html#Citing-R)):

```r
R.version.string                      # "R version 4.3.3 (2024-02-29)"
packageVersion("car")                 # version of each package you loaded
print(citation(), style = "text")     # how to cite R itself
print(citation("car"), style = "text")
sessionInfo()                         # everything loaded, for your records or supplement
```

In Python, read the versions of the packages your script imported, and print a ready-made sentence:

```python
import platform
from importlib.metadata import version

packages = ["numpy", "scipy", "statsmodels"]   # list what your analysis imported
print("Python", platform.python_version())
for name in packages:
    print(name, version(name))
print("Analyses used Python " + platform.python_version() + " with "
      + ", ".join(f"{name} {version(name)}" for name in packages) + ".")
```

On our system the last line printed *Analyses used Python 3.13.18 with numpy 2.5.3, scipy 1.18.1, statsmodels 0.15.0.* For SciPy, the project asks you to cite Virtanen et al. (2020) ([citing SciPy](https://scipy.org/citing-scipy/)).

**Do this:** run the code at the end of your analysis session and paste its output into the Methods and the supplement.

## Check what an AI assistant wrote

If an assistant drafted the paragraph or the analysis code, compare each sentence with the code that actually ran:

1. **The test and its variant.** SciPy's `ttest_ind` runs Student's test unless the code passes `equal_var=False`; R's `t.test` runs Welch's test by default. The Methods must name the one in the code.
2. **Sidedness.** Both default to two-sided; a paragraph that says one-sided needs an `alternative=` argument in the code and a reason written before the data.
3. **The correction.** statsmodels' `multipletests` defaults to Holm–Šidák (`method="hs"`), while R's `p.adjust` defaults to Holm. Write the method the code used: "Holm–Šidák" for the statsmodels default, "Holm" only for `method="holm"` or R.
4. **Versions and references.** Take versions from your own session (code above), and open every reference the assistant cited before keeping it.

**Do this:** read the paragraph and the script side by side, one sentence per line of code, before the draft goes to co-authors.

## References

- Lang T, Altman D (2013). Statistical Analyses and Methods in the Published Literature: the SAMPL Guidelines. EQUATOR Network. [equator-network.org](https://www.equator-network.org/reporting-guidelines/sampl/); published as Lang TA, Altman DG (2015), *International Journal of Nursing Studies* 52(1):5–9. [doi:10.1016/j.ijnurstu.2014.09.006](https://doi.org/10.1016/j.ijnurstu.2014.09.006)
- Nature Portfolio. Reporting Summary (form PDF, accessed 10 November 2026). [nature.com](https://www.nature.com/documents/nr-reporting-summary-flat.pdf)
- Percie du Sert N, Hurst V, Ahluwalia A, et al. (2020). The ARRIVE guidelines 2.0: updated guidelines for reporting animal research. *PLOS Biology* 18(7):e3000410. [doi:10.1371/journal.pbio.3000410](https://doi.org/10.1371/journal.pbio.3000410)
- R Core Team. R FAQ, section 2.8 "Citing R". [cran.r-project.org](https://cran.r-project.org/doc/FAQ/R-FAQ.html#Citing-R)
- SciPy project. Citing SciPy. [scipy.org](https://scipy.org/citing-scipy/)
- Smith AM, Katz DS, Niemeyer KE, FORCE11 Software Citation Working Group (2016). Software citation principles. *PeerJ Computer Science* 2:e86. [doi:10.7717/peerj-cs.86](https://doi.org/10.7717/peerj-cs.86)
- Weissgerber TL, Garcia-Valencia O, Garovic VD, Milic NM, Winham SJ (2018). Why we need to report more than 'Data were Analyzed by t-tests or ANOVA'. *eLife* 7:e36163. [doi:10.7554/eLife.36163](https://doi.org/10.7554/eLife.36163)

## Related

- [How to report a t-test](https://www.licklider.ai/guides/how-to-report-a-t-test/)
- [What counts as n: biological vs technical replicates](https://www.licklider.ai/guides/what-counts-as-n/)
- [How many biological replicates do I need?](https://www.licklider.ai/guides/how-many-biological-replicates/)
- [Which multiple-comparison correction to use](https://www.licklider.ai/guides/which-multiple-comparison-correction/)
- [How to disclose an AI assistant's role in a statistical analysis](https://www.licklider.ai/guides/how-to-disclose-ai-use-in-statistical-analysis/)

## How this page was made

- Written and published by Licklider. Each template line is mapped to the ARRIVE 2.0 guidelines, the SAMPL guidelines and the Nature Portfolio reporting summary; quoted wording and the review figures were checked against the source text, listed under References.
- The sensitivity figure in the worked example was computed by stored code (Python 3.13 with SciPy 1.18.1 and statsmodels 0.15.0; R 4.3.3 with pwr 1.3.0), and the two agree with the site's sample size calculator; the version-reporting code on this page was run as printed.
- Separate review passes checked the statistics, the citations and readability before publication.
