如何在 r 中使用 optim 函数(2 个示例)
您可以使用 R 中的optim函数进行一般优化。
该函数使用以下基本语法:
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下返回的值,我们可以编写以下拟合线性回归模型:
y = 2.318 + 1.162x
我们可以通过使用 R 中内置的lm()函数计算回归系数来验证这是正确的:
#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下返回的值,我们可以编写以下拟合二次回归模型:
y = -18.261 + 6.744x – 0.101x 2
我们可以使用 R 中的内置lm()函数验证这是正确的:
#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 中执行其他常见操作: