What to Do When Your Data Is Not Normal in SPSS: 5 Options

Your Shapiro-Wilk Test Came Back Significant. Now What?

You ran the normality check and the Shapiro-Wilk test came back significant. Your histogram leans to one side and the Q-Q plot curves away from the line. If your next step is a t-test, an ANOVA, or a regression, that feels like a problem — because those tests assume normality.

The good news: non-normal data is one of the most common problems in real research, and one of the most fixable. There are five solid options in SPSS: checking for outliers and errors first, transforming your data, switching to a nonparametric test, bootstrapping, and using robust methods.

First, Make Sure the Problem Is Real

Before you fix anything, check the non-normality actually matters. First, look at the picture, not just the p-value. Open Analyze > Descriptive Statistics > Explore, move your variable into the Dependent List, and tick Plots > Normality plots with tests. The histogram and Q-Q plot show how bad the skew really is.

Second, the Shapiro-Wilk test is very sensitive in large samples: with 200 or more cases, even a trivial departure from normality can produce a significant p-value. Check the skewness value in the Descriptives table — between -2 and +2 is often acceptable as a rough rule of thumb. Third, the normality assumption applies to the residuals, not necessarily the raw scores. If your sample is small and the skew is strong, you need one of the five options below.

Option 1: Clean Your Data First — Check for Outliers and Errors

The cheapest fix is often not a statistical technique at all: it is finding the handful of values dragging your distribution out of shape. A single typing error — 45000 instead of 4500 ms, or 55 on a 1–5 scale — can make good data look badly skewed.

Go to Analyze > Descriptive Statistics > Explore and click Statistics to tick Outliers. SPSS lists the five highest and five lowest values. A score that is impossible for your scale is a data-entry error and should be corrected or set to missing — not analysed. A boxplot (Graphs > Legacy Dialogs > Boxplot) shows the same thing visually: points beyond the whiskers are outliers.

If a value is real but extreme, do not just delete it — that is poor practice and hard to defend. Consider winsorizing it (replacing it with the next most extreme non-outlier value), or keep it and choose one of the options below, since several handle outliers gracefully. Whatever you decide, report it transparently.

Option 2: Transform Your Data

Transformation is the classic fix: apply a mathematical function to every score so the distribution becomes more symmetric, then run your planned test on the transformed scores. It is the only option here that lets you keep your original parametric test.

Which transformation should you use?

  • Moderate positive skew: square-root transformation.
  • Strong positive skew: log transformation (base 10) — the most commonly used in practice.
  • Very severe positive skew: inverse transformation (1 divided by the score).
  • Negative skew: reflect the variable first (subtract every score from the maximum + 1), then apply a log or square-root transformation.

Go to Transform > Compute Variable, name the new variable LogScore, and enter LG10(Score) as the expression (use LG10(Score + 1) if the variable contains zeros, since the log of zero is undefined). Click OK, then re-run your normality check on the new variable: if the Shapiro-Wilk test is now non-significant and the Q-Q plot looks straight, run your t-test or ANOVA on the transformed scores.

The catch: transformation changes what your numbers mean. A mean of log-transformed scores is not the mean of the original scores, so describe the transformation you used and report the original medians alongside the test results where possible.

Option 3: Switch to a Nonparametric Test

If transformation does not fix the skew, or you would rather not change what your scores mean, switch to a nonparametric test. These tests work with ranks instead of raw scores, so they make no assumption of normality at all. They are the most widely used answer to non-normal data.

  • Independent-samples t-test → Mann-Whitney U test
  • Paired-samples t-test → Wilcoxon signed-rank test
  • One-way ANOVA → Kruskal-Wallis H test
  • Pearson correlation → Spearman rank correlation
  • Repeated-measures ANOVA → Friedman test

To run one, go to Analyze > Nonparametric Tests > Legacy Dialogs and pick the test you need — for example, 2 Independent Samples for the Mann-Whitney U test. Move your outcome variable into the Test Variable List and your grouping variable into the Grouping Variable box, click Define Groups, enter the two group codes, and click OK. The trade-off is a small loss of statistical power, but when the data is genuinely non-normal, the nonparametric test is usually the more accurate choice.

Option 4: Bootstrap Your Analysis

Bootstrapping is a modern solution: instead of assuming normality, SPSS repeatedly resamples your own data (typically 1,000 times) and builds an empirical sampling distribution. Your p-values and confidence intervals then come from your actual data.

Most SPSS dialogs that support bootstrapping have a Bootstrap button. Set up your t-test as usual (Analyze > Compare Means > Independent-Samples T Test), click Bootstrap, tick Perform bootstrapping, and set the samples to 1000 and the confidence level to 95%. Click Continue, then OK.

SPSS adds a bootstrap table to your output, with bias-corrected confidence intervals for the mean difference. If the interval does not include zero, the difference is significant at the 5% level. You can bootstrap t-tests, ANOVAs, correlations, and regressions. It works best with moderate sample sizes — with very small samples (fewer than 20 cases) it is less useful.

Option 5: Use Robust Methods — or Rely on the Central Limit Theorem

The fifth option is to use a version of your test that does not depend on the strict assumptions of the classic test.

For a one-way ANOVA, Welch’s ANOVA is a robust alternative that does not assume equal variances and is less sensitive to non-normality than the classic F-test. Set it up under Analyze > Compare Means > One-Way ANOVA, click Options, and tick Welch. For post-hoc comparisons, use the Games-Howell test rather than Tukey.

Finally, with large samples the sampling distribution of the mean becomes approximately normal whatever the shape of the raw data. With around 30 or more cases per group and moderate skew, running your planned t-test or ANOVA is usually defensible — just report the skewness and your reasoning.

Paste-Ready SPSS Syntax

