Celeus

APA style statistics reporting: every common test

The APA 7 rules for reporting statistics (italics, leading zeros, p values, degrees of freedom, intervals) and a fill-in template for each common test.

Updated . Written by Matt Gencer.

On this page

APA style asks for the same few things in every results sentence: the test, the statistic with its degrees of freedom, an exact p value, and an effect size with its confidence interval, typed in a specific way. Once you know the formatting rules, every common test reduces to a template you fill in.

First the APA 7 rules that apply to every number you report, taken from APA’s own numbers and statistics guide and its reporting standards. Then one complete worked example, a Welch’s t test on R’s birthwt data run through a deterministic engine, traced number by number from the raw output to the finished APA sentence. Then a fill-in template for each common test, from descriptive statistics to logistic regression, with a note on which effect size belongs in it. The templates use placeholders, because a template filled with invented numbers teaches the wrong habit.

The APA 7 rules that apply to every test

APA’s Publication Manual (7th edition) covers numbers and statistics in its chapter on the mechanics of style. APA publishes a two-page summary of those sections, the numbers and statistics guide, and the rules below follow it. Where a rule comes from somewhere else, the source is named, and where a point is our own reasoning from a rule, the text says so.

Numerals or words

Use numerals for every number that is a statistic or part of one (t = 2.73, a 2 x 2 design, 3 times as many), for numbers with units (a 7-mg dose), for times and ages (2 years old), for scores and points on a scale, and for any number of 10 or above. A unit abbreviation never takes a plural (3 cm, not 3 cms), and the plural of a symbol takes no apostrophe (Ms, ps). Use words for zero through nine when they are not statistics or measurements (“five groups”, “three raters”), and for any number that begins a sentence. “One hundred eighty-nine births were analyzed” follows the rule; a sentence that starts with the numeral does not. Usually the better fix is to rewrite the sentence so the number is not first.

Use commas between groups of three digits in numbers of 1,000 or more, so a mean birth weight is 3,056 g, not 3056 g. The guide lists the exceptions, and one of them matters here: degrees of freedom never take a comma. Write F(1, 1200), not F(1, 1,200).

Decimal places

The guide’s general rule is two decimals for means, standard deviations, correlations, proportions and inferential statistics (t, F, chi-square), and one decimal for means and standard deviations of data measured on an integer scale, such as questionnaire items. It adds a principle that sits above both: round as much as possible while keeping the precision a reader will need and the use they will make of it. A birth weight recorded in grams gains nothing from two decimals, so whole grams are the honest precision for the worked example below.

Report p values exactly, to two or three decimals: p = .007, not p < .05. Anything below .001 is written p < .001. A p value is never exactly zero, so p = .000, which some software prints, is wrong; the guide’s form for these is p < .001.

The leading zero

This is the rule people most often get wrong, and it has a simple test. Put a zero before the decimal point when the statistic could be greater than 1 in principle. Leave it out when the statistic can never exceed 1.

  • With a leading zero: Cohen’s d = 0.40, a standard deviation, a mean on a scale that can exceed 1, t, F, an odds ratio, a regression coefficient.
  • Without a leading zero: p = .007, a correlation, a proportion.

The guide names exactly those three, proportions, correlations and levels of statistical significance, as the statistics that take no leading zero. It does not list R² or eta squared, but both are proportions of variance and can never exceed 1, so by the same rule we write them without a leading zero too (the guide’s own italics example, R² = .12, does the same). The same reasoning applies to any statistic bounded by 1.

Italics and Greek letters

Italicize every letter used as a statistical symbol: M, SD, n, N, t, F, p, r, d, df, R², SE. Do not italicize Greek letters: η², ω², χ², β and ε stay upright. Purdue’s Online Writing Lab adds that an italic uppercase N stands for the total and a lowercase n for a part of it (in a results section, the whole sample and a subgroup), and that a subscript used only as a label, like the z in dz, stays upright.

Use the symbol only next to a mathematical operator. With an equals sign, write M = 3,056. In running text without one, write the word: “the means were”, not “the Ms were”. The guide also says not to define the standard symbols (M, SD, F, t, df, p, N, n, OR) but to define other abbreviations, which includes CI and ANOVA, on first use.

