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