Skip to main content
v2026.11,610 entries · CC-BY 4.0

Normality of Distribution: How to Check the Normal Distribution Assumption in Research Data

What the normal distribution is, why the Central Limit Theorem makes most explanations of it misleading, and how to actually assess normality using Q-Q plots, Shapiro-Wilk, and skewness/kurtosis before choosing a parametric or non-parametric analysis.

Ask about Normality of Distribution: How to Check the Normal Distribution Assumption in Research Data

Answers are drawn from this guide and the rest of the CASRAI corpus, with a link to every source.

Answers are AI-generated from CASRAI’s own published pages and can be wrong, so check the linked sources before relying on one; your question is logged without personal data — never sold, never used to train a third-party model — to show us what CASRAI is missing, so please do not type personal or confidential details. How we use this

Written and maintained by CASRAI Editorial Board

Last updated

A normal distribution is the symmetric, bell-shaped probability distribution in which values cluster around the mean and taper off equally in both directions. It shows up so often in statistical practice — and so often in the wrong place in a methods section — that “checking for normality” has become one of the most common, and most commonly misunderstood, steps in analyzing research data. This guide covers what the normal distribution actually is, what assumption a normality check is really testing (it is usually not what researchers think), how to assess it properly, and what to do when the assumption does not hold.

What the normal distribution is

The normal (Gaussian) distribution is defined by two parameters: its mean (μ), which sets its center, and its standard deviation (σ), which sets its spread. A variable that is normally distributed has three defining properties:

  • Symmetry — the left and right halves of the distribution are mirror images around the mean.
  • Mean = median = mode — all three measures of central tendency coincide at the same value, the peak of the curve.
  • A fixed spread rule — the 68-95-99.7 (empirical) rule — approximately 68% of values fall within 1 standard deviation of the mean, approximately 95% fall within 2 standard deviations, and approximately 99.7% fall within 3 standard deviations. This rule is what makes the normal distribution useful for setting reference ranges and estimating how unusual an observation is.

See descriptive statistics for how central tendency and dispersion are calculated and reported more generally, and histograms for the standard way to visualize a distribution’s shape before doing anything else with it.

Why the normal distribution recurs: the Central Limit Theorem

The normal distribution is not just one distribution among many — it recurs constantly in statistical practice because of the Central Limit Theorem (CLT). Stated precisely, the CLT says that the sampling distribution of the sample mean approaches a normal distribution as sample size increases, regardless of the shape of the distribution the data were drawn from, provided the underlying distribution has finite variance.

Two things follow from that precise statement that are frequently misstated:

  • The CLT is a claim about the sampling distribution of a statistic (typically the mean), not about the distribution of the raw, individual data points. Raw data can be heavily skewed and the CLT still applies to the mean of repeated samples drawn from it.
  • The CLT does not say raw data “become normal” with a large enough sample. A skewed variable with 10,000 observations is still skewed; what changes with sample size is how closely the distribution of possible sample means behaves like a normal curve.

This distinction is the single most important thing to get right about normality in applied research, and it is exactly where most explainers of the topic go wrong.

What parametric tests actually assume — and why this matters more than most explainers say

Many parametric procedures (the t-test, ANOVA, linear regression, the Pearson correlation coefficient) are commonly described as “assuming normality.” In practice this is imprecise in a way that leads researchers to test the wrong thing:

  • For a one-sample or paired t-test, the relevant assumption is that the sampling distribution of the mean (or mean difference) is approximately normal — not that the raw data are normally distributed.
  • For linear regression and ANOVA, the assumption is normality of the residuals (the differences between observed and predicted values), not normality of the outcome variable itself, and certainly not normality of the predictor variables.
  • With reasonably large sample sizes, the Central Limit Theorem makes the sampling distribution of the mean approximately normal even when the underlying data are not — which is why parametric tests are described as reasonably robust to violations of normality once n is large. Robustness is a matter of degree, not a fixed cutoff, and it degrades faster with strong skew, heavy outliers, or a genuinely small sample.

The practical consequence: a researcher who runs a normality test on a raw outcome variable before an ANOVA, sees a significant result, and abandons the analysis for a non-parametric alternative may be testing — and reacting to — the wrong distribution altogether. Check what the specific test actually assumes before deciding what to test for normality.

How to assess normality

Assessing normality is best done in two stages: look first, test second — and treat the formal test as one input among several, not the deciding vote.