Spacing, signs, parentheses and brackets

Put a space on each side of every operator: t = 2.73, p < .001. A negative value takes a space before the minus sign and none after it.

Confidence intervals go in square brackets with the lower and upper limits separated by a comma: 95% CI [LL, UL]. That is the format Purdue’s Online Writing Lab gives for APA 7, and it is what the templates below use. The same source gives the nesting order for grouping symbols: parentheses innermost, then square brackets, then braces. To avoid nesting at all, put the test statistic after a comma in the running sentence, as the templates do.

Text or table, not both

The guide says not to repeat the same statistics in the text and in a table or figure. If you have a table of results, the text points to it and comments on the key numbers; it does not retype every cell. In tables, exact p values follow the same rules, with “<.001” for the smallest. Some tables mark significance with asterisks defined in a note instead. Our advice is to pick one method for a table and keep to it: a column of exact p values and a scatter of asterisks in the same table make the reader decode two systems.

Two more habits from Purdue’s page on statistics in APA: do not give formulas for standard statistics such as a mean or a t test, and do not cite a source for them.

Rule Correct Wrong
Leading zero, statistic can exceed 1 d = 0.40 d = .40
No leading zero, bounded by 1 p = .007 p = 0.007
Exact p value p = .007 p < .05
Very small p value p < .001 p = .000
Italics for Latin symbols t, F, p t, F, p
Greek letters upright χ², η² χ², η²
Interval in brackets 95% CI [79, 489] 95% CI (79 to 489)
No comma in degrees of freedom F(1, 1200) F(1, 1,200)
Commas in large numbers 3,056 g 3056 g

What a complete result contains

Formatting is half the job. The other half is reporting enough for a reader to understand and check the result. APA’s Journal Article Reporting Standards for quantitative research, the 2018 revision by Appelbaum and colleagues that replaced the standards printed in the 6th edition, list what a results section should contain. For each primary and secondary outcome they ask for the number of cases, the cell means and standard deviations, and, for every inferential test, the exact p value when significance testing is used, the minimally sufficient set of statistics needed to reconstruct the test (such as the degrees of freedom), and effect-size estimates with confidence intervals, when possible. They also ask you to keep primary, secondary and exploratory analyses clearly apart.

In sentence form, a complete result answers five questions:

  1. What was compared, in whom? The groups or variables and the number of cases in each.
  2. What did the data look like? The means and standard deviations, or counts and percentages.
  3. Which test, and what did it give? The statistic, its degrees of freedom, the exact p value.
  4. How big is the effect, and how precisely is it known? An effect size with its confidence interval, on the outcome’s own scale and, where useful, a standardized one.
  5. What does it mean? One plain sentence, worded as an estimate rather than a verdict.

The fourth question is the one most often skipped, and it matters most. A p value says nothing about the size of an effect. The American Statistical Association’s 2016 statement on p values makes that one of its six principles: a p value “does not measure the size of an effect or the importance of a result”. Cumming’s 2014 paper on what he calls the new statistics argues for building results on effect sizes and confidence intervals rather than on significance verdicts. Lakens’ 2013 primer is the practical guide to computing and reporting the effect sizes for t-tests and ANOVAs.

Worked example: one result, from engine output to APA sentence

The example uses the birthwt data that ships with R’s MASS package. Its documentation describes 189 births recorded at Baystate Medical Center in Springfield, Massachusetts, in 1986, with birth weight in grams and the mother’s smoking status during pregnancy among the variables. Each birth is a different mother, so mothers who smoked and mothers who did not form two independent groups.

The research question is a simple one: does mean birth weight differ between infants of mothers who did and did not smoke during pregnancy? The specification named Welch’s t test before the run. Welch’s version does not assume the two groups have equal variances, which makes it a sensible default for two independent groups; Delacre, Lakens and Leys argue for it as the default in their 2017 paper, and the guide to t-tests explains the choice. The test was seeded and run in R. The script and the full output appear below the article.

These data are observational. The comparison below describes how birth weight differed between the two groups of mothers in this sample. It is not adjusted for anything else that differs between the groups, so it is not an estimate of what smoking does to birth weight, and the APA sentence must not word it as one.

