【发布时间】:2014-07-24 08:34:07
【问题描述】:
我已经使用 NLS 来拟合激光雷达波形数据。它似乎适用于 3 或 4 个峰值。 对于(我在 1:3){ 均值
sd=runif(3,6,20)
c=runif(3,100,250)
df<-data.frame(x=seq_along(y),y)
fit<-nls(y ~(c1 * exp(-(x - mean1)**2/(2 * sigma1**2)) +
c2 * exp(-(x - mean2)**2/(2 * sigma2**2))+
c3 * exp(-(x - mean3)**2/(2 * sigma3**2))), data=df,
start=list(c1=c[1], mean1=mean[1], sigma1=sd[1],
c2=c[2], mean2=mean[2], sigma2=sd[2],
c3=c[3], mean3=mean[3], sigma3=sd[3]), algorithm="port")
但问题是每次你都要手动写下这么长的公式和参数启动。所以我想知道如何通过循环自动生成函数,然后可以通过循环生成公式=y~f(x,c,mean,sd) 和 start pars。并确保这些可以在 nls 中工作。另外希望大家能给我一些关于多峰高斯拟合的建议,我试过GPfit,GMM。
在这个网站上也和我有同样问题的人,但没有得到令人满意的答案。可以通过nls when the data is a convoluted spectra (variable number of variables)参考
【问题讨论】: