Устранение неполадок нелинейной регрессии - PullRequest
1 голос
/ 25 апреля 2019

Ниже приводится выдержка из моего набора данных: относительная частота и размер. Как вы можете видеть из открытых кругов, это распределение Гаусса. Я использую пакет nls в R, чтобы соответствовать нелинейной кривой. Мое уравнение Gaussian

или простым текстом: c * e^(-(x - z)^2/l)

enter image description here

Вот как я сюда попал

fit <- as.formula(y~c*(exp((-(x-z)^2/l))))
preview(fit_partial, data=mydata, start=list(c=0.005, x=mydata$x_values, z=130,l=2000))

Начальные значения кажутся разумными. Поэтому я пытаюсь получить нелинейное соответствие

nls_fit <- nls(fit, data=mydata, start=list(c=0.005, x=mydata$x_values, z=130, l=2000))

Тем не менее, я выброшен с ошибкой

Ошибка в numericDeriv (форма [[3L]], имена (ind), env): Отсутствует значение или бесконечность, полученная при оценке модели

Это вероятно потому, что мои начальные значения плохие. Что-то еще должно быть проблемой, хотя. Цени любую помощь.

1 Ответ

1 голос
/ 26 апреля 2019

Насколько я могу судить, ваша единственная проблема - включить x в ваш список параметров, что сбивает с толку R (я не могу точно сказать вам, почему ... что-то об этом фактечто это на самом деле не параметр модели ...).nls(fit, data=mydata, start=pars) отлично работает для меня.

Имитация данных:

fit <- as.formula(y~c*(exp((-(x-z)^2/l))))
mydata <- data.frame(x=80:200)
pars <- list(c=0.005, z=130,l=2000)
set.seed(101)
mydata$y_det <- eval(fit[[3]],
                     env=c(pars,as.list(mydata)))
mydata$y <- rnorm(nrow(mydata),mean=mydata$y_det,sd=0.0002)
plot(y~x,data=mydata) ## check

Попробуйте оригинальную подгонку:

nls_fit <- nls(fit, data=mydata, start=c(pars,list(x=mydata$x)))

Ошибка в numericDeriv (форма [[3L]], names (ind), env): Пропущенное значение или бесконечность, полученные при оценке модели

Подходит только для параметров (не x).

nls_fit <- nls(fit, data=mydata, start=pars)
lines(mydata$x,predict(nls_fit),col=2)
coef(nls_fit)
##           c            z            l 
## 4.963097e-03 1.302308e+02 2.035007e+03 

enter image description here

...