查找多个系列的NLS

时间:2017-05-03 14:40:39

标签: r curve-fitting nls

我想使用70系列拟合模型/找到功能形式。我为每一个都有30个值。该图显示趋势不是线性的,因此我尝试使用NLS。 the data looks like this

不确定这是否是正确的做法。我以前没有实现过这个。我应该使用别的东西来建模吗?我收到以下错误:

  

nls中的错误(y~a * exp(b * x),start = list(a = a_start,b = b_start)):
      奇异梯度

x的值为1:30,重复70次。 Y值在0和1之间变化。我应该使用71个向量(长度为30)还是应该将它们全部收集在两列中。目前,我已将它们全部收集在两列中。

数据看起来像这样:

a_start<-0.2
b_start<-2*log(2)/a_start

1 个答案:

答案 0 :(得分:0)

问题是您的公式不是准确反映您的数据的表单。 y~a * exp(b * x)永远不会像你的数据一样,所以你会得到没有任何意义的尖锐渐变。

试试这个:

#some made up data, since none provided
x <- runif(1000) * 30
y <- -0.9 * exp(-0.5 * x) + 1.1 + rnorm(length(x), sd=0.1)

fit <- nls(y ~ a * exp(b * x) + c, start = list(a = -1, b=-.1, c=1))

plot(x,y)
lines(x[order(x)], predict(fit)[order(x)], col="red", lwd=4)

enter image description here