Paste this into a syntax window (File > New > Syntax), replace Score and Group with your variables, and run the lines you need.

* Log transformation.
COMPUTE LogScore = LG10(Score + 1).
EXECUTE.

* Square root.
COMPUTE SqrtScore = SQRT(Score).
EXECUTE.

* Re-check normality.
EXAMINE VARIABLES=LogScore
  /PLOT NPPLOT
  /STATISTICS DESCRIPTIVES
  /MISSING LISTWISE.

* Mann-Whitney U test.
NPAR TESTS
  /M-W= Score BY Group(1 2)
  /MISSING ANALYSIS.

* Kruskal-Wallis H test.
NPAR TESTS
  /K-W= Score BY Group(1 3)
  /MISSING ANALYSIS.

* Wilcoxon signed-rank test.
NPAR TESTS
  /WILCOXON= Before WITH After (PAIRED)
  /MISSING ANALYSIS.

* Bootstrapped t-test (1,000 samples).
BOOTSTRAP
  /SAMPLING METHOD=SIMPLE
  /VARIABLES TARGET=Score INPUT=Group
  /CRITERIA CILEVEL=95 CITYPE=PERCENTILE NSAMPLES=1000
  /MISSING USERMISSING=EXCLUDE.
T-TEST GROUPS=Group(1 2)
  /VARIABLES=Score.

* Welch's ANOVA with Games-Howell post hoc.
ONEWAY Score BY Group
  /STATISTICS DESCRIPTIVES HOMOGENEITY WELCH
  /POSTHOC=GH ALPHA(0.05)
  /MISSING ANALYSIS.

Which Option Should You Choose?

  • Outliers or errors are causing the skew → Option 1: clean the data, then re-check.
  • Skew is moderate and you want to keep your t-test or ANOVA → Option 2: transform and re-check.
  • Skew is strong or transformation fails → Option 3: switch to the nonparametric equivalent.
  • You want to keep means but distrust the normality assumption → Option 4: bootstrap with 1,000 samples.
  • Your sample is large (30+ per group) and the skew is moderate → Option 5: proceed with the parametric test (or Welch’s ANOVA) and report the skew transparently.

These options are not mutually exclusive: clean the data, try a log transformation, and if the data is still skewed, fall back to the nonparametric test — reporting each step.

How to Interpret the Output

Whatever option you choose, check the fix worked before reporting the main result. After a transformation, re-run Analyze > Descriptive Statistics > Explore with normality plots on the transformed variable. Look for a Shapiro-Wilk p-value above .05, a roughly straight Q-Q plot, and skewness closer to zero. If it only partly helped, try a stronger transformation or move to a nonparametric test.

For a nonparametric test, SPSS reports mean ranks instead of means. In a Mann-Whitney U test, look at the Test Statistics table for the U value, the z value, and the asymptotic significance (two-tailed). Report the medians of the two groups alongside the test result, because medians describe skewed data far better than means. Effect size: r = z / √N.

For a bootstrapped analysis, use the bootstrap confidence interval rather than the standard p-value: a 95% interval for a mean difference that excludes zero indicates significance at the 5% level.

Reporting in APA Style (7th ed.)

Report the normality check, the option you chose, and the result — in that order.

If you transformed the data:

“Anxiety scores were positively skewed (skewness = 1.84); a log10 transformation was applied, after which the distribution did not depart significantly from normality, Shapiro-Wilk W(48) = .97, p = .214. A t-test on the transformed scores showed the intervention group scored significantly lower, t(46) = 2.61, p = .012, d = 0.75.”

If you switched to a nonparametric test:

“Anxiety scores were not normally distributed (Shapiro-Wilk p = .003 and p = .011), so a Mann-Whitney U test was used. Median anxiety was lower in the intervention group (Mdn = 12) than in the control group (Mdn = 18), U = 176, z = −2.43, p = .015, r = .35.”

If you bootstrapped:

“Because anxiety scores were positively skewed, bias-corrected bootstrap confidence intervals based on 1,000 samples were calculated. The mean difference was 5.40, 95% BCa CI [1.20, 9.60].”

Key Takeaways

  • Non-normal data is common and fixable — check the plots first.
  • Always clean first: data-entry errors and extreme outliers are the cheapest cause of skew to fix.
  • Transformation (usually log10) lets you keep your parametric test — but re-check normality afterwards and report it.
  • Nonparametric tests (Mann-Whitney U, Wilcoxon, Kruskal-Wallis, Spearman) are the simplest safe fallback.
  • Bootstrapping with 1,000 samples gives valid p-values and confidence intervals from your own data, without assuming normality.
  • With 30+ cases per group and moderate skew, the t-test and ANOVA are fairly robust — report the skewness and your reasoning.

Frequently Asked Questions

Can I just ignore non-normality and run the t-test anyway?

Sometimes — but only when the violation is mild and your sample is large (around 30 or more per group). With small samples or strong skew, the p-values from a t-test or ANOVA can be misleading. Running the check and reporting what you found is always the safer choice.

Which transformation should I try first?

For positive skew, try the square-root transformation for moderate skew and log10 for strong skew. For negatively skewed data, reflect the variable first (subtract each score from the maximum + 1), then apply a log or square-root transformation.

Do nonparametric tests have less power than t-tests?

Yes, slightly — when the data is actually normal, a nonparametric test is roughly 95% as efficient as its parametric equivalent. When the data is genuinely non-normal, it is usually the more accurate choice.

How many bootstrap samples should I use?

SPSS defaults to 1,000 samples. For more stable intervals, 5,000 is a common choice. Report the number of samples you used.

Should I report means or medians for skewed data?

Medians (with interquartile ranges) describe skewed data better than means. If you transformed the data, give the original medians too.

Need this done on your data? Get a free quote → /services/