Visual assessment

  • Histogram — the fastest first look at shape, but sensitive to bin width and less reliable at small sample sizes. See the dedicated histogram guide for construction guidance.
  • Q-Q (quantile-quantile) plot — plots the quantiles of the observed data against the quantiles expected under a normal distribution. Points falling close to the reference diagonal line indicate approximate normality; systematic curvature indicates skew, and S-shaped or heavy-tailed deviation from the line at the ends indicates kurtosis problems. The Q-Q plot is generally the single best tool for assessing normality visually: it is far less sensitive to sample size and bin-width choices than a histogram, and it shows exactly where and how a distribution departs from normal (in the tails, in the center, or throughout) rather than just giving a pass/fail impression.
  • Box plot — less informative about overall shape than a histogram or Q-Q plot, but useful for a quick read on skew (an off-center median line, unequal whisker lengths) and for flagging outliers that a formal test may over-react to.

Formal tests

  • Shapiro-Wilk test — the most commonly recommended formal test for normality, and generally considered to have good power relative to alternatives, particularly at small-to-moderate sample sizes. Most statistical software reports it as a default option.
  • Kolmogorov-Smirnov (K-S) test / Lilliefors correction — compares the empirical cumulative distribution function to a reference normal distribution; the plain K-S test requires the reference mean and standard deviation to be specified in advance, so when they are instead estimated from the sample (the usual case), the Lilliefors-corrected version is the appropriate variant — a distinction with a large measured cost, set out with simulation results in the guide to the one-sample and two-sample K-S tests.
  • Anderson-Darling test — a modification of the K-S approach that gives more weight to the tails of the distribution, which is useful because departures from normality often matter most in the tails.

All three return a p-value testing the null hypothesis that the data come from a normal distribution; see what a p-value is and is not before interpreting the result as a simple pass/fail.

What the Shapiro-Wilk test actually computes

Shapiro-Wilk is the default normality test in almost every statistics package, so it is worth knowing what the number it hands back actually is. Shapiro and Wilk (1965), Biometrika 52(3–4):591–611, defined the statistic W as the square of a weighted linear combination of the ordered sample values, divided by the usual corrected sum of squares — an analysis-of-variance comparison between two estimates of the same scale parameter. The weights are derived from the expected values and covariance matrix of the order statistics of a standard normal sample, which means the numerator is essentially the best linear estimate of σ you could read off a normal Q-Q plot. If the data really are normal, the two estimates agree and W sits near its maximum of 1; the further the sample departs from a straight Q-Q line, the smaller W gets.

Shapiro-Wilk and the Q-Q plot are therefore not independent checks. They are two readings of the same underlying quantity — one as a picture, one compressed into a single number and then converted to a p-value. That is why “the Q-Q plot looks fine but Shapiro-Wilk is significant” is not a contradiction to be resolved; it is the p-value reporting sample size, which the plot does not.

Three implementation facts matter in practice, and R’s own documentation for shapiro.test() states all three:

  • There is a hard sample-size range: 3 to 5,000 non-missing values. Past that, R refuses rather than returning something misleading — shapiro.test(rnorm(5001)) stops with Error in shapiro.test(rnorm(5001)) : sample size must be between 3 and 5000. The upper bound exists because at that size the test is answering a question nobody usefully asked (see below).
  • The p-value is an approximation, not an exact tail area. It is exact only for n = 3, with separate approximations for 4 ≤ n ≤ 11 and for n ≥ 12, taken from Royston’s Remark AS R94 (Applied Statistics 44(4):547, doi:10.2307/2986146).
  • That approximation is documented as adequate only for p < 0.1. R’s help page says the p-value “is said in Royston (1995) to be adequate for p.value < 0.1“. So the difference between a reported p of 0.62 and one of 0.48 carries no meaning, and neither figure is a measure of how normal the data are.

That last point deserves to be sat with, because it is where most misuse starts. The p-value is not a normality score. A large p means only that the test cannot rule normality out — which happens both when the data are genuinely close to normal and when the sample is too small to tell. Those two situations are indistinguishable from the p-value alone, and distinguishing them is precisely what a researcher needs.

Why formal normality tests are widely criticized

Despite their common use, formal normality tests have a well-recognized problem that cuts in both directions at once:

  • At small sample sizes, these tests are underpowered — they frequently fail to detect real, meaningful departures from normality precisely when the normality assumption matters most for the validity of a downstream parametric test (small samples get the least protection from the Central Limit Theorem’s large-n robustness).
  • At large sample sizes, these tests become highly sensitive and will flag trivial, practically irrelevant deviations from perfect normality as statistically significant — precisely when the assumption matters least, because large-n robustness is already doing the protective work described above.

