有什么方法可以让我的 nls 在进行非线性拟合时具有 0 残差误差吗?我的数据中有一些情况,其中拟合应该有 0 错误,但 nls 总是失败并吐出错误。
谁能告诉我:
- 如何测试这是否是 nls 吐出的错误?
- 如何允许 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))
As 提及 https://stackoverflow.com/questions/7127940/r-script-nls-not-working/7128102#7128102在之前的回答中,?nls
明确指出你不应该使用nls
对于 0 错误数据。要直接引用您正在使用的函数的帮助文件:
不要对人工“零残差”数据使用 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
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)