Ben scipy.optimize.curve_fit
kullanarak bazı verilerle bir histogram sığdırmak için çalışıyorum. y
içinde bir hata eklemek istiyorsanız, bunu weight
uygulayarak sığdırmak için bunu yapabilirim. Ancak, x
numaralı hatayı nasıl uygulayacağınız (yani, histogramlar durumunda binning nedeniyle oluşan hata)?X hatası hataları dahil olmak üzere scipy curve_fit ile doğru uydurma?
Benim sorum da curve_fit
veya polyfit
ile doğrusal bir gerileme yaparken x
hatalar için de geçerlidir; y
'da hata ekleyebileceğimi biliyorum, ancak x
'da değil. İşte
(kısmen matplotlib documentation itibaren) bir örnek:
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--')
Şimdi, bu uyum (başarısız olmaması durumunda) y-hatalarını sigma_n
düşünün, ama ben bir yolu bulamadı sigma_x
'u düşünün. Ben scipy posta listesinde parçacığı birkaç taranmış ve her iki yönde de hatalar hakkında absolute_sigma
değeri ve asymmetrical errors hakkında Stackoverflow bir yazı, başka bir şey nasıl kullanılacağını öğrendim. Ulaşmak mümkün mü?
ben curve_fit x hataları işleyebilir olmadığını biliyorum ama scipy.optimize.odr yapar yoktur. Aslında bağımlı değişken üzerinde basit en küçük kareler yerine ortogonal mesafe regresyonu yapar. –
Yorumunuz için teşekkür ederiz! Başka bir uygun işlev bulamadım (odr scipy.odr içinde, bu arada scipy.optimize.odr içinde değil). Mükemmel çalışıyor, teşekkürler! Yorumunuzu cevap olarak gönderirseniz, bunu bir çözüm olarak kabul etmekten mutluluk duyarız. :-) – Zollern
@ChristianK. Yorumunuzu cevap olarak gönderebilirsiniz ... –