The practical, well-supported recommendation that follows from this is not to abandon formal tests outright, but not to let one govern the decision either: use a Q-Q plot and histogram as the primary evidence, treat a formal test (typically Shapiro-Wilk) as a supporting data point rather than a binary gatekeeper, and weigh the result against sample size, the magnitude of skew/kurtosis, and how sensitive the specific downstream analysis actually is to non-normality. A large-sample “significant” Shapiro-Wilk result next to a Q-Q plot that looks essentially straight is not, on its own, a reason to switch to a non-parametric test.

The sample-size trap, demonstrated

The two bullets above are the standard criticism, and it is almost always asserted rather than shown. Below it is shown. Every number on this page was computed in R 4.6.1 with set.seed(2026) before it was written down; nothing here is illustrative or estimated, and pasting the code into a console reproduces it exactly.

The non-normal data are drawn from a lognormal distribution with a small log-scale parameter — a mild right skew of the kind that turns up constantly in real measurement data (concentrations, durations, reaction times, costs). The realised sample skewness at n = 1,000 was 0.851. This is not a pathological distribution. It is the sort of departure most researchers would see on a histogram and describe as “a bit skewed”.

The same distribution, three sample sizes

set.seed(2026)

x15   <- rlnorm(15,   meanlog = 0, sdlog = 0.25)
x100  <- rlnorm(100,  meanlog = 0, sdlog = 0.25)
x1000 <- rlnorm(1000, meanlog = 0, sdlog = 0.25)

shapiro.test(x15)
shapiro.test(x100)
shapiro.test(x1000)
	Shapiro-Wilk normality test

data:  x15
W = 0.93139, p-value = 0.2862


	Shapiro-Wilk normality test

data:  x100
W = 0.9508, p-value = 0.0009366


	Shapiro-Wilk normality test

data:  x1000
W = 0.96264, p-value = 2.55e-15

Read those three results as a single finding. The data-generating process is identical in all three lines. The departure from normality is exactly as real, and exactly as large, at n = 15 as it is at n = 1,000. What changes is the verdict: comfortably non-significant, then significant, then significant by fifteen orders of magnitude. If a researcher uses p < 0.05 as a gate, the same population passes at n = 15 and is emphatically rejected at n = 1,000.

Note also that W barely moves — 0.931, 0.951, 0.963. W is a reasonable descriptive measure of departure and it says the three samples are comparably non-normal. It is the conversion of W to a p-value that injects sample size and produces the reversal.

The test is not simply “always significant at large n”

A common overcorrection is to conclude that Shapiro-Wilk rejects everything once n is large, and therefore means nothing. It does not. Drawing 1,000 observations from a genuinely normal distribution, in the same seeded session:

z1000 <- rnorm(1000, mean = 100, sd = 15)
shapiro.test(z1000)
	Shapiro-Wilk normality test

data:  z1000
W = 0.99831, p-value = 0.4344

The test passes cleanly. Shapiro-Wilk is behaving correctly in every one of these four cases: it is a well-calibrated test of the hypothesis it is actually testing, which is “is the departure from normality exactly zero?”. The trap is not that the test is broken. The trap is that “is the departure exactly zero?” is not the question a researcher choosing an analysis needs answered. The question they need answered is “is the departure large enough to matter for what I am about to do?” — and no p-value answers that, because a p-value combines effect size with sample size and returns one number that cannot be decomposed back into the two.

Rejection rates over 10,000 replicates, against what the t-test actually does

A single draw could be luck. The following runs 10,000 replicates at each sample size. For each replicate it draws a mildly skewed sample and a genuinely normal sample of the same size and standard deviation, runs Shapiro-Wilk on both, and runs a two-sided one-sample t-test on both against the true population mean — so every t-test rejection is a false positive by construction, and the rejection rate is the realised Type I error rate.

set.seed(2026)
R  <- 10000
mu <- exp(0.25^2 / 2)                 # true mean of lognormal(0, 0.25)

