簡體   English   中英

用偏斜高斯擬合直方圖

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM