[英]Fitting a histogram with skewed gaussian
我想用傾斜的高斯擬合直方圖。 我從文本文件中獲取數據:
rate, err = loadtxt('hist.dat', unpack = True)
然后將它們繪制為直方圖:
plt.hist(rate, bins= 128)
這個直方圖有一個偏斜的高斯形狀,我想適合。 我可以用簡單的 gaussian 來完成,因為scipy
包含了該功能,但沒有傾斜。 我該如何繼續?
可能返回的擬合優度測試是最好的。
您可能會發現 lmfit ( http://lmfit.github.io/lmfit-py/ ) 很有用。 這有一個內置的傾斜高斯模型。你的問題可能很簡單
from lmfit.models import SkewedGaussianModel
xvals, yvals = read_your_histogram()
model = SkewedGaussianModel()
# set initial parameter values
params = model.make_params(amplitude=10, center=0, sigma=1, gamma=0)
# adjust parameters to best fit data.
result = model.fit(yvals, params, x=xvals)
print(result.fit_report())
pylab.plot(xvals, yvals)
pylab.plot(xvals, result.best_fit)
這將報告參數幅度、中心、西格瑪(對於正常高斯)和伽瑪(偏度因子)的值和不確定性。
使用 scipy.stats.skewnorm 的 .fit() 方法有幾個答案,但該方法不允許初始參數並且不可靠。 這個 lmfit 包更好,但我要補充一點,非零基線可能仍然會拋棄它。 為了讓它在我的特定數據集上工作,我首先使用 scipy.optimize.curve_fit 和一個普通的高斯,這是獲得基線的最快方法,然后減去它並用 lmfit 重新擬合以獲得偏斜。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.