Plotting partial residuals on top of the estimated marginal means allows detecting missed modeling, like unmodeled non-linear relationships or unmodeled interactions. In a nutshell, it allows Visualizing Fit and Lack of Fit in Complex Regression Models with Predictor Effect Plots and Partial Residuals (Fox & Weisberg 2018).
To add partial residuals to a plot, add
residuals = TRUE to the
plot() function call. Unlike plotting raw data, partial residuals are much better in detecting spurious patterns of relationships between predictors and outcome.
Let’s look at an example with a non-linear relationship. The missed pattern is not obvious when looking at the raw data:
However, it becomes more obvious with partial residuals:
plot(pr, residuals = TRUE)
It is even more obvious, when a local polynomial regression line (loess) is added to the plot. This can be achieved using
residuals.line = TRUE.
plot(pr, residuals = TRUE, residuals.line = TRUE)
Here is another example, which shows that the partial residuals plot suggests modeling an interaction:
Again, it is recommended to add a loess-fit line to the residuals:
plot(pr, residuals = TRUE, grid = TRUE, residuals.line = TRUE)
Modeling the interaction clearly catches the pattern in the data better.
ggeffects usually “prettyfies” the data and tries to find a pretty sequence over a range of a focal predictor, to avoid too lengthy output, particularly for continuous variables (see section pretty value ranges in this vignette).
This, however, might be misleading in some cases when creating residual plots. In the next example, we have a sinus-curve pattern for the residuals, which is hidden by default:
In such cases, it is recommended to use the
all-tag in the
Fox J, Weisberg S. Visualizing Fit and Lack of Fit in Complex Regression Models with Predictor Effect Plots and Partial Residuals. Journal of Statistical Software 2018;87. https://www.jstatsoft.org/article/view/v087i09