在没有看到您的数据的情况下回答这个问题有点困难,但您的观察是典型的。
问题是拟合本身的影响,甚至是您的公式。让我用一个示例数据集来解释它。 (好吧,这将成为题外话......)
统计讲座
数据遵循函数 f(x)=x 并且所有 y 值都被高斯随机数移动。此外,数据在 x-dange [600:800] 中。
您现在可以简单地应用线性拟合 f(x)=m*x+b。根据 Gauß 的误差分布,误差为df(x)=sqrt((dm*x)²+(db)²)。因此,您可以绘制数据、线性函数和误差范围f(x) +/- df(x)
结果如下:
参数:
m = 0.981822 +/- 0.1212 (12.34%)
b = 0.974375 +/- 85.13 (8737%)
相关矩阵:
m b
m 1.000
b -0.997 1.000
你可能会注意到三件事:
- b 的误差非常大!
- x=0 时误差范围很小,但随着 x 增大。它不应该是数据所在的最小位置,即 x=700 处吗?
- m 和 b 之间的相关性为 -0.997,接近最大(绝对)值 1。
第三点可以在图中理解:如果增加斜率 m,y 偏移也会减少。两个参数非常相关,其中一个的错误会分配给另一个!
从统计数据中您可能知道,线性回归函数总是通过数据的重心 (cog)。所以,让我们移动数据以使 cog 为原点(将其移动以使 cog 在 y 轴上就足够了,但我这样做了)
结果:
m = 1.0465 +/- 0.1211 (11.57%)
b = -12.0611 +/- 7.027 (58.26%)
相关性:
m b
m 1.000
b -0.000 1.000
与第一个图相比,m 的值和误差几乎相同,但非常大的误差 ob b 现在要小得多。原因是 m 和 b 不再相关,因此(微小的)变化 m 不会给出 b 的(非常大的)变化。也很高兴看到误差幅度缩小了很多。
这是最后一张图,其中包含原始数据、第一个拟合函数和“移位数据的后移函数”:
关于你的拟合函数:
首先,有一个很大的相关性问题:b 和 c 非常相关,因为它们共同定义了振荡的相位 和 幅度。使用另一个等效的功能会很有帮助:
f(x)=a+N*sin(w*x+p)
在这里,您将相位和幅度分开。你仍然可以从拟合结果中计算出你的 c,而且我猜它的误差要好得多。
就像我的例子一样,如果数据远离 y 轴,w 的微小变化将对p 产生很大影响。所以,我建议你改变你的数据,让它的 cog 位于 y 轴上,以消除这个问题。
允许这种转变吗?
是的。您无需更改数据,只需更改坐标系即可获得更好的错误。此外,拟合函数应该描述数据,因此它应该在数据所在的范围内非常准确。在我的第一个图中,精度最高的是 y 轴,而不是数据所在的位置。
重要
您应该始终备注您应用了哪些技巧。否则,有人可能会检查你的结果并在没有技巧的情况下拟合数据,看到红色曲线而不是绿色曲线,并可能指责你作弊......