for (n in c(15, 30, 100, 1000)) {
  sw_skew <- sw_norm <- t_skew <- t_norm <- numeric(R)
  for (r in 1:R) {
    a <- rlnorm(n, 0, 0.25)           # mildly skewed
    b <- rnorm(n, mu, sd(a))          # genuinely normal
    sw_skew[r] <- shapiro.test(a)$p.value < 0.05
    sw_norm[r] <- shapiro.test(b)$p.value < 0.05
    t_skew[r]  <- t.test(a, mu = mu)$p.value < 0.05
    t_norm[r]  <- t.test(b, mu = mu)$p.value < 0.05
  }
  cat(n, mean(sw_skew), mean(sw_norm), mean(t_skew), mean(t_norm), fill = TRUE)
}
n Shapiro-Wilk rejects
(mildly skewed data)
Shapiro-Wilk rejects
(truly normal data)
t-test Type I error
(mildly skewed data)
t-test Type I error
(truly normal data)
15 13.6% 5.1% 5.9% 5.1%
30 27.2% 5.3% 5.3% 4.9%
100 73.5% 5.0% 6.0% 4.9%
1,000 100.0% 5.3% 5.1% 4.6%

Monte Carlo note: with 10,000 replicates the standard error on a proportion near 5% is about 0.22 percentage points, so differences of a few tenths between cells are noise, not signal. The 6.0% in the n = 100 skewed column is an unlucky draw at this seed — repeating that one cell at three other seeds with 20,000 replicates each gave 5.1%, 5.1% and 5.3%. The n = 15 inflation is not noise: the same repeat gave 5.5%, 5.8% and 5.7%, so mild skew really does push the t-test slightly above nominal at very small n. Reporting the seeded run and the cross-seed check together is the honest way to present a simulation, and it is what a reader should expect from one.

Three things fall out of that table, and they are the whole argument of this section:

  • Column 2 is the trap, stated as a number. Shapiro-Wilk detects this real departure 13.6% of the time at n = 15 and 100.0% of the time at n = 1,000. Its sensitivity is governed almost entirely by sample size, not by how non-normal the data are.
  • Column 3 confirms the test is correctly calibrated — on genuinely normal data it rejects at very close to the nominal 5% at every sample size. The problem is not miscalibration.
  • Columns 4 and 5 are the punchline. Over the same data that Shapiro-Wilk rejects 100% of the time at n = 1,000, the t-test’s actual false-positive rate is 5.1% — nominal. The gate fires every single time at exactly the sample size where the thing it is gating is working perfectly. And at n = 15, where the t-test genuinely is a little off (about 5.5–5.8%, confirmed across seeds) and a researcher would actually want a warning, the gate stays silent roughly 86% of the time.

The one place in this table where the normality assumption is doing measurable damage — n = 15 — is precisely the place the normality test cannot see it. That is the inversion, and it is not a quirk of this particular distribution: it follows from the fact that a test’s power rises with n while the CLT’s protection also rises with n, so the two run in the same direction when they would need to run in opposite ones to be useful.

The information a normality test gives you tracks your sample size. The risk you are trying to manage does not. That mismatch is the whole problem, and it is why the test cannot function as the gate it is usually used as.

What this demonstration does not show

Being clear about the limits of a simulation is part of reporting one. This one uses a mild departure (skewness 0.85, no heavy tail, no outliers) and a two-sided one-sample t-test, and it measures Type I error only. It does not license “normality never matters”:

  • One-sided t-tests are meaningfully more affected by skew than two-sided ones, because the two tails no longer partly cancel. A two-sided robustness result does not transfer.
  • Heavier tails and genuine outliers are a different problem from skew, and they damage the t-test mainly through power and interval width rather than through Type I error — which a table like the one above would not reveal.
  • Some procedures are far more sensitive to the shape of the distribution than a test of the mean is. Prediction intervals, reference ranges, tolerance limits, and anything that depends on an extreme quantile inherit the distributional assumption directly and get no help at all from the Central Limit Theorem, because they are not statements about a sample mean.
  • In two-sample designs, unequal variances with unequal group sizes is a larger threat to the nominal level than non-normality — which is an argument for defaulting to Welch’s t-test (R’s t.test() already does), not an argument about normality at all.

Why a significance test as a gate for another significance test is a questionable procedure

