Первым аргументом любой функции, которую вы хотите оптимизировать с помощью optim
, должен быть вектор параметров, по которым optim
будет выполнять поиск. Вы назвали этот вектор par
, но затем нигде не использовали par
в своей функции. В моем примере ниже я собираюсь вызывать вектор параметров params
, чтобы не перепутать его с первым аргументом, равным optim
, и вы увидите, что он используется (т. Е. Функция потерь использует params[1]
и т. д.):
# define loss function
loss <- function(params, x, y) {
yhat <- params[1] + params[2]*x
tss <- (y - yhat)^2
return(sum(tss))
}
# generate fake data
n <- 100
x <- 1:n
w0_true <- 2
w1_true <- 3
y <- w0_true + w1_true*x + rnorm(n)
# find w0_hat and w1_hat with optim
optim(par=c(0,1), fn=loss, x=x, y=y)
# check with lm
summary(lm(y ~ x))