What would cause a residual plot to be entirely above 0? What would cause a regression model to always under predict?
For over a year now an associate of mine has been producing a linear model for a client which predicts trends with reasonable accuracy but always under predicts the magnitude.
This has bothered me for a while and each time I see it or get reminded of it I attempt to find the cause and turn up short.
EDIT: Reading through the comments I realized that I misspoke. Rather than the residuals 'always' being biased the aggregation of the model is always under the actual. I'm not sure how to gracefully recover except to blame coffee/sleep etc. What I wanted to ask is closer to this, for each month the sum of the actual results is greater than the predicted results 'every' time.
 A: We will assume that the linear regression fit is through least squares, contains an intercept, and the residual plot is that from the training data.
From the normal equations, we see that the residuals of the regression has sample mean 0. Therefore, it's not possible for the residual plot to be entirely above 0. There must be a mistake somewhere in the visualization/computation.
A: To summarize the various comments and answers so far:


*

*If the predictions are on data that was not part of  the training sample, there could be a systematic difference between the training data and the prediction data. For example, if you are fitting time-series data and the data contains an upward-curving trend, then predicting the future from the past with a linear model will yield under-predictions on average.

*If the model always under-predicts on training data (or even just on average), it could be a less commonly used variety of linear model, such as a quantile regression model; or it might not contain an intercept (or terms which can linearly combine to form an intercept).

*If the model is standard linear least squares and does contain an intercept or equivalent spanning terms, then Benjamin's post is correct. The phenomenon you observed cannot possibly happen. So there must be an error in the computational code used for the model's training or prediction.
