python中的对数正态分布

python中的对数正态分布,python,statistics,scipy,Python,Statistics,Scipy,我在stackoverflow中看到了几个关于如何拟合对数正态分布的问题。我仍然需要知道两个澄清 我有一个样本数据,它的对数服从正态分布。因此,我可以使用scipy.stats.lognorm.fit(即对数正态分布)来拟合数据 拟合效果很好,也给出了标准偏差。这是我的一段代码和结果 sample = np.log10(data) #taking the log10 of the data scatter,loc,mean = stats.lognorm.fit(sample) #Gives

我在stackoverflow中看到了几个关于如何拟合
对数正态分布的问题。我仍然需要知道两个澄清

我有一个样本数据,它的对数服从正态分布。因此,我可以使用
scipy.stats.lognorm.fit
(即
对数正态分布
)来拟合数据

拟合效果很好,也给出了标准偏差。这是我的一段代码和结果

sample = np.log10(data) #taking the log10 of the data

scatter,loc,mean = stats.lognorm.fit(sample) #Gives the paramters of the fit 

x_fit = np.linspace(13.0,15.0,100)
pdf_fitted = stats.lognorm.pdf(x_fit,scatter,loc,mean) #Gives the PDF

print "scatter for data is %s" %scatter
print "mean of data is %s" %mean  
结果

scatter for data is 0.186415047243
mean for data is 1.15731050926
从图像中,您可以清楚地看到平均值约为14.2,但我得到的是1.15为什么会这样
很明显,对数(平均值)也不接近14.2

中提到,
log(平均值)
是实际平均值。

但是你可以从我上面的代码中看到,我得到的拟合是使用
sample=log(data)
进行的,它似乎也很适合。但是当我试着

sample = data
pdf_fitted = stats.lognorm.pdf(x_fit,scatter,loc,np.log10(mean))
这种方法似乎不起作用

1)为什么平均数不是14.2?

2)如何绘制填充/绘制显示1西格玛置信域的垂直线?

我有一个样本数据,它的对数服从正态分布

假设
data
是包含样本的数组。将此数据与 使用
scipy.stats.lognorm
的对数正态分布,使用:

s, loc, scale = stats.lognorm.fit(data, floc=0)
现在假设mu和sigma是 基本正态分布。以获得这些值的估计值 根据此配合,使用:

estimated_mu = np.log(scale)
estimated_sigma = s
(这些不是平均值和标准偏差的估计值
数据中的示例。有关公式,请参阅
对于对数正态分布的均值和方差,以μ和σ表示。)

要组合直方图和PDF,您可以使用,例如

import matplotlib.pyplot as plt.

plt.hist(data, bins=50, normed=True, color='c', alpha=0.75)
xmin = data.min()
xmax = data.max()
x = np.linspace(xmin, xmax, 100)
pdf = stats.lognorm.pdf(x, s, scale=scale)
plt.plot(x, pdf, 'k')
如果要查看数据日志,可以执行以下操作 下面。注:使用正态分布的PDF 在这里


顺便说一下,使用
stats.lognorm
拟合的替代方法是拟合
log(data)
使用
stats.norm.fit

logdata = np.log(data)
estimated_mu, estimated_sigma = stats.norm.fit(logdata)

相关问题:


请发布复制问题的数据子集或伪数据,以便我们测试您的示例代码。这是一个包含数据的文本文件,显示的平均值为log(mean),10.**1.15731=14。36@CTZhu谢谢你的信息!但我尝试了另一个样本,平均值是14.1,但我得到了
1.07
,其中
10**1.07
11.24
,你可能会在stats.stackexchange.com上对这个问题有更多的吸引力。你会发现那里有更多的人能回答像这样的问题。现在这是一种厚颜无耻的方式!我从未想过使用
norm.fit
日志(数据)
,效果非常好!
logdata = np.log(data)
estimated_mu, estimated_sigma = stats.norm.fit(logdata)