У меня есть три массива, а именно x,y
и y_sigma
, каждый из которых содержит 3 точки данных. y_sigma
являются абсолютными сигмами, полученными из измерений, и я использовал python Curvefit для подгонки этих трех точек.
x = np.array([2005.3877, 2005.4616, 2017.3959])
y = np.array([631137.78043004, 631137.88309611, 631138.12697976])
y_sigma = np.array([1.12781053, 1.1152334 , 0.31252557])
def linear(x,m,c):
return m*x + c
popt, pcov = curve_fit(linear, x, y, sigma=y_sigma, absolute_sigma = True)
print ('Best fit line =', popt[0])
print ('Uncertainty on line =', np.sqrt(pcov[0, 0]))
Best fit line = 0.0246132542120004
Uncertainty on line = 0.07066734926776239
Если я выполняю статистику чи c, я получаю:
chi = (y - linear(x, *popt)) / y_sigma
chi2 = (chi ** 2).sum()
dof = len(x) - len(popt)
chi2: 0.004042667706414678
dof: 1
chi2 очень мала, но неопределенность сравнительно больше. Я немного прочитал и понял, что стандартным подходом к оценке ошибок является установка Delta chi^2=1
. Но если у вас есть chi ^ 2 из << 1 (как в моем примере) на степень свободы, и вы используете стандартный подход, то в итоге вы получите предполагаемые ошибки в одну сигма, которые хорошо подходят. Поэтому я думаю, что я хочу сделать, это установить ошибки на основе chi ^ 2 = 2, так как у меня есть одна степень свободы, а затем go до 1 + 1. </p>
По сути, то, что я хочу чтобы сделать, это заморозить параметр, скажем, c (перехват) и подобрать функцию с b таким образом, чтобы хи-квадрат statisti c дал мне значение, близкое к 2, а не 1!