如果我使用内置函数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)
2条答案
按热度按时间nbnkbykc1#
如果对函数有疑问,请参阅文档
?optim
:method:要使用的方法。参见"详细信息"。可以缩写。
默认情况下,optim执行最小化,但如果control $fnscale为负,它将执行最大化。optimHess是一个辅助函数,用于在稍后阶段忘记hessian = TRUE时计算Hessian。
默认方法是Nelder和Mead(1965)的一种实现,只使用函数值,健壮但相对较慢,对于不可微的函数也能很好地工作。
ni65a41a2#
使用
args
,我们可以看到optim
提供了五个方法参数。在函数代码的第一行中,使用了
match.arg
,其中
在
?match.arg
文档中,我们可能会看到...默认参数匹配会将
arg
设置为choices
,这是“除非有几个,否则长度为一。ok为TRUE”规则的例外,并返回第一个元素。这意味着由于没有使用
choices=
,因此默认情况下optim
使用method
的第一个元素,即"Nelder-Mead"
。