错误适合使用nls功能

时间:2017-07-19 21:37:50

标签: r curve-fitting exponential nls model-fitting

当我尝试拟合指数衰减并且我的x轴具有十进制数时,拟合永远不会正确。以下是我的数据:

exp.decay = data.frame(time,counts)
   time counts
1   0.4   4458
2   0.6   2446
3   0.8   1327
4   1.0    814
5   1.2    549
6   1.4    401
7   1.6    266
8   1.8    182
9   2.0    140
10  2.2    109
11  2.4     83
12  2.6     78
13  2.8     57
14  3.0     50
15  3.2     31
16  3.4     22
17  3.6     23
18  3.8     20
19  4.0     19
20  4.2      9
21  4.4      7
22  4.6      4
23  4.8      6
24  5.0      4
25  5.2      6
26  5.4      2
27  5.6      7
28  5.8      2
29  6.0      0
30  6.2      3
31  6.4      1
32  6.6      1
33  6.8      2
34  7.0      1
35  7.2      2
36  7.4      1
37  7.6      1
38  7.8      0
39  8.0      0
40  8.2      0
41  8.4      0
42  8.6      1
43  8.8      0
44  9.0      0
45  9.2      0
46  9.4      1
47  9.6      0
48  9.8      0
49 10.0      1

fit.one.exp <- nls(counts ~ A*exp(-k*time),data=exp.decay, start=c(A=max(counts),k=0.1))
plot(exp.decay, col='darkblue',xlab = 'Track Duration (seconds)',ylab = 'Number of Particles', main = 'Exponential Fit')
lines(predict(fit.one.exp), col = 'red', lty=2, lwd=2) 

我总是觉得这很奇怪。在我看来,拟合无法识别正确的x轴,因为当我使用不同的数据集时,x轴(时间)只有整数才能正常工作!我不明白为什么不同的单位会有所不同。

enter image description here

1 个答案:

答案 0 :(得分:2)

您需要进行一次小修改:

  function count_up(obj) {
    var len = obj.value.length;
    $("span#numbers").text(len);
  };

应该是

lines(predict(fit.one.exp), col = 'red', lty=2, lwd=2)

这样您就可以确保在横坐标上绘制所需的值。

我测试了这样:

lines(exp.decay$time, predict(fit.one.exp), col = 'red', lty=2, lwd=2)

给出了以下输出:

enter image description here

正如您所看到的,拟合非常好地描述了实际数据,这只是绘制正确的横坐标值的问题。