我试图使用nls
中的函数r
使指数模型适合一些预先计算的数据。
但是,nls无法拟合计算出的并完全适合我的模型的数据,尽管它可以处理稍有偏差的数据。
现在我在想,如果我做错了事...
以下是无法正常工作的示例代码:
times <- c(0,10,20,30,40,50,60)
A3 <- data.frame(time=times, intensity=c(0))
# calculating some optimal data:
A3$intensity <- 200*exp(-0.022*A3$time)
# do the fitting:
nls(data=A3, formula=intensity~200*exp(b * time), start=c(b=-0.022))
如您所见,我正在将用于计算数据的完全相同的公式传递给nls。另外,我将确切的系数传递给nls。仍然无法将数据拟合到模型中……但是相反,它告诉我已超过了迭代次数(即50)。
但是,如果我操纵数据以使强度稍微降低,它就会突然起作用。
A3p1 <- A3
#increasing the intensities by 1
A3p1$intensity <- A3p1$intensity + 1
nls(data=A3p1, formula=intensity~200*exp(b * time), start=c(b=-0.022))
在这种情况下,它可以正常工作,甚至返回足够接近的系数:-0.02167
任何人都可以解释一下我,为什么会发生这种情况,以及我需要如何调整代码以获得正确的结果?