The engine output

Quantity Engine value
Births analysed 189 (115 non-smoking, 74 smoking mothers)
Mean birth weight, non-smoking mothers 3,056 g
Mean birth weight, smoking mothers 2,772 g
Difference in means, non-smoking minus smoking 283.78 g
95% confidence interval for the difference 78.57 to 488.98 g
Welch’s t 2.73 on 170.10 degrees of freedom
p value (two-sided) 0.007
Cohen’s d with its 95% interval 0.3954 (0.10 to 0.69)

From each number to its APA form

Each number in the table needs one decision before it goes into the sentence. Take them in order.

  • The group means: the engine records them to six decimals. In grams, whole numbers carry all the useful precision, so they become M = 3,056 g and M = 2,772 g, with a comma because each is over 1,000.
  • The difference and its interval: 283.78 g with a 95% interval of 78.57 to 488.98 g. Rounded to whole grams to match the means, that is 284 g, 95% CI [79, 489]: brackets, a comma between the limits, no “to”.
  • The statistic and its degrees of freedom: Welch’s degrees of freedom are 170.10, not a whole number, because the test adjusts them for the two groups’ separate variances. Keep the decimals; they tell a reader which test you ran. The result is t(170.10) = 2.73, with t italic and two decimals.
  • The p value: the engine prints 0.007. A p value cannot exceed 1, so the leading zero goes: p = .007, exact, three decimals.
  • The effect size: Cohen’s d = 0.3954 becomes d = 0.40, with a leading zero this time, because d can exceed 1. Its interval becomes 95% CI [0.10, 0.69].

The finished sentence

Infants of mothers who did not smoke during pregnancy had a higher mean birth weight (M = 3,056 g, n = 115) than infants of mothers who smoked (M = 2,772 g, n = 74). The mean difference was 284 g, 95% CI [79, 489]. A Welch’s t test indicated that the difference was statistically significant, t(170.10) = 2.73, p = .007, d = 0.40, 95% CI [0.10, 0.69].

Read the estimate and its interval before the p value. The difference is estimated at 284 g, but the interval runs from 79 g to 489 g, so the data are compatible with a modest difference and with one about six times as large. In standardized terms, d = 0.40 is a little under half a standard deviation, with an interval from 0.10 to 0.69. That width is part of the result, and the sentence reports it rather than hiding it behind the significance verdict.

What the sentence still needs

The reporting standards ask for each group’s standard deviation next to its mean, and this engine run does not print the group standard deviations. They belong in the sentence (M = 3,056 g, SD = value) or, better, in a descriptive table the sentence refers to. They take one line of R, shown in the rerun section at the end, and they are left out here only because every number on this page comes from the recorded run.

Three more things belong in the methods or in a short clause, and the engine’s output covers each.

What the effect size is standardized by. Cohen’s d here divides the mean difference by the pooled standard deviation of the two groups. With unequal group sizes, that pooled value weights each group by its degrees of freedom (its size minus one), and it estimates one common standard deviation only if the two variances are equal. Its interval is computed the standard way for d, which also assumes equal variances. So say which version of d you report, and treat its interval as approximate. The Welch test itself makes no equal-variance assumption, and its interval for the raw difference, 79 to 489 g, does not depend on one.

The assumption checks. The engine’s Shapiro-Wilk test did not detect a departure from normality in either group (non-smoking: W = .99, p = .334; smoking: W = .98, p = .419), and Levene’s test did not detect unequal variances, F = 1.46, p = .229. The guide does not mention W, but it cannot exceed 1, so by the same bounded-by-1 reasoning it is written without a leading zero. Not detecting a departure is not evidence of normality or of equal variances, because these tests have limited power; it only means the checks found nothing to act on. The engine also flagged one birth weight beyond the conventional fence of 1.5 times the interquartile range. It removed nothing, and one extreme value among 189 is a note for the methods section, not a reason to drop data.

What the design could detect. The engine reports a sensitivity figure for this design: with 115 and 74 births, a two-sided test at the .05 level had 80% power only for effects of d = 0.42 or larger. That is a property of the design, worked out from the group sizes alone. It is not “observed power” computed from the result, which adds nothing to the p value.

