如何拟合对数正态分布

时间:2017-06-14 15:31:52

标签: scipy statistics distribution

我想在Python中使用对数正态分布。我的问题是为什么我应该使用scipy.lognormal.fit而不是仅仅执行以下操作:

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

给出mu和sigma的MLE,使分布对数正态(mu,sigma ** 2)?

另外,一旦我得到mu和sigma,我怎么能得到分布对数正态的scipy对象(mu,sigma ** 2)?传递给scipy.stats.lognorm的参数对我来说并不清楚。

由于

1 个答案:

答案 0 :(得分:1)

Wrt拟合,你可以使用scipy.lognormal.fit,你可以使用scipy.normal.fit应用于log(x),你可以做你刚写的东西,我相信你应该得到几乎相同的结果。< / p>

我唯一可以说的是,你必须适合两个参数(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