R使用特定的bin计算非线性最小二乘

时间:2018-11-29 00:50:07

标签: r non-linear-regression

对于在R中遇到的我无法理解的问题,我将非常感谢您的帮助。创建数据的直方图后,我尝试使用非线性最小二乘算法拟合数据。我希望从NLS计算中排除直方图的第一个bin。

我的数据呈指数衰减。我计算出这些数据的直方图,并使用NLS对其拟合曲线,没问题:

density=(0.4805447471,0.3025291829,0.1128404669,0.0447470817,0.0243190661,0.0136186770,0.0058365759,0.0077821012,0.0048638132,0.0009727626,0.0009727626,0.0000000000,0.0000000000,0.0009727626)
breaks=(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14)

model=nls(density~a*exp(-b*breaks),start=list(a=y0,b=k))

但是,由于数据收集方法的性质,直方图的第一个bin可能会被欠采样。因此,我想忽略第一个bin来计算我的非线性最小二乘模型。为此,我在没有第一个bin的情况下制作了新的x / y变量:

new_density=density[-1]
new_breaks=breaks[-1]

现在,当如上所述运行NLS时,出现此错误:

  

1:在lhs-rhs中:         较长的物体长度不是较短的物体长度的倍数       2:在.swts *(lhs-rhs)中:         较长的物体长度不是较短的物体长度的倍数       3:在.swts * attr(rhs,“ gradient”)中:         较长的物体长度不是较短的物体长度的倍数       执行停止

我知道new_density和new_breaks确实具有不同的长度(分别为13和14),但是对于不会引起此错误的原始密度和断裂(分别为14和15)来说,这是相同的。

据我所知,密度,断裂,new_density和new_breaks都是数字向量。使密度/断裂长度相同会导致以下错误:

  

numericalDeriv(form [[3L]],names(ind),env)中的错误:         评估模型时缺少值或产生无穷大       调用:nls ...->分配->分配-> getRHS-> numericDeriv       执行停止

我可以移开第二个垃圾箱,然后毫无问题地进行拟合。

谁能阐明NLS为什么需要我的数据的第一个bin进行计算,以及我如何忽略第一个bin来进行计算?

非常感谢您的帮助, 亚历克斯

0 个答案:

没有答案