2017-06-14 350 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