gpt4 book ai didi

r - 使用 nls 函数错误拟合

转载 作者:行者123 更新时间:2023-12-02 01:11:15 25 4
gpt4 key购买 nike

当我尝试拟合指数衰减并且我的 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

最佳答案

你需要一个小的修改:

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)

通过这种方式,您可以确保根据横坐标上的所需值进行绘图。

我是这样测试的:

data = read.csv('exp_fit_r.csv')

A0 <- max(data$count)
k0 <- 0.1

fit <- nls(data$count ~ A*exp(-k*data$time), start=list(A=A0, k=k0), data=data)

plot(data)
lines(data$time, predict(fit), col='red')

这给了我以下输出:

enter image description here

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

关于r - 使用 nls 函数错误拟合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45201465/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com