热线电话:13121318867

登录
2019-03-15 阅读量: 2798
nls在一些数据子集上失败,但在其他类似的子集上没有失败

我正在尝试按年将nls函数应用于数据,因此每年都会有一个单独的nls函数。所有年份都大致相似(指数衰减),但有些年份nls()函数失败并出现“奇异梯度”误差。

工作的数据:

good_data = data.frame(y = c(8.46,6.87,5.81,6.62,5.85,5.79,4.83,4.94,4.95,5.27,5.05,5.38,5.08,3.98),

x = c(2,6,6,7,7,8,9,10,12,13,14,15,16,17))

失败的数据:

bad_data = data.frame(y = c(8.99,5.86,5.32,5.74,5.41,5.04,4.66,4.52,4.18,4.66,5.38,5.46,5.21,5.37,4.89),

x = c(2,6,6,7,7,8,9,10,11,12,13,14,15,16,17))

尝试过nls:

fit = nls(y ~ SSasymp(x, Asym, R0, lrc), data = good_data)

在我看来,这两组数据看起来非常相似。有什么方法可以诊断为什么一个失败而另一个失败?有什么我可以做的来解决它吗?

解决办法:如果通过首先进行样条曲线拟合来添加更多点,则会收敛:

sp <- with(bad_data, spline(x, y))
fit2sp <- nls(y ~ SSasymp(x, Asym, R0, lrc), data = sp)
fit2sp

赠送:

Nonlinear regression model
model: y ~ SSasymp(x, Asym, R0, lrc)
data: sp
Asym R0 lrc
5.0101 22.1915 -0.2958
residual sum-of-squares:
5.365

Number of iterations to convergence:
0
Achieved convergence tolerance:
1.442e-06

和绘图:

plot(y ~ x, bad_data)
points(y ~ x, sp, pch =
20)
fit2sp <- nls(y ~ SSasymp(x, Asym, R0, lrc), data = sp)
lines(fitted(fit2sp) ~ x, sp, col =
"red")

截图

53.7385
4
关注作者
收藏
评论(0)

发表评论

暂无数据
推荐帖子