optim Function in R (Example)

 

On this page you’ll learn how to apply a general-purpose optimization using the optim function in the R programming language.

Table of contents:

So without further ado, let’s dive right in:

 

Creation of Example Data

The following data is used as basement for this R programming tutorial:

set.seed(93420)                         # Creating random data
x <- rnorm(500)
y <- rnorm(500) + 0.7 * x
data <- data.frame(x, y)
head(data)                              # Print head of data
#             x           y
# 1 -0.21492991 -0.06814474
# 2 -0.02217756 -0.84956484
# 3  0.55175788  0.11247758
# 4 -0.33581492 -0.86346317
# 5 -0.02489514  0.44307381
# 6 -1.44784931 -2.49701457

The previous output of the RStudio console shows the structure of our example data: It contains two numeric variables x and y.

 

Example: Applying optim Function in R

In this Example, I’ll explain how to use the optim function to minimize the residual sum of squares in the R programming language. First, we’ll manually create a function that computes the residual sum of squares. Please note that this function and the following R code is partly based on a tutorial that I found here.

my_function <- function(data, par) {    # Own function for residual sum of squares
  with(data, sum((par[1] + par[2] * x - y)^2))
}

Now, we can use the optim function as shown below. The par argument specifies the initial values for the parameters to be optimized over, the fn argument specifies our function, and the data argument specifies our data frame. We are storing the output of the optim function in the data object optim_output:

optim_output <- optim(par = c(0, 1),    # Applying optim
                      fn = my_function,
                      data = data)

Next, we can visualize our results in a plot. For comparison, I’m going to plot our results of the optim function side-by-side with the results of a conventional linear model provided by the lm function. If we’ve done everything correctly, the output of both functions should be the same.

First, we have to specify the settings of our plot using the par function:

par(mfrow = c(1, 2))                    # Setting plot parameters

Now, we can draw the results of the optim function on the left side of our graphic…

plot(data$x,                            # Plotting results of optim function
     data$y,
     main = "optim Function")
abline(optim_output$par[1],
       optim_output$par[2],
       col = "red")

…and the results of the lm function at the right side of our graphic:

plot(data$x,                            # Plotting results of lm function
     data$y,
     main = "lm Function")
abline(lm(y ~ x, data),
       col = "green")

 

r graph figure 1 optim function

 

Figure 1 shows the output of the previous R code: Both the optim and the lm functions returned the same result. In other words, our manual optimization using the optim function worked fine.

 

Video & Further Resources

Do you need further information on the R programming codes of this article? Then you might have a look at the following video of my YouTube channel. In the video, I’m showing the R programming codes of this tutorial:

 

The YouTube video will be added soon.

 

Furthermore, you might read the related articles of www.statisticsglobe.com:

 

In summary: This page showed how to apply the optim function in the R programming language. Don’t hesitate to let me know in the comments, in case you have additional questions.

 



Leave a Reply

Your email address will not be published. Required fields are marked *

Fill out this field
Fill out this field
Please enter a valid email address.

Menu
Top