2015-06-20 374 views
0

我在一些真实数据测试中遇到过这个nls奇异矩阵问题,也试过nlsLM,但我总是得到相同的错误。一些现有的解决方案在stackoverflow说初始参数不够理想。然后我创建了一个添加了噪音的测试数据集。然后我输入了开始的确切参数,但仍然有相同的错误。有人可以看看,这有什么问题?nlsModel中的误差:初始参数估计中的奇异梯度矩阵

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)) 

在此先感谢!

+0

我能得到一个很好的契合'MOD1 < - 流明(Y〜聚(X,2,生= TRUE ));行(x,predict(mod1),col =“red”)'。我并不感到惊讶的是,优化器遇到了四参数函数的问题。 – Roland

回答

1

主要问题是模型规范。对于固定的ban的任何组合,其中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