So a complete write-up is the sentence above, the standard deviations, and a methods line naming Welch’s test and the assumption checks. The templates below apply the same structure to other tests.

Templates for every common test

Each template below uses placeholders in square brackets. Replace each one with your own value, formatted by the rules above. The statistic forms follow conventions in wide use in APA-style journals; where your target journal’s author guidelines differ, follow the journal. Every template carries an effect size, because a p value without one is half a result. The engine’s reference page for each method is linked under its template.

Descriptive statistics

Participants (N = [total]) were [mean age] years old on average (SD = [SD]); [count] ([percentage]%) were [category].

Means and standard deviations go together, always with the number of cases. For a skewed variable, report the median and interquartile range instead, and say so. Percentages need their denominator, and when values are missing the denominator is the number with data, which you should state. A long list of descriptive statistics belongs in a table, not a sentence; see the section on Table 1 below.

One-sample t test

Mean [outcome] (M = [M], SD = [SD]) was [higher/lower] than the reference value of [value], t([df]) = [t], p = [p], d = [d], 95% CI [LL, UL].

Name where the reference value came from. The degrees of freedom are the sample size minus one. Give the mean difference from the reference value with its interval as well as d. If the population standard deviation is known rather than estimated, the test is a z test, written z = [z], p = [p], with no degrees of freedom.

Independent-samples t test (Welch or Student)

Mean [outcome] was [higher/lower] in [group A] (M = [M], SD = [SD], n = [n]) than in [group B] (M = [M], SD = [SD], n = [n]), a difference of [difference], 95% CI [LL, UL]. A Welch’s t test indicated that the difference was [statistically significant / not statistically significant], t([df]) = [t], p = [p], d = [d], 95% CI [LL, UL].

This is the template the worked example filled; reporting a t-test covers every version. Welch’s degrees of freedom keep their decimals. If you use Student’s test, its degrees of freedom are the total sample size minus two, a whole number, and you should be able to say why equal variances follow from the design. Methods: Welch’s t-test, Student’s t-test.

Paired t test

[Outcome] was [higher/lower] at [time 2] (M = [M], SD = [SD]) than at [time 1] (M = [M], SD = [SD]); the mean within-pair difference was [difference], 95% CI [LL, UL], t([df]) = [t], p = [p], dz = [d].

The degrees of freedom are the number of pairs minus one. Say which standardized effect you used: dz divides by the standard deviation of the differences, while other versions divide by the standard deviation of the raw scores, which gives a different number for the same data. Lakens’ primer sets out the options. Method: paired t-test.

One-way ANOVA, Welch’s ANOVA and post hoc comparisons

Mean [outcome] differed across the [k] groups, F([df1], [df2]) = [F], p = [p], η² = [value], 95% CI [LL, UL]. Post hoc comparisons using [procedure] showed that [group A] (M = [M], SD = [SD]) scored higher than [group B] (M = [M], SD = [SD]), mean difference = [difference], 95% CI [LL, UL], adjusted p = [p].

F takes two degrees of freedom, the between-groups value first. Welch’s ANOVA, the version that does not assume equal variances, has a fractional second value, which you keep. Eta squared cannot exceed 1, so by the bounded-by-1 reasoning above it is written without a leading zero, and its η is upright; say whether you report eta squared or the less biased omega squared. Name the post hoc procedure and its adjustment, and report the adjusted p values. The guide to one-way ANOVA, Welch and Kruskal-Wallis explains the choice between them, and the multiple comparisons guide explains the adjustments. Methods: one-way ANOVA, Welch’s ANOVA.

Two-way ANOVA

There was [a statistically significant / no statistically significant] interaction between [factor A] and [factor B], F([df1], [df2]) = [F], p = [p], η²p = [value]. [Then each main effect, or the simple effects, in the same form.]

Report the interaction first, because it changes how the main effects should be read. If the interaction is meaningful, a main effect averaged over the other factor may describe no condition in particular, and simple effects are the clearer report. Partial eta squared (η²p) is the usual effect size here; label it as partial. State which type of sums of squares you used when the design is unbalanced. The two-way ANOVA guide covers both points. Method: two-way ANOVA.

