2014-09-18 3 views
2

Я хочу подгонять гистограммы с перекосом гауссовского. Беру свои данные из текстового файла:Установка гистограммы с перекосом гауссовского

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

, а затем построить их в виде гистограммы:

plt.hist(rate, bins= 128) 

Эта гистограмма имеет искаженную форму гауссова, что я хотел бы, чтобы соответствовать. Я могу сделать это с простым гауссовым, потому что scipy имеет включенную функцию, но не с перекосом. Как я могу продолжить?

Возможно, хорошее испытание пригодности было бы лучшим.

+0

Что вы подразумеваете под искаженным гауссовым? Гауссовское распределение, по определению, не искажено. –

+0

@WilliamZhang, http://en.wikipedia.org/wiki/Skew_normal_distribution. Это более общий случай. –

+0

Как указано на странице Wiki, на которую вы указали, нет никакого решения закрытой формы для оценки максимального правдоподобия. То, что вы могли бы попробовать, это совпадение первых трех моментов или эквивалентное значение, дисперсия и асимметрия, поскольку в этом распределении есть три неизвестных параметра. –

ответ

2

Возможно, вы нашли lmfit (http://lmfit.github.io/lmfit-py/). Это модель наклонного 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) 

Это сообщит значения и неопределенности для параметров амплитуды, центр, сигма (для нормальной гауссовой) и гамма, асимметрию фактор.