拟合具有偏斜高斯的直方图

时间:2014-09-18 03:00:33

标签: python scipy histogram curve-fitting

我想用偏斜的高斯拟合直方图。 我从文本文件中获取数据:

rate, err = loadtxt('hist.dat', unpack = True)

然后将它们绘制为直方图:

plt.hist(rate, bins= 128)

这个直方图有一个偏斜的高斯形状,我想要适合。 我可以用一个简单的高斯来做,因为scipy包含了函数,但没有偏斜。我该怎么办?

可能,返回的优度测试将是最好的。

2 个答案:

答案 0 :(得分:3)

你可能会发现lmfit(http://lmfit.github.io/lmfit-py/)很有用。它内置了Skewed Gaussian模型。您的问题可能就像

一样简单
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) 

这将报告参数幅度,中心,西格玛(对于普通高斯)和伽玛,偏度因子的值和不确定性。

答案 1 :(得分:0)

使用 scipy.stats.skewnorm 的 .fit() 方法有几个答案,但该方法不允许初始参数并且不可靠。这个 lmfit 包更好,但我要补充一点,非零基线可能仍然会抛弃它。为了让它在我的特定数据集上工作,我首先使用 scipy.optimize.curve_fit 和一个普通的高斯,这是获得基线的最快方法,然后减去它并用 lmfit 重新拟合以获得偏斜。