2015-02-24 84 views
7

我无法理解创建对数正态变量的基本知识,如记录here用Scipy记录正态随机变量

The log normal distribution takes on mean and variance as parameters。我想用这些参数来创建一个冻结的分布,然后得到CDF,PDF等

然而,在文档中,他们得到使用

from scipy.stats import lognorm 
s = 0.953682269606 
rv = lognorm(s) 

“S”似乎是标准的冷冻配送偏差。我尝试使用'loc'和'scale'参数而不是's',但是这会产生一个错误(s是必需的参数)。如何使用参数值'm','s'生成位置和比例的冻结分布?

回答

12

神秘解决(编辑3)

  • μ对应于ln(scale)(!)
  • σ对应于形状(s
  • loc不需要用于设置任何的σ和μ

我认为这是一个严重的问题,这是没有明确记录。我猜在用SciPy中的对数正态分布进行简单测试时,许多人都因此而下降。

这是为什么?

统计模块将locscale视为对于所有分布都相同(这不是明确写下来的,但可以在行间读取时推断)。我怀疑locx减去,结果除以scale(结果被视为新的x)。我为此进行了测试,结果证明是这样。

对数正态分布是什么意思?在对数正态分布的标准定义中,出现术语ln(x)。显然,SciPy的实现中出现了相同的术语。通过上面的考虑,这是多么locscale在最终对数:

ln((x-loc)/scale) 

通过常用对数演算,这是一样的

ln(x-loc) - ln(scale) 

在对数正态分布的规范定义该术语简单地是ln(x) - μ。比较SciPy的方法和规范方法提供了至关重要的见解:ln(scale)代表μ。然而,loc在规范定义中没有对应关系,最好留在0处。下面我进一步讨论了形状(s)为σ的事实。

证明
>>> import math 
>>> from scipy.stats import lognorm 
>>> mu = 2 
>>> sigma = 2 
>>> l = lognorm(s=sigma, loc=0, scale=math.exp(mu)) 
>>> print("mean: %.5f stddev: %.5f" % (l.mean(), l.std())) 
mean: 54.59815 stddev: 399.71719 

我使用的WolframAlpha作为参考。它为对数正态分布的均值和标准差提供分析确定的值。

http://www.wolframalpha.com/input/?i=log-normal+distribution%2C+mean%3D2%2C+sd%3D2

enter image description here

的值相匹配。

WolframAlpha以及SciPy通过评估分析术语来得出平均值和标准偏差。让我们进行了实证检验,从SciPy的分配采取了许多样品,并计算出它们的平均值和标准偏差“手动”(从整个样本集):

>>> import numpy as np 
>>> samples = l.rvs(size=2*10**7) 
>>> print("mean: %.5f stddev: %.5f" % (np.mean(samples), np.std(samples))) 
mean: 54.52148 stddev: 380.14457 

这仍然是不完美的融合,但我认为这足以证明样本符合WolframAlpha假设的相同分布,假设μ= 2和σ= 2。

而另一个小编辑:它看起来像一个搜索引擎的正确使用方法会有所帮助,我们不是第一个被这个被困:

https://stats.stackexchange.com/questions/33036/fitting-log-normal-distribution-in-r-vs-scipy http://nbviewer.ipython.org/url/xweb.geos.ed.ac.uk/~jsteven5/blog/lognormal_distributions.ipynb scipy, lognormal distribution - parameters

另一个编辑:现在我知道它是如何表现的,我意识到原则上的行为是有记录的。在the "notes" section我们可以读到:

与形状参数西格玛和尺度参数EXP(亩)

那真的很不明显(我们都无法体会到这种小句的重要性) 。我想我们无法理解这句话意味着什么的原因是注释部分中显示的分析表达式而不是包括locscale。我想这是值得一个错误报告/文档改进。

原来的答复:

事实上,形状参数主题没有寻找到的文档页面的特定分配时,详细记录。我建议在看看主要统计资料 - 上有形状参数部分:

http://docs.scipy.org/doc/scipy/reference/tutorial/stats.html#shape-parameters

看起来应该有一个lognorm.shapes属性,告诉你有关s参数是什么意思,具体。

编辑: 只有一个参数,确实:

>>> lognorm.shapes 
's' 

当比较对数正态分布(维基百科)的一般定义: enter image description here

和式由给定的scipy文档:

lognorm.pdf(x, s) = 1/(s*x*sqrt(2*pi)) * exp(-1/2*(log(x)/s)**2) 

它变成很显然s是真正的σ(sigma)。

但是,从文档来看,loc参数与μ(mu)的关系并不明显。

它可以像在ln(x-loc),这将不对应通式到μ,或者它可以是ln(x)-loc,这将确保loc和μ之间的对应关系。试试看! :)

编辑2

我已经之间进行比较什么的WolframAlpha(WA)和SciPy的说。西澳大利亚很清楚,它通常使用μ和σ(正如链接的维基百科文章中所定义的)。

>>> l = lognorm(s=2, loc=0) 
>>> print("mean: %.5f stddev: %.5f" % (l.mean(), l.std())) 
mean: 7.38906 stddev: 54.09584 

这匹配WA's output

现在,对于loc不为零,则存在不匹配。例如:

>>> l = lognorm(s=2, loc=1) 
>>> print("mean: %.5f stddev: %.5f" % (l.mean(), l.std())) 
mean: 8.38906 stddev: 54.09584 

WA gives 20.08均值和你有它的147有一个标准偏差,loc对应的对数正态分布的经典定义μ。