我正在尝试编写一个基本函数来添加一些最适合使用nls
. 除非数据恰好由传递给nls
. 我知道这些问题,并且这是此处报告的记录行为。
但我的问题是,无论模型准确描述的数据如何,我如何才能解决这个问题并强制绘制一条最佳拟合线?有没有办法检测数据完全匹配并绘制完美拟合曲线?我目前的狡猾的解决方案是:
#test data
x <- 1:10
y <- x^2
plot(x, y, pch=20)
# polynomial line of best fit
f <- function(x,a,b,d) {(a*x^2) + (b*x) + d}
fit <- nls(y ~ f(x,a,b,d), start = c(a=1, b=1, d=1))
co <- coef(fit)
curve(f(x, a=co[1], b=co[2], d=co[3]), add = TRUE, col="red", lwd=2)
失败并出现错误:
Error in nls(y ~ f(x, a, b, d), start = c(a = 1, b = 1, d = 1)) :
singular gradient
我应用的简单修复方法是jitter
稍微处理数据,但这似乎有点破坏性和骇人听闻。
# the above code works after doing...
y <- jitter(x^2)
有没有更好的办法?