Repeated-measures ANOVA

Mean [outcome] changed across the [k] time points, F([df1], [df2]) = [F], p = [p], η²p = [value]. Degrees of freedom were corrected for departures from sphericity using the Greenhouse-Geisser estimate (ε = [value]).

When a sphericity correction is applied, the corrected degrees of freedom are fractional and you report them as they are, together with the epsilon used. Many analysts apply the correction by default rather than gating it on Mauchly’s test, for the same reason Welch is the default for two groups. With missing time points or unequal spacing, a mixed model is usually the better tool, and the guide to repeated-measures ANOVA and mixed models compares them. Method: repeated-measures ANOVA.

Chi-square test of independence

[Outcome] was [more/less] common in [group A] ([count] of [n], [percentage]%) than in [group B] ([count] of [n], [percentage]%), χ²([df], N = [N]) = [value], p = [p], Cramér’s V = [value].

Give the counts and their denominators, not percentages alone. The degrees of freedom are (rows minus one) times (columns minus one), and the total sample size commonly sits inside the parentheses after them. χ² is Greek, so it stays upright. For a 2 x 2 table, an odds ratio or a risk difference with its interval tells a reader more than V. Method: chi-square test; worked write-up: reporting a chi-square test.

Fisher’s exact test

[Outcome] occurred in [count] of [n] in [group A] and [count] of [n] in [group B], Fisher’s exact test p = [p], odds ratio = [OR], 95% CI [LL, UL].

Fisher’s test has no test statistic or degrees of freedom to report, so the counts and the p value carry the test, and the odds ratio with its interval carries the size. It is the usual choice when expected cell counts are small. The chi-square or Fisher’s exact guide explains when each fits. Method: Fisher’s exact test.

Correlation (Pearson or Spearman)

[Variable 1] and [variable 2] were [positively/negatively] correlated, r([df]) = [r], 95% CI [LL, UL], p = [p].

The degrees of freedom for a Pearson correlation are the number of pairs minus two. A correlation cannot exceed 1, so it takes no leading zero. For Spearman’s rank correlation, write rs and say that it describes a monotonic relationship between ranks rather than a straight line. With a matrix of many correlations, say how you handled multiplicity. Methods: Pearson correlation, Spearman correlation.

Linear regression

The model explained [R² as a proportion] of the variance in [outcome], R² = [value], F([df1], [df2]) = [F], p = [p]. Each [unit] increase in [predictor] was associated with a [higher/lower] [outcome], b = [b], 95% CI [LL, UL], t([df]) = [t], p = [p], holding the other predictors constant.

The unstandardized coefficient b is on the outcome’s own scale and is usually the number a reader needs; report it with its interval. If you also give standardized coefficients, β is Greek and upright. R² cannot exceed 1, so by the same reasoning it is written without a leading zero, as in the guide’s own example. Once there are more than two predictors, a table is clearer than prose, with a row per predictor and columns for b, its 95% CI and p. Method: linear regression.

Logistic regression

The odds of [outcome] were [higher/lower] for [group, or per unit of predictor], odds ratio = [OR], 95% CI [LL, UL], p = [p], adjusted for [covariates].

Report odds ratios with their intervals rather than raw coefficients on the log-odds scale, and name every covariate in the model. An odds ratio is not a risk ratio: when the outcome is common the two differ a great deal, and wording an odds ratio as “times as likely” overstates it. A Cox survival model is reported the same way, with hazard ratio = [HR], 95% CI [LL, UL], and its covariates named. The logistic regression guide explains how to read the output. Method: logistic regression.

Rank-based tests: Mann-Whitney, Wilcoxon signed-rank, Kruskal-Wallis

[Outcome] was [higher/lower] in [group A] (Mdn = [median], IQR = [IQR]) than in [group B] (Mdn = [median], IQR = [IQR]), Mann-Whitney U = [U], p = [p], rank-biserial r = [value], 95% CI [LL, UL].

