What if my data aren't normally distributed?

Checking normality and variance with plots, and your options when assumptions fail

TL;DR

Parametric tests (t-test, ANOVA, linear regression) assume roughly normal, equal-variance data (technically: normal residuals). Check with plots first (histogram, Q–Q plot), not just a normality test. If assumptions fail, you have options: transform the data, use a robust/Welch variant, switch to a non-parametric test, or use a model designed for your data type.

What actually needs to be normal

A common misconception: the raw data must be normal. What the tests really assume is that the residuals (the leftover variation after accounting for group/predictor) are approximately normal. For ANOVA/regression, that the spread of residuals is roughly constant. For a simple two-group comparison this is close to "each group is roughly normal," but for regression you check the residuals, not the raw y values.

Three assumptions to check for most parametric tests:

  1. Normality of residuals.
  2. Homogeneity of variance (homoscedasticity).
  3. Independence of observations: the one a statistical test can't rescue if violated.

How to check: plots beat tests

Check assumptions with plots first. A Q–Q plot tells you far more than a Shapiro–Wilk p-value, which misses real non-normality at small n and flags trivial deviations at large n.

  • Histogram / density plot: is it roughly symmetric and bell-ish, or heavily skewed?
  • Q–Q plot: points on the diagonal line = approximately normal; systematic curves = skew; S-shapes = heavy tails. This is the most informative single check.
  • Residual-vs-fitted plot (regression/ANOVA): a shapeless cloud is good; a funnel shape means non-constant variance; a curve means non-linearity.

Switch between distribution shapes to learn to read a Q–Q plot, then log-transform the skewed one to watch it snap back to the diagonal:

-2.00.02.0sample quantile (z)-202theoretical quantile (z)

Normal data hugs the diagonal. That's what “normal enough” looks like.

Formal normality tests (Shapiro–Wilk, Kolmogorov–Smirnov) exist, but use them with caution:

  • With small samples they have little power and miss real non-normality.
  • With large samples they flag trivial, harmless deviations as "significant."

So don't let a Shapiro–Wilk p-value mechanically decide your analysis. With large n, parametric tests are robust to moderate non-normality anyway (thanks to the central limit theorem); with small n, lean on the Q–Q plot and prior knowledge of the data type.

If assumptions fail, your options

  1. Transform the data. A log transform is the workhorse for right-skewed biological data (concentrations, fold-changes, expression) and often fixes both skew and unequal variance at once. Square-root helps count-like data; logit/arcsine has been used for proportions (though modeling proportions directly is better).
  2. Use a variance-robust test. Welch's t-test and Welch's ANOVA handle unequal variances without a transform.
  3. Switch to non-parametric. Mann–Whitney, Kruskal–Wallis, etc., when transformation doesn't help and n is small.
  4. Use the right model for the data type. Counts → Poisson/negative-binomial; proportions → logistic regression; time-to-event → survival models. Often better than transforming continuous-test machinery onto data that isn't continuous.

A biology example

Cytokine concentrations are right-skewed with a few large values, and the high-mean group also has a larger spread. A log transform usually pulls the distribution toward symmetry and equalizes the variances, after which a t-test on the log values is valid (and tests the ratio of geometric means, often the biologically natural quantity for concentrations).

Common mistakes

  • Letting Shapiro–Wilk auto-decide. Especially misleading at both small and large n; use plots and judgment.
  • Testing normality of the raw outcome instead of residuals in regression/ANOVA.
  • Reflexively going non-parametric when a simple log transform would keep the more powerful, more interpretable parametric test.
  • Treating outliers as automatic deletions. Investigate them. Is it a data-entry error, a real biological extreme, or a failed assay? Document any exclusion rule decided in advance.
  • Forgetting that no test fixes non-independence.

t-tests · Non-parametric tests · Replicates and pseudoreplication

Ready to run this analysis on your own data?