非线性回归

机器算法验证 r 回归 非线性回归 错误信息
2022-04-12 06:19:04

我有一些的功能,以的形式,其中是已知的。的形式重写(近似值)它们,其中是任意的。xdxdlog(x)da/(1+bxc)abc

我不认为有使得两条曲线完全匹配,所以我认为可能尝试拟合非线性回归并找到最接近我尝试了以下 R 代码,我得到了奇异梯度错误。abcabc

x     = seq(1, 50000, by=1000)
y     = 50*sqrt(x)
model = nls(y ~ a/(1 + b*x^c), start=list(a=1, b=-0.01, c=0.01))
1个回答

你有几个问题。如果您重新参数化您的拟合函数,则最容易看到最大的问题

y=a/(1+bxc)

y=1/(1a+baxc)

=1/(a1+b1xc)

(这给出了相同的模型拟合,只是某些参数与您对模型的表达不同)


现在让我们看看你的数据:

y=50x12

=1/(150x12)

=1/(0+150x12)

也就是说, ,您的模型完全适合您的数据a1=0b1=150c=12

因此,将其恢复为您尝试拟合的原始形式,b/a=150a=50b1/a=0

所以三个问题:

有一个山脊a=50b

(ii)越大,拟合越好(误差平方和将被最小化为aa

(iii) 作为,拟合中没有错误。这给拟合算法带来了一些困难——它不能很好地终止,但如果你解决了前两个问题,它仍然可以找到拟合。(如果您在前两个问题解决后打开,并从合理的位置开始,它确实会找到我提到的参数值 -是迹线为 SSE、b1 和 c 提供的值。如果您使用收敛标准,您也许可以将结果存储在.)atrace=TRUE1.662634e-22 : 0.02 -0.50model

(好吧,亚历克西斯正确地指出你的起始值不好,所以也许这是四个问题。)