Describe rank-based results with medians and interquartile ranges, not means. Software reports different statistics for these tests (U, W, V, H), so name the one your software computed. For the Wilcoxon signed-rank test, describe the median of the paired differences; for Kruskal-Wallis, report H with its degrees of freedom, the number of groups minus one, and follow it with adjusted pairwise comparisons. None of these tests compares means, so do not word the result as if it did. The t-test or Mann-Whitney guide explains the difference in the question each asks. Methods: Mann-Whitney, Wilcoxon signed-rank, Kruskal-Wallis.

Tables, and Table 1 in particular

The reporting standards ask for descriptive statistics on every outcome and for each subgroup, which quickly becomes too much for prose. A table is the answer, and the most common one is Table 1, the description of the sample.

A good Table 1 has a column for each group and usually one for the whole sample, with the number of participants at the head of each column. Each continuous characteristic gets a mean and standard deviation, or a median and interquartile range when it is skewed, and the table says which. Each categorical characteristic gets counts and percentages, with missing values shown rather than silently dropped. A note under the table defines any abbreviation other than the standard statistical symbols.

Whether to add p values comparing the groups depends on the design. In a randomized trial, leave them out. The CONSORT 2010 explanation and elaboration paper, under its item on the baseline table, puts it directly: such tests assess whether baseline differences could have occurred by chance, “however, we already know that any differences are caused by chance”, so the tests are “superfluous and can mislead investigators and their readers”. It asks instead for judging baseline imbalance by the size of the differences and how strongly each variable predicts the outcome. In an observational study, our view is that a comparison column can help describe how the groups differ, as long as it is labelled descriptive and is not used to choose covariates. The engine’s descriptive table method, Table 1, labels such comparisons as exploratory and adjusts them for multiplicity.

Common mistakes

Reporting p alone. “The difference was significant (p = .007)” gives the reader no idea how large the difference was or how precisely it was estimated. Add the estimate and its interval every time.

Writing p = .000 or p < .05. The first is impossible and the second throws information away. Report the exact value, or p < .001.

Italicizing Greek letters, or not italicizing Latin ones. χ² and η² are upright; t, F and p are italic.

Calling a non-significant result “no effect”, or saying the null was accepted. A p value above .05 means the data are compatible with no difference, not that the difference is zero. If the interval also includes differences that would matter, say the result is inconclusive.

Reading the p value as the probability that the null hypothesis is true. The American Statistical Association’s statement says plainly that it is not.

Causal wording for an observational comparison. In the worked example, “infants of mothers who smoked had a lower mean birth weight” is supported; “smoking reduced birth weight by 284 g” is not, because nothing else was accounted for.

Running many tests and reporting only the significant ones. The reporting standards ask for every test conducted, with primary, secondary and exploratory analyses kept apart. Report the multiplicity adjustment you used.

A checklist before you submit

  • Every test is named, including the version (Welch’s, paired, Spearman).
  • Every inferential statistic has its degrees of freedom, with Welch and sphericity-corrected values left fractional.
  • Every p value is exact, to two or three decimals, or p < .001.
  • Every effect has an estimate with a 95% CI in brackets, on the raw scale and, where useful, standardized.
  • Each group has its n, and a mean with a standard deviation or a median with an interquartile range.
  • Latin statistical symbols are italic; Greek ones are upright.
  • Leading zeros appear only on statistics that can exceed 1.
  • Abbreviations other than the standard symbols, including CI and ANOVA, are defined on first use.
  • No number appears in both a table and the text.
  • The methods name the software and its version, and the seed for anything random.
  • Non-significant results are worded as estimates, and observational comparisons are not worded as causes.

Rerunning the example

Below the article you will find the R script exactly as the engine generated it, with the seed, and the output it printed. The script reads its data from a data/ folder and runs base R’s t.test() with var.equal = FALSE, which is Welch’s test, followed by the pwr package’s sensitivity calculation. On the same package versions it reproduces the Welch test and the sensitivity figure. The effect size and the assumption checks come from the engine itself: effectsize::cohens_d(bwt ~ smoke, data = data), car::leveneTest(bwt ~ factor(smoke), data = data) and shapiro.test() within each group reproduce them.

To add the group standard deviations the APA sentence needs, run aggregate(bwt ~ smoke, data = MASS::birthwt, FUN = sd) alongside the script. If your own analysis has more than one outcome or a second factor, the guide to choosing a statistical test is the place to start before you reach for a template, and the guide to reproducible statistical analysis explains what a reviewer needs in order to rerun a result like this one.

