How to Test for Normality in R

Spread the love

Normality testing is a fundamental step in many statistical procedures because numerous methods assume that the data is normally distributed. If this assumption is not met, the validity of the results might be questionable. Thankfully, R provides a plethora of tools to assist in normality testing. In this article, we will dive deep into the methods available in R to test data for normality.

Table of Contents

  1. Understanding Normal Distribution
  2. Graphical Methods for Testing Normality
    • Histograms
    • Q-Q Plots
    • P-P Plots
  3. Statistical Tests for Normality
    • Shapiro-Wilk Test
    • Anderson-Darling Test
    • Kolmogorov-Smirnov Test
    • Lilliefors Test
  4. Interpreting Results
  5. When Data Isn’t Normal
  6. Conclusion

1. Understanding Normal Distribution

The normal distribution, often referred to as the bell curve, is symmetric and has a characteristic bell-shaped curve. The mean, median, and mode of a normally distributed dataset are equal.

2. Graphical Methods for Testing Normality


A histogram is a simple yet effective way to visualize the distribution of data.

data <- rnorm(1000)  # Generate random normal data
hist(data, main="Histogram of Data", xlab="Value", breaks=50, col="lightblue", border="black")

While histograms provide a visual sense of normality, they’re subjective and might not always be conclusive.

Q-Q Plots (Quantile-Quantile Plots)

In a Q-Q plot, the quantiles of the data are plotted against the quantiles of a standard normal distribution. A 45-degree reference line represents where the points would lie if the data was normal.

qqline(data, col = "red")

If the data points closely follow the reference line, this suggests the data might be normally distributed.

P-P Plots

P-P plots are similar to Q-Q plots but compare the cumulative probabilities. They are less frequently used than Q-Q plots but can be more sensitive to deviations in the tails.

plot(ppoints(length(data)), sort(pnorm(data)), main="P-P Plot", xlab="Theoretical Quantiles", ylab="Sample Quantiles")
abline(0, 1, col = "red")

3. Statistical Tests for Normality

Shapiro-Wilk Test

One of the most widely used tests for normality, it’s particularly suitable for small sample sizes.


A low p-value (typically < 0.05) suggests the data does not come from a normal distribution.

Anderson-Darling Test

This test gives more weight to the tails than the Shapiro-Wilk test.


Kolmogorov-Smirnov Test

Used to compare a sample with a reference probability distribution (normal distribution in this case).

ks.test(data, "pnorm", mean(data), sd(data))

Lilliefors Test

A variation of the K-S test for small samples.


4. Interpreting Results

For the statistical tests:

  • p-value < 0.05: Generally suggests that the data is not normally distributed.
  • p-value >= 0.05: There isn’t enough evidence to suggest non-normality.

However, always consider the context and sample size when interpreting these results.

5. When Data Isn’t Normal

If data fails the normality test:

  1. Transformation: Consider transforming the data (log, square root, etc.) to induce normality.
  2. Non-parametric Tests: Use statistical methods that do not assume normality.
  3. Increase Sample Size: The Central Limit Theorem states that the distribution of sample means approaches normality as the sample size grows, even if the underlying data isn’t normal.

6. Conclusion

Normality testing is crucial for the correct application of many statistical methods. R provides a wide range of tools, both graphical and statistical, to evaluate the normality of your data. While it’s essential to test for normality, it’s equally important to remember that no test can prove normality; they can only provide evidence against it. Always consider the nature of your data, the context, and the purpose of your analysis when interpreting the results.

Posted in RTagged

Leave a Reply