There is a second, more structural objection to the usual workflow, independent of the sample-size behaviour above. The workflow is: run Shapiro-Wilk; if it is non-significant, run the t-test; if it is significant, run a non-parametric test instead. That is a two-stage conditional procedure, and it has three separate problems.

  • You are using a hypothesis test to try to accept its null. Normality is the null hypothesis of Shapiro-Wilk, so a non-significant result is failure to reject, not evidence for normality. The procedure treats “we could not detect a problem” as “there is no problem”, which is exactly the inference the framework does not support — and, per the simulation above, the smaller your sample, the more often you will get that non-significant result for the wrong reason. See what a p-value is and is not.
  • The second test’s stated error rate is no longer the error rate you get. The final analysis is chosen based on the data, so its operating characteristics are conditional on having passed the screen — and the reported p-value is computed as though it were unconditional. Selecting on the pre-test also selects on features of the sample that correlate with the test statistic you are about to compute.
  • The reported p-value ignores the first stage entirely. No adjustment is made anywhere for the fact that a decision was taken on the same data.

How much practical damage this causes is genuinely contested in the methodological literature, and it is worth reporting honestly rather than picking the side that suits the argument:

  • Rochon, Gondan and Kieser (2012), BMC Medical Research Methodology 12:81, simulated exactly this procedure — a Shapiro-Wilk pre-test deciding between Student’s t and Mann-Whitney U — on equally sized samples of n = 10 to 50 from exponential, uniform and normal distributions. Their conclusion is deliberately two-handed: the two-stage procedure “might be considered incorrect from a formal perspective; nevertheless, in the investigated examples, this procedure seemed to satisfactorily maintain the nominal significance level and had acceptable power properties.” But they also found the conditional error rates substantially distorted: for exponentially distributed data, selectively applying the t-test to the pairs of samples that had been accepted as normal produced Type I error rates “considerably larger than α = .05”. The unconditional t-test, with no pre-test at all, was α-robust.
  • Rasch, Kubinger and Moder (2011), Statistical Papers, reached a firmer recommendation from the same territory — that it is preferable to use Welch’s t-test without pre-testing for normality at all, rather than run the two-stage procedure.

The two papers agree on the operational point even where they differ on severity: the pre-test is not buying the protection it appears to buy. Rochon et al. also state the sample-size problem plainly — with larger samples “the Shapiro-Wilk test detects deviations from normality with nearly 100% power”, while for small samples it “lacks power to detect deviations from normality”. That is the simulation above, from an independent primary source.

Judging normality from a Q-Q plot instead — with a usable decision rule

“Use a Q-Q plot instead” is standard advice and, on its own, not much more actionable than the test it replaces, because it does not say what counts as too much curvature. Two things make it operational.

1. Calibrate your eye to what normal data actually look like at your n

Small normal samples produce visibly wiggly Q-Q plots, and researchers routinely over-read that wiggle as non-normality. The fix takes ten seconds: plot several Q-Q plots of known normal data at your own sample size, and compare.

par(mfrow = c(2, 3))
for (i in 1:6) { y <- rnorm(length(x15)); qqnorm(y); qqline(y) }

To put a number on how loose that reference is, the code below computes the correlation between the observed and expected quantiles — the numeric summary of “how straight is the Q-Q line” — across 10,000 samples drawn from a genuinely normal distribution at each n:

set.seed(2026)
qqcor <- function(v) { q <- qqnorm(v, plot.it = FALSE); cor(q$x, q$y) }

for (n in c(15, 30, 100, 1000)) {
  r <- replicate(10000, qqcor(rnorm(n)))
  cat(n, round(median(r), 4), round(quantile(r, 0.025), 4), fill = TRUE)
}
n Median Q-Q correlation
(truly normal)
2.5th percentile
(truly normal)
15 0.9764 0.9265
30 0.9854 0.9580
100 0.9944 0.9851
1,000 0.9992 0.9982

At n = 15, one normal sample in forty produces a Q-Q line no straighter than 0.927 — which is essentially what the skewed n = 15 sample above scored (W = 0.931). At that sample size the two are not distinguishable, by eye or by test, and the honest conclusion is that at n = 15 you cannot assess normality from the data at all. That is a real answer, and a more useful one than a p-value of 0.29. Where the sample is that small, the normality assumption has to be justified from what is known about the measurement — prior data, the instrument, the literature on that variable — not extracted from fifteen points.

At n = 1,000 the picture inverts completely: a genuinely normal sample essentially never falls below 0.998, and the mildly skewed sample scored 0.981. The departure is now easy to see — and it is still small enough that, per the table further up, the t-test does not care.

2. Ask what the downstream procedure actually assumes

