Как использовать функцию 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