R语言 此优化算法将使用哪种方法?

insrf1ej  于 2022-12-20  发布在  其他
关注(0)|答案(2)|浏览(160)

如果我使用内置函数optim而不声明method=,那么这个算法将使用哪种方法?

set.seed(93420)                         # Creating random data
x <- rnorm(500)
y <- rnorm(500) + 0.7 * x
data <- data.frame(x, y)
head(data)                              # Print head of data
#             x           y
# 1 -0.21492991 -0.06814474
# 2 -0.02217756 -0.84956484
# 3  0.55175788  0.11247758
# 4 -0.33581492 -0.86346317
# 5 -0.02489514  0.44307381
# 6 -1.44784931 -2.49701457

my_function <- function(data, par) {    # Own function for residual sum of squares
  with(data, sum((par[1] + par[2] * x - y)^2))
}
optim_output <- optim(par = c(0, 1),    # Applying optim
                      fn = my_function,
                      data = data)
nbnkbykc

nbnkbykc1#

如果对函数有疑问,请参阅文档?optim

    • 参数**

method:要使用的方法。参见"详细信息"。可以缩写。

    • 详细信息**

默认情况下,optim执行最小化,但如果control $fnscale为负,它将执行最大化。optimHess是一个辅助函数,用于在稍后阶段忘记hessian = TRUE时计算Hessian。
默认方法是Nelder和Mead(1965)的一种实现,只使用函数值,健壮但相对较慢,对于不可微的函数也能很好地工作。

ni65a41a

ni65a41a2#

使用args,我们可以看到optim提供了五个方法参数。

args(optim)
# function (par, fn, gr = NULL, ..., method = c("Nelder-Mead", 
#     "BFGS", "CG", "L-BFGS-B", "SANN", "Brent"), lower = -Inf, 
#     upper = Inf, control = list(), hessian = FALSE)

在函数代码的第一行中,使用了match.arg

method <- match.arg(method)

其中

args(match.arg)
# function (arg, choices, several.ok = FALSE)

?match.arg文档中,我们可能会看到
...默认参数匹配会将arg设置为choices,这是“除非有几个,否则长度为一。ok为TRUE”规则的例外,并返回第一个元素。
这意味着由于没有使用choices=,因此默认情况下optim使用method的第一个元素,即"Nelder-Mead"

相关问题