The decision rule that replaces the p-value gate is not visual at all. It is: identify the assumption the specific procedure makes, check that thing, and judge the departure against how much that procedure tolerates. In practice that means:

  • Check residuals, not the raw variable. For regression and ANOVA the assumption is on the errors, so the object to plot is the model residuals — qqnorm(resid(fit)) — not the outcome. A right-skewed outcome variable is entirely compatible with well-behaved normal residuals, and vice versa. See how to read a residual plot for the companion checks on the same object, and regression analysis for the full assumption set.
  • Not every model assumes normal errors. Logistic regression does not: a logistic model in R has a binomial response and its raw residuals are not expected to be normal, so running a normality check on them is a category error rather than a failed assumption. The same applies to Poisson and negative-binomial models for count data.
  • Match the check to the estimand. If the quantity of interest is a mean or a mean difference, the CLT is working for you and moderate skew is survivable. If it is a reference interval, a percentile, or an individual prediction, it is not, and the distributional shape matters directly.
  • Decide in advance, and say so. The cleanest way to escape the two-stage problem is not to run the second stage conditionally at all: pre-specify the analysis, including whether it will be parametric, on the basis of what is known about the measurement, and report the distributional check as a description rather than as the thing that chose the test.

Where the Shapiro-Wilk test genuinely is the right tool

None of the above makes Shapiro-Wilk a bad test. It is a good test, and it has the best power of the common normality tests across a wide range of alternatives at small to moderate n, which is why it is the default. It is being asked the wrong question, not answering its own question badly. The cases where it is the right tool are the ones where normality is the substantive question rather than a hurdle:

  • When normality is the actual hypothesis under study. Method validation, assay characterisation, instrument qualification and process control routinely need to establish that a measurement error distribution is normal as a claim in its own right. There the null is the thing you are examining, the sample size is chosen for that purpose, and rejecting it is informative rather than inconvenient.
  • As a described, reported diagnostic at small to moderate n — stated alongside the Q-Q plot, with W, the p-value and n all reported, and with the analysis decision made on other grounds. Reporting W = 0.93 at n = 15 is useful; letting it choose your test is not.
  • Inside an automated pipeline where nobody can look at a plot — a simulation study, a QC dashboard, an automated batch-release check. Here a numeric threshold is unavoidable, and Shapiro-Wilk is a reasonable one, provided the sample size is fixed by design so the sensitivity is fixed too, and the alpha is chosen deliberately rather than inherited at 0.05.
  • On residuals from a fitted model, at moderate n, as one input among the standard diagnostic set rather than as a gate.
  • As a comparative statistic across groups or batches. Because W is a descriptive measure of departure that is relatively stable across n, comparing W between batches processed identically can flag a batch that behaved differently — a use that never converts W into a pass/fail p-value at all.

The consistent thread: Shapiro-Wilk is useful when the sample size is a design choice rather than an accident, and when the answer to “is this exactly normal?” is genuinely what you want. It is not useful as an automatic gate in front of a t-test, an ANOVA, or a decision to switch to the Wilcoxon signed-rank test or the Kruskal-Wallis test, because in that role its answer is driven by your sample size and the decision it drives should not be.

Skewness and kurtosis

Skewness and kurtosis are numeric descriptors of distribution shape that complement visual and formal assessment:

  • Skewness measures asymmetry (see CASRAI’s guide to skewness: left-skewed vs. right-skewed distributions for how this affects the choice of central-tendency statistic). A normal distribution has skewness of 0; positive skewness indicates a longer right tail, negative skewness a longer left tail.
  • Kurtosis measures tail weight relative to a normal distribution. Excess kurtosis of 0 corresponds to a normal distribution’s tails (mesokurtic); positive excess kurtosis (leptokurtic) indicates heavier tails and a sharper peak; negative excess kurtosis (platykurtic) indicates lighter tails and a flatter peak.

A commonly cited rule of thumb treats skewness and excess kurtosis roughly within ±1 as “approximately normal” for many practical purposes, with values beyond roughly ±2 flagged as substantial departure — but these thresholds are conventions repeated across textbooks and software documentation, not fixed statistical laws, and different fields and different sample sizes justify different tolerances. Report the actual skewness/kurtosis values and the sample size alongside any judgment call, rather than only reporting whether a threshold was crossed.

Related: when to use fdr correction — A lookup table for Bonferroni-adjusted alpha, a worked interpretation of a real-looking multiple-testing output, and the decision rule for when family-wise error control (Bonferroni/Holm) is right versus when false discovery rate control (Benjamini-Hochberg) is the better tool.

What to do when data are not normal

