Как улучшить эту линейную подгонку (с учетом полос ошибок), чтобы сделать ее более надежной?

#python #scipy #linear-regression #data-fitting

#python #scipy #линейная регрессия #подгонка данных

Вопрос:

Я пытаюсь выполнить линейную подгонку набора мер, как определено ниже:

 def leastsq_lin_fit(x,y,yerr=[]):
    fit_func = lambda p, x: p[0] * x    p[1] 
    model=scipy.odr.Model(fit_func)
    if len(yerr)>0: data = scipy.odr.RealData(x, y, sy=yerr)
    else: data = scipy.odr.RealData(x, y)
    odr = scipy.odr.ODR(data, model, beta0=[0., 1.])
    out = odr.run()

    a=out.beta[0]
    aErr=out.sd_beta[0]
    b=out.beta[1]
    bErr=out.sd_beta[1]
  

но я заметил, что когда я анализирую yerr для процедуры подгонки, я получаю странный результат, как показано ниже:
введите описание изображения здесь

в то время как, когда я подгоняю без учета полосы ошибок моих значений y, я получаю: введите описание изображения здесь

Я не говорю, что первый результат неверен, я подозреваю, что этот результат обусловлен тем фактом, что полосы ошибок в моих данных, вероятно, слишком малы, чтобы соответствовать значимой строке (в частности, для небольших значений X). Я хотел бы понять, поскольку это данные, с которыми мне приходится работать, как я могу улучшить эту подгонку (с учетом полос ошибок), чтобы сделать ее более надежной. Как бы вы применили такое распределение к линейной функции?

Здесь вы можете загрузить файл, содержащий данные, которые я использовал для создания этих графиков, и которые могут быть загружены через:

 with open('test.np', 'rb') as f:
    xdata = np.load(f)
    ydata = np.load(f)
    yerr = np.load(f)
  

(Если есть лучший способ загрузить файл, пожалуйста, дайте мне знать).

Комментарии:

1. Почему вы используете здесь ODR вместо стандартной линейной регрессии?

2. вероятно, потому, что я «невежественный», я смотрю онлайн, например, и они использовали его. Что вы подразумеваете под «стандартной линейной регрессией»?

3. Разница между ODR и классической регрессией наименьших квадратов имеет хорошее объяснение здесь: blog.rtwilson.com/orthogonal-distance-regression-in-python