How to Perform LOESS Regression in R

Spread the love

LOESS (or LOWESS), which stands for Locally Weighted Scatterplot Smoothing, is a flexible method for fitting a smooth curve to a scatterplot. Unlike traditional regression that fits a single equation to the data, LOESS fits multiple regressions in localized subsets to produce a curve. This allows for the capturing of non-linear relationships between variables. In this comprehensive article, we will explore LOESS regression, its advantages, and how to perform it in R.

Introduction to LOESS Regression

LOESS regression is a non-parametric technique that does not assume a particular functional form for the relationship between the dependent and independent variables. Instead, it relies on localized subsets of the data to construct a curve that fits the observed data points.

How Does LOESS Work?

  1. Weighted Regression: For each data point, a subset of neighboring points is chosen, and a weighted least squares regression is applied. The data point at which the regression is centered receives the highest weight, with weights decreasing for points further away.
  2. Smoothing Parameter: This determines the fraction of data points used for each localized regression. A smaller fraction results in a more wiggly curve, while a larger fraction produces a smoother curve.
  3. Degree of the Polynomial: Typically, either a first-degree (linear) or second-degree (quadratic) polynomial is used for the localized regressions.

Advantages of LOESS:

  • It’s flexible and can capture complex non-linear relationships.
  • It doesn’t require the specification of a functional form like linear or logistic regression.
  • It’s intuitive and visually interpretable.

Performing LOESS Regression in R

Sample Data:

We’ll use the mtcars dataset, which comes with R, to demonstrate LOESS regression.


Visualizing the Data:

Before fitting the model, let’s visualize the relationship between the weight (wt) of cars and their miles-per-gallon (mpg):


ggplot(mtcars, aes(x = wt, y = mpg)) + 
  geom_point() +
  ggtitle("Scatterplot of mpg against wt")

Fitting the LOESS Model:

Using the loess() function, we can fit a LOESS model:

loess_fit <- loess(mpg ~ wt, data = mtcars)

Visualizing the LOESS Fit:

Overlay the LOESS curve on the scatterplot:

ggplot(mtcars, aes(x = wt, y = mpg)) + 
  geom_point() +
  geom_smooth(method = "loess", se = FALSE, color = "red") +
  ggtitle("LOESS Regression of mpg on wt")

Here, geom_smooth() with the method set to “loess” adds the LOESS curve to the plot.

Adjusting the Smoothing Parameter:

The span argument controls the smoothing parameter. A smaller value of span makes the curve wigglier:

ggplot(mtcars, aes(x = wt, y = mpg)) + 
  geom_point() +
  geom_smooth(method = "loess", se = FALSE, color = "red", span = 0.5) +
  ggtitle("LOESS Regression with span = 0.5")

Making Predictions:

To predict mpg for specific wt values:

new_data <- data.frame(wt = c(2.5, 3.5))
predictions <- predict(loess_fit, new_data)

Model Diagnostics:

It’s essential to check the assumptions and performance of the LOESS fit. One way is by examining the residuals:

residuals <- resid(loess_fit)

You can plot the residuals against the fitted values to check for any patterns or heteroscedasticity.

Caveats and Considerations:

  1. Overfitting: Since LOESS is highly flexible, it can sometimes overfit the data, especially with a small smoothing parameter.
  2. Computational Intensity: For large datasets, LOESS can be computationally demanding.
  3. Interpretability: While LOESS provides a good fit, it may not provide as clear an interpretation as parametric models.


LOESS regression offers a versatile method to capture non-linear relationships in data without making strong assumptions about the functional form of the relationship. R provides intuitive and efficient tools for performing and visualizing LOESS regression, making it an invaluable tool for data scientists and researchers working with non-linear data. As with all models, it’s crucial to understand its strengths and limitations to use it effectively.

Posted in RTagged

Leave a Reply