我想用偏斜的高斯拟合直方图。 我从文本文件中获取数据:
rate, err = loadtxt('hist.dat', unpack = True)
然后将它们绘制为直方图:
plt.hist(rate, bins= 128)
这个直方图有一个偏斜的高斯形状,我想要适合。
我可以用一个简单的高斯来做,因为scipy
包含了函数,但没有偏斜。我该怎么办?
可能,返回的优度测试将是最好的。
答案 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 重新拟合以获得偏斜。