对于在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来进行计算?
非常感谢您的帮助, 亚历克斯