A confirmed, meaningful departure from normality does not mean the analysis is stuck — there are several established routes forward, each with a different cost:

  • Transformations — a log transformation compresses right-skewed data (common for variables like cost, duration, or concentration that cannot go below zero); a square-root transformation is a gentler option often used for count data; the Box-Cox transformation estimates the best power transformation for a given dataset rather than assuming log or square-root is correct. The cost: transformed results are on a transformed scale, which complicates interpretation (a mean difference in log-dollars is not a mean difference in dollars) and requires back-transformation or careful framing when reporting effect sizes.
  • Non-parametric alternatives — tests that do not assume a normal distribution, at some cost in statistical power relative to their parametric counterparts when the data genuinely are normal: the Mann-Whitney U test in place of an independent-samples t-test, the Wilcoxon signed-rank test in place of a paired t-test, the chi-square test for categorical association, the Kruskal-Wallis test in place of one-way ANOVA, and Spearman’s rank correlation in place of Pearson’s correlation coefficient.
  • Robust statistical methods — approaches such as trimmed means, M-estimators, or robust regression that reduce the influence of outliers and heavy tails without fully abandoning the parametric framework.
  • Bootstrapping — resampling the observed data (with replacement) to build an empirical sampling distribution and derive confidence intervals or p-values without assuming any particular parametric form. Especially useful when no standard non-parametric test matches the exact statistic of interest.
  • Generalized linear models (GLMs) with an appropriate link function — rather than transforming the outcome and analyzing it on an artificial scale, a GLM models the outcome on its natural scale with a distributional family and link function suited to it (e.g., a log link with a Poisson or negative binomial family for count data, a logit link for binary outcomes). This is often the more principled option when the outcome variable’s natural distribution is clearly non-normal by design (counts, proportions, time-to-event data) rather than through an accidental sampling artifact. See regression analysis for how model assumptions are interpreted and reported more generally.

Reporting normality assessment

A methods section should state how normality was assessed, not simply assert that data “were normally distributed” or “violated the normality assumption” without evidence. A defensible report typically includes:

  • Which method(s) were used — e.g., “distribution was assessed via histogram and Q-Q plot, supported by Shapiro-Wilk test.”
  • The actual result of any formal test, including the statistic, degrees of freedom (where applicable), and p-value — not just “normality was confirmed/violated.”
  • The sample size, alongside any formal test result. A Shapiro-Wilk p-value is uninterpretable without n — report it as “W = 0.95, p = 0.001, n = 100″, never as “p = 0.001” alone. Reporting W as well as p gives the reader a measure of the departure that is not inflated by sample size.
  • What was done as a result — proceeded with the planned parametric test, applied a specific transformation, or switched to a named non-parametric alternative — and why, given the sample size and the magnitude of the departure observed.

This is the same reporting discipline already expected for other statistical tests: state the method and the actual result, not just a conclusion.

Testing normality in R, Python, and SPSS

  • Rshapiro.test(x) runs the Shapiro-Wilk test directly; qqnorm(x) followed by qqline(x) produces a Q-Q plot against a normal reference line.
  • Pythonscipy.stats.shapiro(x) runs the Shapiro-Wilk test; statsmodels.api.qqplot(x, line='s') (from the statsmodels package) produces a Q-Q plot with a fitted reference line. scipy.stats.skew() and scipy.stats.kurtosis() return the numeric descriptors covered above.
  • SPSS — the Explore procedure (Analyze → Descriptive Statistics → Explore, with Normality plots with tests requested) reports the Shapiro-Wilk statistic (for n ≤ 50 by default) and the Kolmogorov-Smirnov (Lilliefors-corrected) statistic side by side, along with a Q-Q plot and boxplot.

Frequently asked questions

Does my raw data need to be normally distributed to run a t-test?

Not exactly. The formal assumption concerns the sampling distribution of the mean (or mean difference), not the raw data. With a reasonably large sample, the Central Limit Theorem makes this approximately true even when the raw data are skewed, which is why t-tests are considered fairly robust to non-normal raw data at larger sample sizes.

Which is better: a histogram or a Q-Q plot?

A Q-Q plot is generally the more informative single tool — it is less sensitive to bin-width and sample-size artifacts than a histogram, and it shows precisely where a distribution departs from normal (tails vs. center). A histogram is still useful as a quick, intuitive first look, especially for a non-statistical audience.

Should I trust a non-significant Shapiro-Wilk result and stop checking?

Not on its own, especially at small sample sizes, where the test is underpowered and can miss real departures from normality. Pair it with a visual check (Q-Q plot, histogram) rather than relying on the p-value alone in either direction.

