非线性回归故障排除

时间:2019-04-25 19:58:50

标签: r nls non-linear-regression

以下是我的数据集中的一部分:相对频率和大小。从空心圆可以看出,这是高斯分布。我在R中使用nls包来拟合非线性曲线。 我的方程是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))

但是,我被抛出错误

  

numericalDeriv(form [[3L]],names(ind),env)中的错误:   评估模型时缺少值或产生无穷大

这可能是因为我的初始值很差。不过,其他一些问题也必须解决。感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

据我所知,您唯一的问题是在参数列表中包含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)))
  

numericalDeriv(form [[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