我正在嘗試按年將nls函數(shù)應(yīng)用于數(shù)據(jù),因此每年都會(huì)有一個(gè)單獨(dú)的nls函數(shù)。所有年份都大致相似(指數(shù)衰減),但有些年份nls()函數(shù)失敗并出現(xiàn)“奇異梯度”誤差。
工作的數(shù)據(jù):
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))
失敗的數(shù)據(jù):
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)
在我看來,這兩組數(shù)據(jù)看起來非常相似。有什么方法可以診斷為什么一個(gè)失敗而另一個(gè)失?。坑惺裁次铱梢宰龅膩斫鉀Q它嗎?
解決辦法:如果通過首先進(jìn)行樣條曲線擬合來添加更多點(diǎn),則會(huì)收斂:
sp <- with(bad_data, spline(x, y))
fit2sp <- nls(y ~ SSasymp(x, Asym, R0, lrc), data = sp)
fit2sp
贈(zèng)送:
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")








暫無數(shù)據(jù)