Выполнение взвешенного линейного подбора с использованием scipy.optimize.curve_fit - PullRequest
0 голосов
/ 29 февраля 2020

Я хочу выполнить взвешенное линейное приближение, чтобы извлечь параметры 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()

Мои проблемы с этим:

  1. Эта подгонка кривой включает только неопределенность, связанную со значениями y, но я не могу найти в описании кривой_подключения, как также включить ошибку, связанную со значениями x.

  2. Аналогично, когда я использую plt.errorbar, он не отображает панели ошибок значения x.

  3. Как рассчитать хи-квадрат на градус свободы для этой подгонки?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...