2016-09-05 11 views
1

Может кто-нибудь объяснить мне, как использовать параметр местоположения с функцией gamma.fit в Scipy?параметр определения местоположения в гамма-распределении с scipy

Мне кажется, что параметр местоположения (μ) изменяет носитель распределения от й ≥ от 0 до у = (х - μ) ≥ 0. Если μ является положительным, то мы не потерять все данные, которые не удовлетворяет x - μ ≥ 0?

Спасибо!

+0

Попробуйте. Распределение будет сдвинуто в соответствии с параметром loc без потери данных. –

ответ

3

Функция fit принимает во внимание все данные при поиске соответствия. Добавление шума к вашим данным будет изменять параметры соответствия и может дать распределение, которое не очень хорошо отражает данные. Поэтому мы должны быть немного умны, когда используем fit.

Ниже приведен код, который генерирует данные, y1, с loc=2 и scale=1 с использованием numpy. Он также добавляет шум к данным в диапазоне от 0 до 10 для создания y2. Фиксация y1 дает отличные результаты, но проблема с помехами y2 проблематична. Добавленный шум выводит распределение. Однако при установке данных мы также можем поддерживать 1 или более параметров. В этом случае мы передаем floc=2 в fit, что заставляет местоположение удерживаться на 2 при выполнении посадки, возвращая гораздо лучшие результаты.

from scipy.stats import gamma 
import numpy as np 
import matplotlib.pyplot as plt 

x = np.arange(0,10,.1) 
y1 = np.random.gamma(shape=1, scale=1, size=1000) + 2 # sets loc = 2 
y2 = np.hstack((y1, 10*np.random.rand(100))) # add noise from 0 to 10 

# fit the distributions, get the PDF distribution using the parameters 
shape1, loc1, scale1 = gamma.fit(y1) 
g1 = gamma.pdf(x=x, a=shape1, loc=loc1, scale=scale1) 

shape2, loc2, scale2 = gamma.fit(y2) 
g2 = gamma.pdf(x=x, a=shape2, loc=loc2, scale=scale2) 

# again fit the distribution, but force loc=2 
shape3, loc3, scale3 = gamma.fit(y2, floc=2) 
g3 = gamma.pdf(x=x, a=shape3, loc=loc3, scale=scale3) 

И сделать некоторые участки ...

# plot the distributions and fits. to lazy to do iteration today 
fig, axes = plt.subplots(1, 3, figsize=(13,4)) 
ax = axes[0] 
ax.hist(y1, bins=40, normed=True); 
ax.plot(x, g1, 'r-', linewidth=6, alpha=.6) 
ax.annotate(s='shape = %.3f\nloc = %.3f\nscale = %.3f' %(shape1, loc1, scale1), xy=(6,.2)) 
ax.set_title('gamma fit') 

ax = axes[1] 
ax.hist(y2, bins=40, normed=True); 
ax.plot(x, g2, 'r-', linewidth=6, alpha=.6) 
ax.annotate(s='shape = %.3f\nloc = %.3f\nscale = %.3f' %(shape2, loc2, scale2), xy=(6,.2)) 
ax.set_title('gamma fit with noise') 

ax = axes[2] 
ax.hist(y2, bins=40, normed=True); 
ax.plot(x, g3, 'r-', linewidth=6, alpha=.6) 
ax.annotate(s='shape = %.3f\nloc = %.3f\nscale = %.3f' %(shape3, loc3, scale3), xy=(6,.2)) 
ax.set_title('gamma fit w/ noise, location forced') 

enter image description here

+0

Спасибо за ответ Джеймс, после некоторых экспериментов плюс ваш поход я думаю, что понимаю это сейчас. Великие сюжеты тоже. – emac