Site icon TechVidvan

Non-Linear Regression in R – Implementation, Types and Examples

In the previous R tutorial, we learned about linear regression and how to implement it in R. With this chapter of TechVidvan’s R tutorial series, we are going to study non-linear regression in R. We will learn what R non-linear regression is? We will also learn the various kinds of non-linear regression models in R. Finally, we will look at how to implement non-linear regression in R.

Non-Linear Regression in R

R Non-linear regression is a regression analysis method to predict a target variable using a non-linear function consisting of parameters and one or more independent variables. Non-linear regression is often more accurate as it learns the variations and dependencies of the data.

Non-linear functions can be very confusing for beginners. For example, let’s check out the following function.

Now, you might think that this equation can represent a non-linear model, but that is not true. The above equation is, in fact, a linear regression equation. The easiest way to identify a linear regression function in R is to look at the parameters. The above equation is linear in the parameters, and hence, is a linear regression function. The basic format of a linear regression equation is as follows:

Where

These independent variables can be logarithmic, exponential, squared, cubic, quadratic, or raised to any power. As long as a regression function fits the format, it is a linear regression function. A model may call as non-linear regression model if its function does not fit the linear regression function format.

Here are a few examples of non-linear equations:

There are also certain non-linear functions that can modify with algebra to mimic the linear format. For example,

This equation can be rewritten as:

Such non-linear functions that can be rewritten as linear functions are said to be intrinsically linear.

Maximum Likelihood Estimation

Maximum likelihood estimation is a method for estimating the values of the parameters to best fit the chosen model. It provides estimated values for the parameters of the model equation that maximize the likelihood of the predicted values matching the actual data.

MLE treats finding model parameters as an optimization problem. It seeks a set of parameters that result in the best fit of the joint probability of the given data.

Examples of Non-Linear Regression Models

1. Logistic regression model

Logistic regression is a type of non-linear regression model. It is most commonly used when the target variable or the dependent variable is categorical. For example, whether a tumor is malignant or benign, or whether an email is useful or spam.

Linear regression models work better with continuous variables. When working with categorical variables, outputs as continuous values may result in incorrect classifications.

There are three kinds of logistic regression models:

These types of models only have two possible outcomes. For example, a tumor being benign or malignant.

These types of models have three or more possible outcomes with no order of preference or ranking. For example, what types of beverages are more preferred(smoothie, milkshake, juice, tea, coffee, etc.)

These types of models have three or more possible outcomes and these outcomes have an order of preference. For example, Movie ratings from 1 to 5 stars.

2. Michaelis-Menten Regression model

Michaelis-Menten Kinetics model is the most popular kinetics model, used for modeling enzyme kinetics in biochemistry. It is named after a biochemist from Germany named Leonor Michaelis and a Physician from Canada named Maud Menten. The model describes the rate of enzymatic reactions by relating the reaction rate to the concentration of a substrate. The equation looks something like this:Here

3. Generalized Additive Models

Generalized additive models fit non-parametric curves to given data without needing a specific mathematical model to describe the nonlinear relationship between the variables. They are very useful as they allow us to identify the relationships between dependent and independent variables without requiring a particular parametric form. The gam() function in R can be used to fit data to curves using the generalized additive models in R.

Changing Non-Linear Models Into Linear Models

Sometimes non-linear models are converted into linear models and fitted to curves using certain techniques. This is done with the aim of simplifying the process of fitting the data to the curve as it is easier to fit a linear model than a non-linear model.

Let us take a look at this using an example. The following equation clearly represents a non-linear regression model.
If we take the natural log of the entire equation. It would look something like this:

Where

As we can see, this equation has now taken the shape and form of a linear regression equation and will be much easier to fit to a curve.

nls Function in R

The nls() function in R is very useful for fitting non-linear models. NLS stands for Nonlinear Least Square. The nls() function fits a non-linear model using the least square estimation method. The syntax of the nls function is as follows:

nls(formula, data, start, control, algorithm, trace, subset, weights, na.action, model, lower, upper, . . .)

Where

Example of Non-Linear Regression in R

As a practical demonstration of non-linear regression in R. Let us implement the Michaelis Menten model in R.
As we saw in the formula above, the model we are going to implement has two variables and two parameters.

We can rewrite the above equation as:

1. Let us get a dataset to work with.

data <- structure(list(S = c(3.6, 1.8, 0.9, 0.45, 
                           0.225, 0.1125, 3.6, 
                           1.8, 0.9, 0.45, 0.225, 
                           0.1125, 3.6, 1.8, 0.9, 
                           0.45, 0.225, 0.1125, 0), 
                     v = c(0.004407692, 0.004192308, 
                           0.003553846, 0.002576923,
                           0.001661538, 0.001064286, 
                           0.004835714, 0.004671429, 
                           0.0039, 0.002857143,
                           0.00175, 0.001057143, 
                           0.004907143, 0.004521429, 
                           0.00375, 0.002764286,
                           0.001857143, 0.001121429, 
                           0)), 
                .Names = c("S", "v"), 
                class = "data.frame", 
                row.names = c(NA, -19L))
data

Output

2. Once we have our data, we can use the drc package to fit it to a curve. We can also use the ggplot2 package to plot the data as well.

library(drc)
library(ggplot2)
MM.model <- drm(v~S, data=data, fct=MM.2())
mmdf <- data.frame(S=seq(0,max(data$S),length.out=100))
mmdf$v <- predict(MM.model, newdata=mmdf)
ggplot(data, aes(x = S, y = v)) +
  theme_bw() +
  xlab("Concentration [mM]") +
  ylab("Speed [dE/min]") +
  ggtitle("Techvidvan Michaelis-Menten kinetics") +
  geom_point(alpha = 0.5) +
  geom_line(data = mmdf, 
            aes(x = S, y = v), 
            colour = "green")

Output

3. We can see the summary of the model by using the summary() function.

summary(MM.model)

Output

4. We can also perform regression and plot it using the nls() function. Let’s give that a try.

mm.model.nls <- nls(v~Vm*S/(K+S), data=data, 
                    start = list(K=max(data$v)/2, 
                                 Vm=max(data$v)))
summary(mm.model.nls)

Output

Summary

In this chapter of the TechVidvan’s R tutorial series, we learned about non-linear regression in R. We studied what non-linear regression is and what different types of regression models are considered to be non-linear. Then we looked at the maximum likelihood estimation method. We further learned about logistic regression, Michaelis-Menten regression, and generalized additive models. Finally, We also studied how to transform non-linear models into linear models and why we may want to do so. Finally, we learned how to implement a non-linear regression model in R.

Do not forget to share your Google rating if you liked the article.

Exit mobile version