3

有什么方法可以让我的 nls 在进行非线性拟合时具有 0 残余误差?我的数据中有一些案例,其中拟合应该有 0 错误,但 nls 总是失败并吐出错误。

谁能给我看:

  1. 我如何测试这是否是 nls 吐出的错误?
  2. 如何允许 0 个错误情况?(完美契合)

这是我的 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))
4

1 回答 1

6

如上一个答案中所述,明确?nls 指出您不应使用nls0 错误数据。要直接引用您正在使用的函数的帮助文件:

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

nls 函数使用相对偏移收敛标准,将当前参数估计的数值不精确度与残差平方和进行比较。这对表单的数据表现良好

y = f(x, θ) + eps

(var(eps)> 0)。它未能表明表格数据的收敛

y = f(x, θ)

因为该标准相当于比较舍入误差的两个分量。如果您想在人工数据上测试 nls,请添加噪声分量,如下例所示。

一个潜在的危险选项是在收敛之前使用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.

于 2011-08-20T18:33:21.027 回答