我正在尝试使用nls()函数来拟合一些数据,但我不断收到错误“迭代次数超过50次”。
为了确定我是否只是做出错误的开始猜测,我在下面的代码中用“假数据”重新创建了问题。看起来最初的猜测不是问题。
我也试过设置trace = TRUE
并发现所有迭代都是一样的,所以我怀疑增加迭代次数会有效。
# test code ####
set.seed(12345)
calc_exp <- function(a, m, x, b){
y <- a - exp(m*-x + b)
return(y)
}
a_i <- 583
m_i <- 0.0025
b_i <- 3.8
noise <- 2*rnorm(800)
xs <- 1:800
data <- calc_exp(a_i, xs, m_i, b_i) + noise
plot(xs, data)
ys <- calc_exp(a_i, xs, m_i, b_i)
lines(xs, ys, col = "blue")
fit <- nls(ys~calc_exp(a, m, xs, b), start = c(a = a_i, m = m_i, b = b_i)
, trace = T)
(我认为我不能线性化该函数并使用lm()
,因为没有用于添加和减去的日志规则,并且您无法使用此处的数据创建线性对数 - 日志图<) / p>
P.S。谢谢你的帮助 - 我是堆栈溢出的新手