nlsModel中的错误:初始参数估计时的奇异梯度矩阵

时间:2015-06-20 16:35:59

标签: r nls

我在一些实际数据测试中遇到过这个nls奇异矩阵问题,也尝试过nlsLM,但我总是得到同样的错误。 stackoverflow中的一些现有解决方案表明初始参数不够理想。然后我创建了一个添加了噪声的测试数据集。然后我输入了确切的参数以便开始,但仍然得到相同的错误。有人可以看看,这有什么问题吗?

library(minpack.lm)
f <- function(x,a,b,m,n) {
  m + n* b/(a^b) * (x^(b-1))
}
# test dataset
x = seq(1,100)
y= f(x,a = 1,b = 2.5,m = 0.5, n= 50)
noise = runif(100,-1000,1000) 
y = y+ noise # add noise
plot(x, y, type="l")
data = as.data.frame(cbind(x,y))
mod <- nlsLM(y ~ f(x,a,b,m,n), data = data, start=list(a = 1,b = 2.5,m = 0.5, n= 50), control = list(maxiter = 500))

提前致谢!

1 个答案:

答案 0 :(得分:1)

主要问题是型号规格。对于固定b an的任何组合,其中n* b/(a^b)相同,会产生相同的模型,从而产生奇点。修复an。在下文中,我们将a修复为1。

问题的另一个问题是该示例不可重现,因为未设置随机种子。

使用问题中的f

set.seed(123)
x <- 1:100
y <- f(x, a = 1, b = 2.5, m = 0.5, n = 50) + runif(100, -1000, 1000) 

a <- 1
mod <- nlsLM(y ~ f(x, a, b, m, n), start = list(b = 2.5, m = 0.5, n= 50))

,并提供:

> mod
Nonlinear regression model
  model: y ~ f(x, a, b, m, n)
   data: parent.frame()
      b       m       n 
  2.507 240.352  48.122 
 residual sum-of-squares: 31264921

Number of iterations to convergence: 3 
Achieved convergence tolerance: 1.49e-08