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


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

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

 optim(by, fn, data, ...)

Золото:

  • by : Начальные значения параметров, подлежащих оптимизации.
  • 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)

$by
[1] 2.318592 1.162012

$value
[1] 11.15084

$counts
function gradient 
      79 NA 

$convergence
[1] 0

$message
NULL

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

у = 2,318 + 1,162x

Мы можем убедиться, что это правильно, используя встроенную функцию 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)

$by
[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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *