以下是我的数据集中的一部分:相对频率和大小。从空心圆可以看出,这是高斯分布。我在R中使用nls
包来拟合非线性曲线。
我的方程是
或以纯文本格式:c * e^(-(x - z)^2/l)
这是我怎么来这里
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)中的错误: 评估模型时缺少值或产生无穷大
这可能是因为我的初始值很差。不过,其他一些问题也必须解决。感谢任何帮助。
答案 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