在nls中处理0错误 - R脚本

时间:2011-08-20 18:15:55

标签: r nls nonlinear-functions

有没有办法让我的nls在非线性拟合时有0个残差?在我的数据中有一些情况,其中拟合应该有0错误,但是nls总是失败并且发出错误。

任何人都可以告诉我:

  1. 如何测试这是否是由nls吐出的错误?
  2. 如何允许0个错误案例? (完美契合)
  3. 这是我的nls电话:

    fit <- nls(y ~ ifelse(g, m1 * (x - x0) + y0, m2 * (x - x0) + y0),
                start = c(m1 = -1, m2 = 1, y0 = 0, x0 = split),
                algorithm = "port",
                lower = c(m1 = -Inf, m2 = -Inf, y0 = -Inf, x0 = split),
                upper = c(m1 = Inf, m2 = Inf, y0 = Inf, x0 = (split+1)),
                data=data.frame(x,y))
    

1 个答案:

答案 0 :(得分:5)

在前一个答案中,?nls 显式声明您不应将nls用于0错误数据。要直接引用您正在使用的功能的帮助文件:

  

不要在人工“零残留”数据上使用nls。

     

nls函数使用相对偏移收敛标准   比较当前参数估计值的数值不精确度   到剩余的平方和。这对表格

的数据表现良好      

y = f(x,θ)+ eps

     

(var(eps)> 0)。它无法表明数据收敛   形式

     

y = f(x,θ)

     

因为该标准相当于比较了两个组成部分   舍入错误。如果您想测试人工数据,请添加   噪声成分,如下例所示。

一个有潜在危险的选择是使用warnOnly = TRUE强制nls在收敛前返回并仅发出警告(无错误):

x <- -(1:100)/10
y <- 100 + 10 * exp(x / 2)
nlmod <- nls(y ~  Const + A * exp(B * x),control = nls.control(warnOnly = TRUE))

以上示例也几乎直接来自?nls