Было довольно много сообщений о работе с дистрибутивом lognorm
со Scipy, но я все равно не понимаю его.
Параметр lognormal 2 обычно описывается параметрами \mu
и \sigma
, которые соответствуют Scipys loc=0
и \sigma=shape
, \mu=np.log(scale)
.
В scipy, lognormal distribution - parameters, мы можем прочитать, как сгенерировать образец lognorm(\mu,\sigma)
, используя экспоненту случайного распределения. Теперь попробуем что-то еще:
А)
Проблема с созданием lognorm напрямую:
# lognorm(mu=10,sigma=3)
# so shape=3, loc=0, scale=np.exp(10) ?
x=np.linspace(0.01,20,200)
sample_dist = sp.stats.lognorm.pdf(x, 3, loc=0, scale=np.exp(10))
shape, loc, scale = sp.stats.lognorm.fit(sample_dist, floc=0)
print shape, loc, scale
print np.log(scale), shape # mu and sigma
# last line: -7.63285693379 0.140259699945 # not 10 and 3
В)
Я использую возвращаемые значения подгонки для создания установленного дистрибутива. Но опять-таки я сделал что-то неправильное, по-видимому:
samp=sp.stats.lognorm(0.5,loc=0,scale=1).rvs(size=2000) # sample
param=sp.stats.lognorm.fit(samp) # fit the sample data
print param # does not coincide with shape, loc, scale above!
x=np.linspace(0,4,100)
pdf_fitted = sp.stats.lognorm.pdf(x, param[0], loc=param[1], scale=param[2]) # fitted distribution
pdf = sp.stats.lognorm.pdf(x, 0.5, loc=0, scale=1) # original distribution
plt.plot(x,pdf_fitted,'r-',x,pdf,'g-')
plt.hist(samp,bins=30,normed=True,alpha=.3)