I am trying to test for normality of residuals using 2 different ways:

  1. Using Jarque-Bera test
  2. Q-Q Plot

I can see different results, for the JB test the value is 19.9553 with a probability of 0.00005. Thus, we can't reject the null hypotheses, and this concludes that there is a non-normal distribution of results.

On the other hand, when I plotted the same dataset using Q-Q graph, I could see a partially linear relation, which might point to a normal distribution. Given the size of observations is 62 and the regression model that was used is the OLS model.

enter image description here

Do you think I did something wrong in my assumption?

  • 2
    $\begingroup$ OLS is an estimation technique, not a model. Your model is probably a linear model. $\endgroup$ Nov 21, 2021 at 20:23
  • 1
    $\begingroup$ It is often difficult to assess normality using standard tests for normality. For small $n$ such tests do not have the power reliably to distinguish normal from uniform or exponential. For large $n$ quirks of little practical importance can lead to rejection of nearly normal samples. In practice, many statisticians prefer to judge normal distribution using Q-Q plots. $\endgroup$
    – BruceET
    Nov 21, 2021 at 21:50

1 Answer 1


Here are six samples, of sizes $10,10,10,1000,1000,1000$ and from distributions standard (uniform, exponential, normal, uniform, exponential, normal), respectively.

A normal Q-Q plot is shown for each sample, with the Shapiro-Wilk P-value in the upper-left corner of each.

It is difficult to judge normality by looking at only ten observations. The Q-Q plots are generally useful for samples of a thousand. And, with 1000 observations, the S-W test often gives helpful results. (The S-W normality test is widely used and many statisticians consider it among the best, but I am not claiming it is best for your purposes.)

enter image description here

R code for three panels of the figure is shown below. (Elegance was sacrificed for simplicity.)


x = runif(10)
pv=shapiro.test(x)$p.val; pv
[1] 0.8485772
qqnorm(x, main="10 Unif"); qqline(x, col="blue")
 text(-1.1, .9, round(pv,5))


z = rnorm(10)
pv = shapiro.test(z)$p.val; pv
[1] 0.08000124
qqnorm(x, main="10 Norm"); qqline(x, col="blue")
 text(-1.1, .9, round(pv,5))

u = runif(1000)
pv = shapiro.test(u)$p.val; pv
[1] 2.473175e-17;  if(pv < .0001) pv = 0
qqnorm(u, main="1000 Unif"); qqline(x, col="blue")
 text(-3, .82, round(pv,5))



Note: There are several comprehensive discussions about best methods to judge normality on this site. You might start by looking at some of the pages linked in the margin as 'Relevant', then try the search facility at the top of the page. And some of my colleagues may post comments with favorite links.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.