Я пытаюсь установить гистограмму с некоторыми данными в ней с помощью scipy.optimize.curve_fit
. Если я хочу добавить ошибку в y
, я могу просто сделать это, применив weight
к подгонке. Но как применить ошибку в x
(то есть ошибку из-за биннинга в случае гистограмм)?
Мой вопрос также относится к ошибкам в x
при линейной регрессии с curve_fit
или polyfit
; Я знаю, как добавлять ошибки в y
, но не в x
.
Вот пример (частично из matplotlib documentation):
import numpy as np
import pylab as P
from scipy.optimize import curve_fit
# create the data histogram
mu, sigma = 200, 25
x = mu + sigma*P.randn(10000)
# define fit function
def gauss(x, *p):
A, mu, sigma = p
return A*np.exp(-(x-mu)**2/(2*sigma**2))
# the histogram of the data
n, bins, patches = P.hist(x, 50, histtype='step')
sigma_n = np.sqrt(n) # Adding Poisson errors in y
bin_centres = (bins[:-1] + bins[1:])/2
sigma_x = (bins[1] - bins[0])/np.sqrt(12) # Binning error in x
P.setp(patches, 'facecolor', 'g', 'alpha', 0.75)
# fitting and plotting
p0 = [700, 200, 25]
popt, pcov = curve_fit(gauss, bin_centres, n, p0=p0, sigma=sigma_n, absolute_sigma=True)
x = np.arange(100, 300, 0.5)
fit = gauss(x, *popt)
P.plot(x, fit, 'r--')
Теперь эта подгонка (когда она не сбой) рассматривает y-ошибки sigma_n
, но я не нашел способ сделать это рассмотрением sigma_x
. Я просмотрел пару потоков в scipy списке рассылки и узнал, как использовать значение absolute_sigma
и сообщение в Stackoverflow о асимметричных ошибках, но ничего об ошибках в в обоих направлениях. Можно ли достичь?