Вычисление ошибок в python Curfit / Polyfit, установив его на основе Chi ^ 2 = 2 - PullRequest
0 голосов
/ 02 февраля 2020

У меня есть три массива, а именно 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!

...