Worked example

Data: Hosmer DW, Lemeshow S (1989). Applied Logistic Regression. New York: Wiley. Data as distributed in Venables WN, Ripley BD (2002). Modern Applied Statistics with S, 4th ed. New York: Springer (R package MASS). https://doi.org/10.1007/978-0-387-21706-2. Seed: 20261021.

Run on Celeus engine 0.30.0, seed 20261021, public data.

Output

# Results

- Test: Welch's t-test
- n: 189
- statistic: 2.73
- p-value: 0.007
- effect size: Cohen's d = 0.3954 (95% CI 0.1 to 0.6897)
- 95% CI: [78.57, 489]
- seed: 20261021

## Assumption checks
- normality by group (Shapiro-Wilk): passed=TRUE
- variance homogeneity (Levene): passed=TRUE (no evidence of unequal variances)
- sample size: passed=TRUE (adequate n)

## Power (sensitivity, not observed power)
- minimum detectable effect at n=189: Cohen's d = 0.4197
- to detect a conventional medium effect: 64 per group to detect d=0.50
- alpha = 0.05, target power = 0.8
R script
# Celeus - reproduce.R  (run from this package folder; bundled data in data/)
# Test: Welch's t-test  |  engine 0.30.0  |  catalog c39-d3cd
# Research context: not provided for this run.
# Reproduces the recorded result deterministically.

set.seed(20261021)
.data_path <- "data/reporting-statistics-apa-style.csv"
if (!file.exists(.data_path)) stop("Run reproduce.R from the package folder (the bundled data is in data/).")
data <- readr::read_csv(.data_path, show_col_types = FALSE)  # needs the readr package
clean_cells <- function (df) 
{
    ctrl_collapse <- "[\r\n\t\v\f]+"
    zero_width_chars <- intToUtf8(c(8203L, 65279L), multiple = TRUE)
    uni_space_chars <- intToUtf8(c(160L, 8239L, 8199L), multiple = TRUE)
    clean_text <- function(x) {
        out <- x
        for (ch in zero_width_chars) out <- gsub(ch, "", out, 
            fixed = TRUE)
        out <- gsub(ctrl_collapse, " ", out)
        for (ch in uni_space_chars) out <- gsub(ch, " ", out, 
            fixed = TRUE)
        trimws(gsub(" +", " ", out))
    }
    changed_cols <- character(0)
    cells_cleaned <- 0L
    retyped <- character(0)
    for (j in seq_along(df)) {
        col <- df[[j]]
        if (!is.character(col)) 
            next
        cleaned <- clean_text(col)
        n_changed <- sum(!is.na(col) & !is.na(cleaned) & col != 
            cleaned, na.rm = TRUE)
        if (n_changed > 0L) {
            changed_cols <- c(changed_cols, names(df)[j])
            cells_cleaned <- cells_cleaned + n_changed
        }
        df[[j]] <- cleaned
        non_blank <- cleaned[!is.na(cleaned) & nzchar(cleaned)]
        if (length(non_blank) && all(grepl("^[+-]?(0|[1-9][0-9]*)([.][0-9]+)?$", 
            non_blank))) {
            parsed <- suppressWarnings(as.numeric(cleaned))
            was_blank <- is.na(cleaned) | !nzchar(cleaned)
            lost <- (is.na(parsed) | is.infinite(parsed)) & !was_blank
            if (!any(lost)) {
                finite <- parsed[!is.na(parsed)]
                all_whole <- all(finite == floor(finite))
                in_range <- all(abs(finite) <= .Machine$integer.max)
                df[[j]] <- if (all_whole && in_range) 
                  as.integer(parsed)
                else parsed
                retyped <- c(retyped, names(df)[j])
            }
        }
    }
    names(df) <- clean_text(names(df))
    if (length(changed_cols)) {
        attr(df, "ingest_clean_columns") <- changed_cols
        attr(df, "ingest_clean_cells_cleaned") <- cells_cleaned
    }
    if (length(retyped)) 
        attr(df, "ingest_clean_retyped") <- retyped
    df
}
data <- clean_cells(data)
# Complete-case analysis: drop rows missing any analysis value.
.acols <- c("bwt", "smoke")
data <- data[stats::complete.cases(data[, .acols, drop = FALSE]), , drop = FALSE]
result <- t.test(`bwt` ~ `smoke`, data = data, var.equal = FALSE)
print(result)

