R nls高斯拟合"奇异梯度矩阵在初始参数估计"

时间:2014-07-06 21:19:28

标签: r gradient gaussian nls singular

我尝试使用nls将数据拟合为高斯曲线。 因为那不起作用,我试图做一个简单的例子来看出出了什么问题:

>x=seq(-4,4,0.1)
>y=2*dnorm(x-0.4,2)+runif( length(x) , min = -0.01, max = 0.01)
>df=data.frame(x,y)
>m <- nls(y ~ k*dnorm(x-mu,sigma), data = df, start = list(k=2,mu=0.4,sigma=2))

Error in nlsModel(formula, mf, start, wts, upper) :   singular gradient 
matrix at initial parameter estimates
> m <- nls(y ~ k*dnorm(x-mu,sigma), data = df, start == list(k=1.5,mu=0.4,sigma=2))

Error in nlsModel(formula, mf, start, wts, upper) :   singular gradient 
matrix at initial parameter estimates

为什么这不起作用?

1 个答案:

答案 0 :(得分:1)

首先,请使用set.seed使您的示例可重现。第二,我认为你的意思是dnorm(x, 0.4, 2)而不是dnorm(x-0.4, 2)。这些不同,因为在x-0.4情况下,x-0.4的平均值为2,而在另一种情况下,标准偏差为2。如果我们进行此更改,那么它可以工作:

set.seed(123)
x=seq(-4,4,0.1)
y=2*dnorm(x, 0.4, 2)+runif( length(x) , min = -0.01, max = 0.01)
df=data.frame(x,y)
nls(y ~ k*dnorm(x, mu,sigma), data = df, start = list(k=2,mu=0.4,sigma=2))

,并提供:

Nonlinear regression model
  model: y ~ k * dnorm(x, mu, sigma)
   data: df
     k     mu  sigma 
2.0034 0.3914 2.0135 
 residual sum-of-squares: 0.002434

Number of iterations to convergence: 2 
Achieved convergence tolerance: 5.377e-06