2
我是R的新手,遇到了一些我不明白的问题。我查找过关于R如何工作的文档或答案,但我找不到任何东西。nls每次迭代多次运行函数?
Test = data.frame(x = c(5, 10, 15, 25), y = c(5, 8, 12, 16))
fun = function(x, a, b) {
cat("a =", a, ", b =", b, "\n")
a*(x**b)
}
nls(y ~ fun(x, a, b), data = Test, start = list(a = 1.613, b = 0.718), trace = TRUE)
输出如下:
a = 1.613 , b = 0.718
a = 1.613 , b = 0.718
a = 1.613 , b = 0.718
a = 1.613 , b = 0.718
0.7964401 : 1.613 0.718
a = 1.612723 , b = 0.7177708
a = 1.612723 , b = 0.7177708
a = 1.612723 , b = 0.7177708
0.7960992 : 1.6127232 0.7177708
a = 1.612698 , b = 0.7177761
a = 1.612698 , b = 0.7177761
a = 1.612698 , b = 0.7177762
0.7960992 : 1.6126980 0.7177761
Nonlinear regression model
model: y ~ fun(x, a, b)
data: Test
a b
1.6127 0.7178
residual sum-of-squares: 0.7961
Number of iterations to convergence: 2
Achieved convergence tolerance: 1.43e-06
它说,它采取了两次迭代收敛,但它看起来像它通过函数跑了10次,只有改变的参数值的两倍。是否有一个原因?我无法找到关于nls如何计算参数猜测的解释。
我试图把600个数据点放到一个大的函数中,所以这占用了很多额外的不需要的时间。
@ alexisdebriere的回答基本上是正确的。如果您能够明确指定渐变功能(在“?nls”中搜索“渐变”),则可以避免这种情况。 –