# How to Create a Residual Plot in R

In regression analysis, one of the essential diagnostic tools is the residual plot. Residuals represent the difference between the observed values and the values predicted by the regression model. Visualizing these residuals can help detect non-linearity, heteroscedasticity, and outliers, thus ensuring that the regression assumptions are met. In this comprehensive guide, we will walk you through the process of creating a residual plot in R.

### 1. Basics of Residuals

Before diving into R, it’s essential to understand what residuals are. In simple terms, a residual is the difference between an observed value and its corresponding predicted value based on the regression model.

Mathematically, for an observation i:

The primary purpose of studying residuals is to check the validity of the regression assumptions. Ideally, residuals should:

• Be randomly scattered around zero.
• Have a constant variance (homoscedasticity).
• Be independent.
• Follow a normal distribution when the sample size is large.

### 2. Using built-in functions to create a residual plot

For this example, let’s use the mtcars dataset, which is built into R. We’ll try to predict mpg (miles per gallon) using wt (weight of the car).

# Load the data
data(mtcars)

# Fit a linear model
model <- lm(mpg ~ wt, data=mtcars)

# Create a basic residual plot
plot(mtcars$wt, residuals(model), xlab="Weight of Car", ylab="Residuals", main="Residual Plot") abline(h=0, col="red") This will generate a scatter plot with car weights on the x-axis and residuals on the y-axis. The red line represents the zero line. ### 3. Enhancing your residual plot The basic residual plot can be enhanced for better visualization and understanding: • Adding a smoother: This can help in identifying any trend in the residuals. plot(mtcars$wt, residuals(model),
xlab="Weight of Car",
ylab="Residuals",
main="Residual Plot with Smoother")
abline(h=0, col="red")
lines(lowess(mtcars\$wt, residuals(model)), col="blue")

Histogram and Q-Q plot: To check for normality of residuals.

par(mfrow=c(2,1))
hist(residuals(model), breaks=15, main="Histogram of Residuals", xlab="Residuals")
qqnorm(residuals(model))
qqline(residuals(model))

### 4. Interpreting the residual plot

• Randomly scattered points: This indicates that the relationship is linear and the model fits the data well.
• Funnel shape: Suggests heteroscedasticity, i.e., the variance of residuals is not constant.
• Curved pattern: Indicates non-linearity in the data.
• Outliers: Points that stand far away from the zero line are potential outliers.