Я хочу выполнить взвешенное линейное приближение, чтобы извлечь параметры m и c в уравнении y = mx + c, используя scipy.optimize.curve_fit.
Я использовал следующий код для построения графика и подгонка моих экспериментальных данных:
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit
from scipy.stats.distributions import t
xdata = [661.657, 1173.228, 1332.492, 511.0, 1274.537]
xerror = [0.003, 0.003, 0.004, 0, 0.007]
ydata = [251.316, 443.461, 500.623, 195.048, 479.445]
yerror = [8.07, 12.52, 11.24, 7.36, 11.00]
plt.errorbar(xdata, ydata, xerr=xerror, yerr=yerror, ecolor = 'k', fmt = 'ro', markersize = 1, capsize = 1, elinewidth = 1)
##This is the function we want to fit our data
def func(xdata, m, c):
return m * xdata + c
initial_guess = [0.37, 0]
pars, pcov = curve_fit(func, xdata, ydata, sigma = yerror, p0 = initial_guess)
alpha = 0.32 #68% confidence interval = 100*(1-alpha)
n = len(xdata)
p = len(pars)
dof = max(0, n-p)
#student-t value for the dof and confidence level
tval = t.ppf(1.0-alpha/2.,dof)
for i, p,var in zip(range(n), pars, np.diag(pcov)):
sigma1 = var**0.5
print (p, "+-", sigma1*tval)
#plt.plot(xdata, ydata, 'bo')
xfit = np.linspace(0, 1400)
yfit = func(xfit, pars[0], pars[1])
plt.plot(xfit, yfit)
plt.legend(['data', 'fit'], loc = 'best')
plt.show()
Мои проблемы с этим:
Эта подгонка кривой включает только неопределенность, связанную со значениями y, но я не могу найти в описании кривой_подключения, как также включить ошибку, связанную со значениями x.
Аналогично, когда я использую plt.errorbar, он не отображает панели ошибок значения x.
Как рассчитать хи-квадрат на градус свободы для этой подгонки?