I am observing the following QQ plot produced from an OLS linear regression fit of my data: QQ plot generated from data

Many other SE questions discussion QQ plot interpretation, but this is an extremely regular (but non-linear) patttern that I'm not sure how to interpret. To me this suggests that the linear mean function poorly estimates the response, but what can I learn from this QQ plot? (Perhaps it suggests the data were generated from a beta distribution?)

The residuals seem to follow a Gaussian distribution, and the fitted plot seems pretty okay (although I don't know how to check for equal variance). enter image description here

Any help with interpretation of these results would be greatly appreciated. If it helps, the outcome is a text sentiment score in the range (-2, 2).

Edit: A histogram of the residuals. A one-sample Kolmogorov-Smirnov test (ks.test(resid(md), y=pnorm)) leads me to reject the null hypothesis that the residuals are normally distributed.

histogram of residuals

  • 1
    $\begingroup$ What is your QQ plot of? If it's of the residuals, the residuals definitely do not seem to follow a Gaussian distribution. It also appears you have a very large number of observations; given that, and that your QQ plot indicates that the residuals are less spread out than expected (due to the finite range of your outcome variable, probably) it may be that you don't care about normality of the residuals; the CLT will have taken over and your parameter estimates will be close enough to Normally distributed for all the usual inferences to work. $\endgroup$
    – jbowman
    Dec 3, 2018 at 19:18
  • $\begingroup$ It's of the residuals. R code: qqnorm(resid(md <- lm(...))) qqline(resid(md)) However, the histogram of the residuals looks rather normal, albeit with long tails... $\endgroup$
    – Suriname0
    Dec 3, 2018 at 19:23
  • 1
    $\begingroup$ If the response is bounded, the residuals can't possibly be close to Gaussian unless the fit is so good that the SD is a small fraction of the range. That said, your details don't add up. If the outcome is in $[-2, 2]$ how come fitted values are about $3.8$ to $4.55$? Either way, you need a model that respects the bounded range of the response. I would start with a logit or probit but you need to scale the outcome to fall in $[0, 1]$. $\endgroup$
    – Nick Cox
    Dec 3, 2018 at 19:48
  • $\begingroup$ I don't know what text sentiment scores are, but given that I don't know how important it is to know what they are for your question. $\endgroup$
    – Nick Cox
    Dec 3, 2018 at 19:51
  • 2
    $\begingroup$ I think you might be misreading the plot: this is a trimodal, short-tailed distribution. Look at the histogram with hist(residuals(md)). You can reproduce its major features easily with a simulation such as n <- 1e4; x <- c(rep(-1.5, n), rep(0, 5*n), rep(1.5,n)); y <- rnorm(length(x), x, 0.3); z <- rnorm(length(x), 0, 0.15); y <- pmin(2, pmax(-2, y + z)) + 4.2; md <- lm(y ~ z) $\endgroup$
    – whuber
    Dec 3, 2018 at 20:22

1 Answer 1


The "flatter" part of a QQ plot suggests that from corresponding normal scores on the X-axis where it is flat, you have more data than would be expected according to a normal probability model. These Z-scores are (low) to -2, -1 to 1, and 2 to (high). For instance, on a normal curve, you'd expect 66% of data to lie within 1 SD of the mean. However, in your residual distribution, you have far more than 66% in that interval. Projecting the curves value at X=-1 and X=1 seems to give a Y of about -.33 to 0.33. That means that the central $\pm$ 0.33 SD of the residual distribution holds 66% of the data, a much higher concentration than in a normal distribution.

Similarly, for the steeply sloped (greater than identity, or the 45 degree line) sections of the QQ-plot, you have fewer observations than would be expected by a normal probability model. That seems to match the residuals histogram you show. It looks like a mixture of platykurtic and leptokurtic distributions. As noted in the comments, a trimodal distribution seems to fit the ticket as well.


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.