# Different results for residual normal distribution between Jarque-Bera test and Q-Q Plot

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.

Do you think I did something wrong in my assumption?

• OLS is an estimation technique, not a model. Your model is probably a linear model. Nov 21, 2021 at 20:23
• 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. Nov 21, 2021 at 21:50

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.)

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

par(mfrow=c(2,3))
set.seed(2021)

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))

...

par(mfrow=c(1,1))


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.