How do I create a residual plot in R?

A residual plot in R can be created by using the plot() function and specifying the model object, and the type of plot as “resid” or “residuals”. This will generate a graphical representation of the residuals from the linear regression model. The plot can then be further customized using additional parameters.


Residual plots are often used to assess whether or not the in a regression analysis are normally distributed and whether or not they exhibit .

This tutorial explains how to create residual plots for a regression model in R.

Example: Residual Plots in R

In this example we will fit a regression model using the built-in R dataset mtcars and then produce three different residual plots to analyze the residuals.

Step 1: Fit regression model.

First, we will fit a regression model using mpg as the response variable and disp and hp as explanatory variables:

#load the dataset
data(mtcars)

#fit a regression model
model <- lm(mpg~disp+hp, data=mtcars)

#get list of residuals 
res <- resid(model)

Step 2: Produce residual vs. fitted plot.

Next, we will produce a residual vs. fitted plot, which is helpful for visually detecting heteroscedasticity – e.g. a systematic change in the spread of residuals over a range of values. 

#produce residual vs. fitted plot
plot(fitted(model), res)

#add a horizontal line at 0 
abline(0,0)

Residual vs. fitted plot in R

The x-axis displays the fitted values and the y-axis displays the residuals. From the plot we can see that the spread of the residuals tends to be higher for higher fitted values, but it doesn’t look serious enough that we would need to make any changes to the model.

Step 3: Produce a Q-Q plot.

We can also produce a Q-Q plot, which is useful for determining if the residuals follow a normal distribution. If the data values in the plot fall along a roughly straight line at a 45-degree angle, then the data is normally distributed.

#create Q-Q plot for residuals
qqnorm(res)

#add a straight diagonal line to the plot
qqline(res) 

Q-Q residual plot in R

We can see that the residuals tend to stray from the line quite a bit near the tails, which could indicate that they’re not normally distributed.

We can also produce a density plot, which is also useful for visually checking whether or not the residuals are normally distributed. If the plot is roughly bell-shaped, then the residuals likely follow a normal distribution.

#Create density plot of residuals
plot(density(res))

Residual density plot in R

We can see that the density plot roughly follows a bell shape, although it is slightly skewed to the right. Depending on the type of study, a researcher may or may not decide to perform a transformation on the data to ensure that the residuals are more normally distributed.

x