我一直试图通过
Scipy获得
lognormal分配的结果。我已经有了Mu和Sigma,所以我不需要做任何其他准备工作。如果我需要更具体(我正试图用我对数据的有限知识),我会说我正在寻找累积函数(在Scipy下的cdf)。问题是,我无法弄清楚如何做到这一点,只要平均值和标准偏差在0-1的范围内(即回答的答案应该是0-1)。我也不知道哪个方法从dist,我应该用来得到答案。我已经尝试阅读文档并查看SO,但有关的问题(如
this和
this)似乎没有提供我正在寻找的答案。
以下是我正在使用的代码示例。谢谢。
from scipy.stats import lognorm
stddev = 0.859455801705594
mean = 0.418749176686875
total = 37
dist = lognorm.cdf(total,mean,stddev)
更新:
经过一番工作和一点研究,我有点进一步。但我还是错了答案。新的代码如下。根据R和Excel,结果应该是.7434,但这显然不是发生了什么。我错过了一个逻辑缺陷吗?
dist = lognorm([1.744],loc=2.0785)
dist.cdf(25) # yields=0.96374596, expected=0.7434
更新2:
工作lognorm实现,产生正确的0.7434结果。
def lognorm(self,x,mu=0,sigma=1):
a = (math.log(x) - mu)/math.sqrt(2*sigma**2)
p = 0.5 + 0.5*math.erf(a)
return p
lognorm(25,1.744,2.0785)
> 0.7434