2017-06-14 89 views
2

我想在Python中擬合對數正態分佈。我的問題是,爲什麼我應該使用scipy.lognormal.fit,而不是僅僅做了以下內容:如何擬合對數正態分佈

from numpy import log 
mu = log(data).mean() 
sigma = log(data).std() 

這給MLE mu和sigma的,這樣的分佈是對數正態分佈(MU,SIGMA ** 2)?

另外,一旦我得到畝和西格瑪我怎麼能得到一個scipy對象的分佈對數正態(畝,西格瑪** 2)?傳遞給scipy.stats.lognorm的參數對我來說不清楚。

感謝

回答

1

WRT配件,你可以使用scipy.lognormal.fit,你可以使用scipy.normal.fit應用於日誌(X),你可以做你剛纔寫的,我相信你應該得到幾乎相同的結果。

我只能說,你必須適合兩個參數(mu,sigma),所以你必須匹配兩個值。有些人可能更喜歡匹配峯值,而不是去尋找mean/stddev,從而得到mode/stddev的(mu,sigma)。

WRT使用lognorm與已知的平均值和STDDEV

from scipy.stats import lognorm 

stddev = 0.859455801705594 
mean = 0.418749176686875 

dist=lognorm([stddev],loc=mean) # will give you a lognorm distribution object with the mean and standard deviation you specify. 

# You can then get the pdf or cdf like this: 

import numpy as np 
import pylab as pl 
x=np.linspace(0,6,200) 
pl.plot(x,dist.pdf(x)) 
pl.plot(x,dist.cdf(x)) 

pl.show() 

enter image description here