R nls гауссовская подгонка "матрица сингулярного градиента при начальных оценках параметров"
Я попытался согласовать свои данные с гауссовой кривой, используя 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 ответ
Решение
Сначала, пожалуйста, используйте set.seed
сделать ваш пример воспроизводимым. Во-вторых, я думаю, что вы имели в виду dnorm(x, 0.4, 2)
и не dnorm(x-0.4, 2)
, Они не одинаковы, так как в случае х-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