My sample is small and skewed — should I transform it or switch to a non-parametric test?

Both are defensible; the right choice depends on the field’s conventions, whether the transformed scale is interpretable for the audience, and whether a well-established non-parametric equivalent exists for the specific comparison being made. Whichever is chosen, report the decision and the reasoning.

Is skewness of exactly 0 required for data to be treated as “normal enough”?

No. Skewness and kurtosis near 0 are expected under normality, but small departures are normal sampling variation, not evidence of a meaningfully non-normal distribution. Commonly cited tolerance ranges (roughly ±1) are conventions, not fixed cutoffs.

My Shapiro-Wilk test is significant. Do I have to abandon the t-test?

No — and at a large sample size, a significant result is close to uninformative on its own. In the simulation on this page, mildly skewed data (sample skewness 0.85) produced p = 2.55 × 10-15 at n = 1,000, while the t-test’s actual false-positive rate on that same data was 5.1% against a nominal 5%. Look at the Q-Q plot, look at the size of the departure, and ask what your specific procedure assumes. A significant test at large n tells you the departure is not exactly zero; it does not tell you it is large enough to matter.

My Shapiro-Wilk test is not significant. Can I say the data are normal?

Also no. Normality is the test’s null hypothesis, so a non-significant result is failure to reject, not evidence in favour. At n = 15, the test detected a genuinely skewed distribution only about 14% of the time in the simulation above — meaning a clean pass at that sample size is the expected outcome whether the data are normal or not. Small samples do not license the conclusion; they prevent it.

What sample size is the Shapiro-Wilk test valid for?

R’s shapiro.test() requires between 3 and 5,000 non-missing values and errors outside that range. But statistical validity and practical usefulness are different questions: the test is valid across that whole range and useful across a much narrower part of it. Below roughly n = 20 it has too little power to detect departures that matter; above roughly n = 300–500 it will reliably flag departures too small to affect a test of a mean. Between those, it is a reasonable supporting diagnostic.

Should I test the raw variable or the residuals?

The residuals, for any model that has them. Regression and ANOVA assume normality of the errors, not of the outcome or the predictors, so the object to examine is resid(fit). A skewed outcome variable is perfectly compatible with well-behaved normal residuals — and testing the raw variable instead is one of the most common ways a methods section ends up reacting to the wrong distribution entirely.

Is Shapiro-Wilk better than Kolmogorov-Smirnov or Anderson-Darling?

Generally yes on power, which is why it is the software default, and the difference is largest at small to moderate sample sizes. But the sample-size behaviour demonstrated on this page applies to all three — they are all null-hypothesis tests of exact normality, so all three become near-certain to reject at large n and near-powerless at small n. Choosing a different normality test does not escape the problem; changing what the test is used for does.

How should I report a normality check in a paper?

Report what you looked at, what you found, and what you did about it — not a verdict. If you ran Shapiro-Wilk, give W, the p-value and n together, because the p-value is uninterpretable without n. State that the Q-Q plot was inspected and what it showed. Then state the analysis decision and the reason for it, which should be about the size of the departure and the sensitivity of the procedure, not about whether a p-value crossed 0.05. If the analysis was pre-specified, say so — that is the cleanest defence against the two-stage problem described above.

Related reading: Poisson distribution — How to recognize count data that fits a Poisson distribution, the formula and its single parameter (lambda), the four assumptions that must hold, worked examples, and when to switch to negative binomial or Poisson regression instead.

See also: z-scores — How to calculate a z-score, what standardization does (and doesn’t) do to a distribution, and how to correctly read a standard normal (z) table, including a full table.

Follow CASRAI

Research-administration guidance, standards updates and independent tool reviews.

Referenced across the research world

University of Cambridge logoColumbia University logoCrossref logoUniversity of Edinburgh logoHarvard University logoUniversity of Oxford logoPrinceton University logoStanford School of Medicine logoUniversity College London logoORCID logoUniversity of Cambridge logoColumbia University logoCrossref logoUniversity of Edinburgh logoHarvard University logoUniversity of Oxford logoPrinceton University logoStanford School of Medicine logoUniversity College London logoORCID logo
  • University of Cambridge logo
  • Columbia University logo
  • Crossref logo
  • University of Edinburgh logo
  • Harvard University logo
  • University of Oxford logo
  • Princeton University logo
  • Stanford School of Medicine logo
  • University College London logo
  • ORCID logo

View CASRAI adoption →