# Sensitivity: minimum detectable effect at n=189 (power=0.8, alpha=0.05). NOT observed power.
power <- pwr::pwr.t2n.test(n1 = 115, n2 = 74, sig.level = 0.05, power = 0.8)
print(power)

Common questions

How do I report a t-test in APA style?

Name the test, give each group's mean and standard deviation, then the statistic with its degrees of freedom, the exact p value and an effect size with its interval, in the form t(df) = value, p = value, d = value, 95% CI [LL, UL]. Italicize t, p and d, and keep the decimals Welch's test gives for its degrees of freedom.

How do I report a chi-square test in APA style?

Give the counts and percentages in each group, then the statistic as chi-square with its degrees of freedom and the sample size in parentheses, the value, the exact p value and an effect size such as Cramer's V or an odds ratio with its interval. The chi symbol is Greek, so it is not italicized.

What should a Table 1 include?

A Table 1 describes the sample: the number of participants in each group and overall, a mean and standard deviation (or a median and interquartile range for skewed variables) for each continuous characteristic, and counts with percentages for each category, including missing values. In a randomized trial, the CONSORT reporting guidance advises against significance tests of baseline differences between the arms, so leave those p values out.

Do I put a zero before the decimal point in APA style?

Only when the statistic can be greater than 1. Write d = 0.40, because a standardized difference can exceed 1, but p = .007, because a p value, a correlation and a proportion can never be greater than 1. This is the leading-zero rule in APA's numbers and statistics guide.

How do I report p values in APA 7?

Report the exact value to two or three decimals with no leading zero, such as p = .007, and write p < .001 for anything smaller than .001. Do not write p = .000 or n.s., and italicize the p. Give an effect size and its interval alongside the p value, not instead of it.

How do I report a confidence interval in APA style?

Give the confidence level, then the lower and upper limits in square brackets separated by a comma, as in 95% CI [79, 489]. Round the limits to the same decimals as the estimate they belong to, put the interval right after that estimate, and define CI on first use.

Sources

  1. American Psychological Association (2020). Publication manual of the American Psychological Association (7th ed.). Washington, DC: APA. doi:10.1037/0000165-000
  2. American Psychological Association (2024). APA Style numbers and statistics guide (7th ed. handout, last updated September 11, 2024). apastyle.apa.org
  3. Appelbaum M, Cooper H, Kline RB, Mayo-Wilson E, Nezu AM, Rao SM (2018). Journal article reporting standards for quantitative research in psychology: The APA Publications and Communications Board task force report. American Psychologist 73(1):3-25. doi:10.1037/amp0000191
  4. Purdue Online Writing Lab. Numbers and statistics (APA 7th edition). owl.purdue.edu
  5. Purdue Online Writing Lab. Statistics in APA. owl.purdue.edu
  6. Wasserstein RL, Lazar NA (2016). The ASA statement on p-values: context, process, and purpose. The American Statistician 70(2):129-133. doi:10.1080/00031305.2016.1154108
  7. Cumming G (2014). The new statistics: why and how. Psychological Science 25(1):7-29. doi:10.1177/0956797613504966
  8. 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
  9. Delacre M, Lakens D, Leys C (2017). Why psychologists should by default use Welch's t-test instead of Student's t-test. International Review of Social Psychology 30(1):92-101. doi:10.5334/irsp.82
  10. Moher D, Hopewell S, Schulz KF, Montori V, Gotzsche PC, Devereaux PJ, Elbourne D, Egger M, Altman DG (2010). CONSORT 2010 explanation and elaboration: updated guidelines for reporting parallel group randomised trials. BMJ 340:c869. doi:10.1136/bmj.c869

Methods discussed

Try it on your own data

Upload a dataset and Celeus suggests a method, checks its assumptions, runs it in R, and gives you the script to rerun it.

Try it in Celeus