Distribution
Normality Tests
Assesses whether the numeric columns you select depart from a normal distribution, alongside descriptive measures of their shape.
Method summary
A normality test compares the values in a column with what a normal distribution would produce. The null hypothesis says the distribution is normal, so a small p value counts as evidence of a departure rather than of normality. For every column the panel first builds a descriptive row: the number of observations, the mean, the standard deviation, the skewness, and the kurtosis expressed so that a normal distribution sits at zero. It then applies whichever tests can run. Shapiro-Wilk is the usual choice at small and moderate sample sizes, Kolmogorov-Smirnov looks at the largest gap between two cumulative distributions, and D'Agostino-Pearson combines skewness and kurtosis into one omnibus statistic. Each test reports its statistic, its p value and whether the column counts as normal at the alpha you chose, and the overall verdict for the column is a majority vote among the tests that ran. The method answers no research question by itself; it informs the choice of the analysis that follows.
Which research questions does it answer?
- Is my scale total close enough to normal for a parametric test to be defensible?
- In which columns do skewness and kurtosis depart visibly from what a normal distribution implies?
- Among the continuous variables in this survey, which ones are safer to analyse with a rank-based test?
- Can I justify analysing a right-skewed variable such as income without transforming it first?
When should you use it?
- Before settling on a parametric test, when you want numeric evidence about the distributional assumption.
- When each column holds at least 8 complete observations; below that the engine does not test the column and says why.
- When a report has to describe the shape of a scale total or of a continuous indicator.
- When a transformation such as a log or a square root is under discussion and the state before transformation needs documenting.
- When several continuous columns should be screened in one run to see which ones are problematic.
Required variable types
- Every selected column must be numeric. Setting its measurement level to 'scale' on the Variable tab makes the method picker offer it.
- No grouping variable is taken. Each column is evaluated on its own and no comparison between groups is made.
- To look at the distribution inside one group, filter the data down to that group and run the method again.
- One row per respondent. Missing values drop out of the column they belong to without affecting the other columns.
Key assumptions
- Independent observations
- The tests are built on the premise that the values are drawn independently of one another. When repeated measurements from the same person are stacked into a single column, the p value comes out smaller than it should.
- Enough observations
- In very small samples the tests have little power and even serious departures go unnoticed. In large samples the picture reverses: deviations too small to matter in practice are flagged as significant.
- Continuous measurement
- The tests presume an underlying continuous distribution. In a column that takes only a handful of distinct values, a single five-point Likert item for instance, ties pile up and the result almost always points to a departure.
- A single population in the column
- If the column is really two distinguishable subsets placed side by side, values collected with two different instruments for example, the resulting two peaks will not look normal. The problem lies in the mixture rather than in the shape.
How YouReply checks these assumptions
- Independent observations: The panel does not check this assumption automatically; the researcher evaluates it.
- Enough observations: Columns with fewer than 8 observations are not tested at all and appear in the result as a message with the reason. D'Agostino-Pearson needs at least 20 observations and is left out below that. Shapiro-Wilk is skipped above 5000 observations, with a note that it is not reliable at that size.
- Continuous measurement: The method picker looks for numeric columns but does not count how many distinct values they hold. You need to inspect the response distribution through a frequency table or descriptive statistics.
- A single population in the column: The panel does not check this assumption automatically; the researcher evaluates it.
How the analysis is run
- 1Drop your CSV or XLSX file onto the panel; the first row should carry the variable names.
- 2In the editable grid on the Data tab, confirm that numeric columns were not read as text.
- 3On the Variable tab set the columns you want to test to the 'scale' level and declare missing value codes as missing, otherwise codes such as 99 distort the distribution.
- 4Open the method picker on the Analysis tab and pick this method from the distribution category. With the 'Only ones that fit my data' switch on, methods that do not fit are dimmed with a plain-language reason instead of being hidden.
- 5Tick the columns in the parameter form, leave the test field on all or choose a single test, and change the alpha level if you need to.
- 6Start the run. A bar chart of the p values with a reference line at 0.05 sits at the top, with the per-column descriptives, the test tables and the summary below it.
- 7Download the tables as Excel and the chart as PNG. The computation credits card names the library call and its version; the free plan allows 50 runs per month.
Statistics and tables produced
- Column descriptives
- Observation count, mean, standard deviation, skewness and excess kurtosis for each column. Kurtosis is scaled so that a normal distribution gives zero.
- Shapiro-Wilk result
- The W statistic, its p value and the normal-or-not flag at your alpha. Above 5000 observations this row is replaced by a message saying the test was skipped.
- Kolmogorov-Smirnov result
- The D statistic and p value computed after the data have been standardised with the sample mean and standard deviation.
- D'Agostino-Pearson result
- The omnibus statistic combining skewness and kurtosis, with its p value. It requires at least 20 observations and is omitted below that.
- Verdict per column
- A normal or not normal label derived from a majority vote among the tests that ran. Where the tests disagree, the majority decides.
- Summary block
- How many columns looked normal and the names of those that did not. Columns that could not be tested are listed separately with their reasons.
- Chart of p values
- A bar chart comparing the p values across columns, with a reference line drawn at the 0.05 level. It can be downloaded as a PNG.
Effect size and confidence intervals
- Skewness
- Shows which way the distribution stretches. Values near zero indicate symmetry and positive values a tail running to the right. An absolute value above 1 is commonly read as visible asymmetry, though this is a reading scale rather than a test.
- Excess kurtosis
- Says how heavy the tails are relative to a normal distribution. Positive values mean extreme observations are more frequent than expected, negative values a flatter shape. Departures under 1 in absolute value rarely cause trouble in practice.
- Share of columns judged normal
- Read off the summary block, this gives a view of the dataset as a whole. A few departing columns are unremarkable; most of the columns departing is a reason to look at how the items were measured or at the missing value codes.
No output of this method comes with a confidence interval. The test statistics, the p values, the skewness and the kurtosis are all point estimates, and no standard errors accompany them. If you need an interval estimate for the size of the departure, it has to be computed outside the panel. One point deserves separate mention for the Kolmogorov-Smirnov test: because the parameters of the reference distribution are estimated from the same sample, the test behaves more liberally than its textbook form, which is to say its p values tend to be too large. In small samples it is reasonable to give the Shapiro-Wilk result more weight when deciding.
Example research question and example result
The numbers below are a representative example, not data from a real study or a real user.
- Research question
- In an employee engagement study, are the engagement total and the monthly income column suitable for parametric analysis? (Illustrative example, not real data.)
- Variables
- Engagement total: the mean of 12 items, continuous between 1 and 5 · Monthly income: the net amount as reported · 312 complete responses, test field on all, alpha 0.05
- Example result
- For engagement, n = 312, mean 3.62, standard deviation 0.71, skewness -0.18, excess kurtosis -0.34. Shapiro-Wilk W = 0.992, p = 0.086; Kolmogorov-Smirnov D = 0.041, p = 0.241; D'Agostino-Pearson statistic 2.41, p = 0.300. All three tests voted normal. For income, n = 298, mean 24,850, standard deviation 13,420, skewness 1.94, excess kurtosis 4.52. Shapiro-Wilk W = 0.871, p < 0.001; Kolmogorov-Smirnov D = 0.132, p < 0.001; D'Agostino-Pearson statistic 87.6, p < 0.001. The summary marked one column normal and the other not.
- Interpretation
- The engagement total shows no departure from normality, and with skewness and kurtosis both close to zero, tests built on means can be used for it without hesitation. Income tells the opposite story: all three tests agree on a departure, and the skewness together with the heavy tail identify the familiar right-stretching shape of an income variable. The options here are a log transformation, a rank-based test, or a closer look at the extreme values. The decision should not rest on the p value alone, since with 298 observations the tests pick up small departures as well, so the histogram and the skewness value belong in the reading.
Real output on a sample dataset
The results below were produced by the analysis engine from this data file. Changing the variable changes the research question as well; every run was computed in advance, so the page sends no request to the engine.
General customer survey (synthetic)
A wide survey of three hundred respondents: two and three category grouping variables, continuous measures, a five point ordinal scale, a binary purchase outcome, a four category brand choice, three repeated measurements, paired binary questions, three raters, four price questions and deliberately empty cells.
- Rows
- 300
- Columns
- respondent_id, gender, education, region, age, income, satisfaction, service_score, price_score, quality_score, loyalty, nps_score, purchased, brand_choice, satisfaction_level, pre_score, post_score, measure_1, measure_2, measure_3, use_before, use_after, use_followup, rater_1, rater_2, rater_3, price_too_cheap, price_cheap, price_expensive, price_too_expensive, feedback_score, followup_rating
The data is synthetic: it comes from a fixed random seed, not from a real study. The values below were produced by the analysis engine from this file, so uploading the same file to the panel gives the same results.
Research question: Do satisfaction, income and age follow a normal distribution?
- Analyzed columns
- satisfaction,income,age
- Normality test to run
- all
- Significance level (alpha)
- 0.050
Results per column
| Row | Valid observations | Mean | Standard deviation | Skewness | Kurtosis | Shapiro-Wilk test | Kolmogorov-Smirnov test | D'Agostino-Pearson test | Normal by the majority of tests |
|---|---|---|---|---|---|---|---|---|---|
| satisfaction | 300 | 5.24 | 0.960 | -0.198 | -0.676 | - | - | - | No |
| income | 300 | 45.41 | 17.09 | 0.921 | 1.07 | - | - | - | No |
| age | 300 | 37.47 | 8.97 | 0.052 | -0.364 | - | - | - | Yes |
Summary
- Columns tested
- 3
- Normally distributed columns
- 1
- Columns that are not normally distributed
- 2
Computation credits: scipy 1.18.0 · statsmodels 0.14.6 · scikit-learn 1.9.0 · numpy 2.5.1 · pandas 3.0.5 · semopy 2.3.11 · 89fc29a · Data seed: 20260914
How to report the result
The engagement total showed no departure from normality, Shapiro-Wilk W = .992, p = .086, whereas monthly income was clearly right-skewed, W = .871, p < .001, skewness 1.94.
An example sentence close to APA style; the numbers are representative.
When you should not use it
- A significant result says nothing about how badly the distribution departs. Large samples flag deviations that do not matter in practice, while small samples miss real ones.
- The Kolmogorov-Smirnov test estimates the mean and standard deviation of the reference distribution from the same data. With no Lilliefors-style correction applied, it rejects less often than it should.
- Shapiro-Wilk is not computed at all above 5000 observations, so in very large datasets the verdict rests on the votes of the remaining tests.
- Normality within groups is not given directly. If you are planning a test that compares two groups, filter the data by group and run this method once per group.
- No histogram, box plot or normal probability plot is produced. Only the bar chart of p values is drawn, so the shape of the distribution cannot be inspected visually.
- Outliers inflate skewness and kurtosis together and can create the appearance of non-normality. This method neither removes nor points to individual extreme values.
What to use when the assumptions are not met
- Descriptive StatisticsWhy: When reading the shape from the gap between mean and median and from the percentiles is enough, without a formal test.
- Outlier DetectionWhy: When the departure looks as if it comes from a handful of extreme observations; it shows which rows are flagged.
- Mann-Whitney U TestWhy: When normality does not hold and a two-group comparison has to be carried out on ranks instead.
Frequently asked questions
- My normality test is significant, does that rule out the t-test?
- A significant result is not a prohibition. Tests built on means become increasingly tolerant of distributional problems as the groups grow, thanks to the central limit theorem, and with roughly 30 or more observations moderate skewness does not seriously affect the outcome. What matters is the size and shape of the departure. Where skewness approaches 2, where the distribution has two peaks, or where the sample is small, a rank-based test or a transformation deserves consideration. Deciding on the p value alone leads to abandoning parametric tests unnecessarily in large samples.
- Which test should I rely on?
- Leaving the test field on all runs the three of them and decides the column by majority vote. At small and moderate sample sizes Shapiro-Wilk is usually the most sensitive option. The Kolmogorov-Smirnov variant implemented here takes the parameters of the reference distribution from the same sample, so it rejects less readily and should not be the sole basis of a decision. D'Agostino-Pearson helps work out whether the departure comes from skewness or from kurtosis, since it weighs both together.
- Do I need to check normality separately for each group?
- The assumption behind tests that compare means concerns the distribution inside each group, not the distribution of the whole dataset. Because this method takes no grouping variable, it treats all rows as one distribution. To work group by group, filter the data and run it again. If the group means differ, the pooled distribution can look bimodal and a departure may be reported even though nothing is wrong within the groups.
- Why is every column non-normal in my very large dataset?
- The power of these tests grows with the number of observations, so across thousands of rows every small irregularity of real data turns into a significant departure. In that situation it is more informative to shift the criterion from the p value to the descriptive measures: if skewness and excess kurtosis both stay under 1 in absolute value, the distribution can be treated as near normal for practical purposes. Note also that above 5000 observations Shapiro-Wilk is not computed, and the result states why.
References
- Shapiro, S. S., & Wilk, M. B. (1965). An Analysis of Variance Test for Normality (Complete Samples)
- Field, A. (2018). Discovering Statistics Using IBM SPSS Statistics
- Lilliefors, H. W. (1967). On the Kolmogorov-Smirnov Test for Normality with Mean and Variance Unknown
- scipy.stats.shapiro documentation
Try it with your own data
The free plan includes 50 analysis runs a month and needs no card.