假设我有一个非常简单的模型,通过重复采样来测量一些数量。据我从统计数据中了解到,平均值的误差可以计算为 $u = rac{\hat\sigma}{\sqrt{n}}$ 其中$\hat\sigma = rac{\sum(x- ar{x})}{\sqrt{n-1}}$ 当采样 $n 时,这种不确定性将消失 ightarrow \infty$,但是由于仪器本身仍然存在不确定性(B 类不确定性)。通常人们假设两者可以平方相加。
如果这是通过曲线拟合来完成的怎么办?我正在尝试做这样的事情
这可以通过 scipy.optimize.curve_fit 轻松完成:
import numpy as np
from scipy.optimize import curve_fit
import matplotlib.pyplot as plt
data_length = 10000
x = np.array(range(data_length))
y = 5 * np.ones(data_length) + np.random.normal(0, 1, data_length)
u_y = 1 * np.ones(data_length)
def func(x, b):
return x*0 + b
popt, pcov = curve_fit(func, x,y, sigma=u_y, absolute_sigma=False)
# generate the plot
plt.errorbar(x, y, yerr=u_y, fmt='o')
plt.plot(x, func(x, *popt), 'r-')
plt.show()
print(popt)
print(np.sqrt(np.diag(pcov)))
结果出现错误 $ 右箭头 0$ 当 $n 时 ightarrow \infty$,因此这意味着有某种方法可以通过执行大量测量来击败仪器精度,这听起来完全不现实。此外,我发现如果我按
sigma=1e6*u_y
缩放 sigma ,popt 的误差不会受到影响,这意味着该函数中的 sigma 不会像与仪器给出的测量的不确定性相对应的那样运行。
我查了一下文档,发现我应该设置
absolute_sigma=True
。我尝试过,但似乎总是返回1/np.sqrt(data_length)
,并且数据集本身的随机性不起作用。另外,这个错误在 $n 处也会消失
ightarrow \infty$ 继续让我担心。
将仪器误差纳入曲线拟合的正确方法是什么?这里的
sigma
到底代表什么?当您有多个参数时,如何将该项包含在实际曲线拟合中?我尝试过线性问题
sampling_points = int(1e2)
x = np.linspace(0, 1, sampling_points)
y = 5 * x + np.random.normal(0, 1, sampling_points)
u_y = 1 * np.ones(sampling_points)
def func(x, a, b):
return x*a + b
popt, pcov = curve_fit(func, x,y, sigma=1*u_y, absolute_sigma=False)
print("sample points: ", sampling_points)
print("k={pop[0]:.2f}, b={pop[1]:.2f}".format(pop=popt))
print("error of k: ", np.sqrt(pcov[0,0]))
print("error of b: ", np.sqrt(pcov[1,1]))
事实证明,您可以通过增加数据点来完全消除错误
sample points: 100
k=4.74, b=0.23
error of k: 0.37312467183800596
error of b: 0.2159669523150594
和
sample points: 1000000
k=5.01, b=-0.00
error of k: 0.0034627280798220374
error of b: 0.0019992075688566534
Scipy 的曲线拟合实现了非线性最小二乘拟合。这里的 sigma 代表 y 方向的不确定性。默认情况下,X² 计算如下:
chi_sqrd = np.sum((y - f(x, *theta))**2 / sigma**2)
协方差矩阵和参数误差被计算为 hessian 矩阵的逆矩阵。这与 1/sqrt(n) 成正比。如果
sigma = True
错误将被传递到粗麻布。 (文档并没有真正指定这应该意味着什么)。两者都不是“正确的”。这是一个判断问题。
这是预期的结果。更多数据可以让我们更好地估计“真实”值,但回报会递减,因为概率分布的分辨率更高。通过足够的运行,您绝对可以获得比单次测量更高的精度。这就是进行多次测量的全部意义。
为了包含仪器不确定性,每个点的总不确定性应结合数据中的随机噪声(A 型不确定性,例如 σ_random)和仪器不确定性(B 型不确定性,例如 σ_instrument)。如果存在系统误差,则应将其作为拟合参数包含在内。智能实验设计考虑了可能的偏差。
请注意,最小二乘法并不是拟合曲线的唯一方法,并且每种方法都会产生不同的误差,因为优化函数在参数空间中的曲线不同。 (例如比较MLE)