Как использовать функцию optim в R (примеры 2)


Вы можете использовать функцию optim в R для оптимизации общего назначения.

Эта функция использует следующий базовый синтаксис:

optim(par, fn, data, ...)

куда:

  • par : Начальные значения параметров, которые будут оптимизированы.
  • fn : функция, которая должна быть минимизирована или максимизирована
  • data : имя объекта в R, который содержит данные

В следующих примерах показано, как использовать эту функцию в следующих сценариях:

1. Найдите коэффициенты для модели линейной регрессии.

2. Найдите коэффициенты для модели квадратичной регрессии.

Давайте прыгать!

Пример 1: найти коэффициенты для модели линейной регрессии

В следующем коде показано, как использовать функцию optim() для нахождения коэффициентов для модели линейной регрессии путем минимизации остаточной суммы квадратов :

#create data frame
df <- data.frame(x=c(1, 3, 3, 5, 6, 7, 9, 12),
 y=c(4, 5, 8, 6, 9, 10, 13, 17))

#define function to minimize residual sum of squares
min_residuals <- function (data, par) {
 with (data, sum((par[1] + par[2] \* x - y)^2))
}

#find coefficients of linear regression model
optim(par=c(0, 1), fn=min_residuals, data=df)

$par
[1] 2.318592 1.162012

$value
[1] 11.15084

$counts
function gradient 
 79 NA 

$convergence
[1] 0

$message
NULL

Используя значения, возвращаемые $par , мы можем написать следующую подогнанную модель линейной регрессии:

у = 2,318 + 1,162х

Мы можем убедиться, что это правильно, используя встроенную функцию lm() в R для вычисления коэффициентов регрессии:

#find coefficients of linear regression model using lm() function
lm(y ~ x, data=df)

Call:
lm(formula = y ~ x, data = df)

Coefficients:
(Intercept) x 
 2.318 1.162

Эти значения коэффициентов совпадают с теми, которые мы рассчитали с помощью функции optim() .

Пример 2: найти коэффициенты для модели квадратичной регрессии

В следующем коде показано, как использовать функцию optim() для нахождения коэффициентов для модели квадратичной регрессии путем минимизации остаточной суммы квадратов:

#create data frame
df <- data.frame(x=c(6, 9, 12, 14, 30, 35, 40, 47, 51, 55, 60),
 y=c(14, 28, 50, 70, 89, 94, 90, 75, 59, 44, 27))

#define function to minimize residual sum of squares
min_residuals <- function (data, par) {
 with (data, sum((par[1] + par[2]\*x + par[3]\*x^2 - y)^2))
}

#find coefficients of quadratic regression model
optim(par=c(0, 0, 0), fn=min_residuals, data=df)

$par
[1] -18.261320 6.744531 -0.101201

$value
[1] 309.3412

$counts
function gradient 
 218 NA 

$convergence
[1] 0

$message
NULL

Используя значения, возвращаемые $par , мы можем написать следующую подогнанную модель квадратичной регрессии:

у = -18,261 + 6,744х – 0,101х 2

Мы можем убедиться, что это правильно, используя встроенную функцию lm() в R:

#create data frame
df <- data.frame(x=c(6, 9, 12, 14, 30, 35, 40, 47, 51, 55, 60),
 y=c(14, 28, 50, 70, 89, 94, 90, 75, 59, 44, 27))

#create a new variable for x^2
df$x2 <- df$x^2

#fit quadratic regression model
quadraticModel <- lm(y ~ x + x2, data=df)

#display coefficients of quadratic regression model
summary(quadraticModel)$coef

 Estimate Std. Error t value Pr(>|t|)
(Intercept) -18.2536400 6.185069026 -2.951243 1.839072e-02
x 6.7443581 0.485515334 13.891133 6.978849e-07
x2 -0.1011996 0.007460089 -13.565470 8.378822e-07

Эти значения коэффициентов совпадают с теми, которые мы рассчитали с помощью функции optim() .

Дополнительные ресурсы

В следующих руководствах объясняется, как выполнять другие распространенные операции в R:

Как выполнить простую линейную регрессию в R
Как выполнить множественную линейную регрессию в R
Как интерпретировать вывод регрессии в R

Замечательно! Вы успешно подписались.
Добро пожаловать обратно! Вы успешно вошли
Вы успешно подписались на кодкамп.
Срок действия вашей ссылки истек.
Ура! Проверьте свою электронную почту на наличие волшебной ссылки для входа.
Успех! Ваша платежная информация обновлена.
Ваша платежная информация не была обновлена.