我正在尝试使用简单的最小平方方法将一些数据拟合到自定义函数。我已经定义了自定义函数和错误函数,而且我无法找出“optim”的正确语法。
以下是一个例子:
#Create some data based on the function f(x) = x^4
Range = c(0:10)
Output = Range^4
ActualData = data.frame(Range,Output)
#Define custom function
MyFun = function(x,a)
{
x^a
}
#Define error function, which calculates the residual sum of squares
ErrFun = function(Data,x,a)
{
sum((MyFun(x,a)-Data)^2)
}
#My failed attempt at using "optim", using exponent of 3 as a starting point
optim(par = c(Output,Range,3), ErrFun, data = ActualData)
我收到以下错误:
Error in fn(par, ...) :
unused argument (data = list(Range = 0:10, Output = c(0, 1, 16, 81, 256, 625, 1296, 2401, 4096, 6561, 10000)))
我觉得这与我定义par的方式有关。我认为par应该包含优化函数将尝试搜索的参数,以便最小化ErrFun的值。但是除了“a”之外,ErrFun函数本身还传递了两个其他参数,这些参数不是要优化的(Data和x)。我不知道该怎么做,真的很感激一些帮助!