我已经在stackoverflow中看到了几个有关如何适合的问题log-normal distribution
。我仍然需要知道两个澄清。
我有一个样本数据,其对数遵循正态分布。因此,我可以用拟合数据scipy.stats.lognorm.fit
(即log-normal distribution
)
拟合效果很好,并且还给了我标准偏差。这是我的代码片段及其结果。
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
From the image you can clearly see that the mean is around 14.2, but what I get is 1.15??!!
为什么会这样呢? clearly the log(mean) is also not near 14.2!!
但是您可以从我上面的代码中看到,我获得的拟合度是使用the sample = log(data)
,它似乎也很合适。但是当我尝试
sample = data
pdf_fitted = stats.lognorm.pdf(x_fit,scatter,loc,np.log10(mean))
适合似乎不起作用。
1)为什么平均值不是14.2?
2)如何绘制显示1 sigma置信区域的填充/垂直线?
你说
我有一个样本数据,其对数遵循正态分布。
假设data
是包含样本的数组。要使用将该数据拟合为对数正态分布scipy.stats.lognorm
,请使用:
s, loc, scale = stats.lognorm.fit(data, floc=0)
现在假设mu和sigma是基础正态分布的均值和标准差。要从此拟合中获得这些值的估计值,请使用:
estimated_mu = np.log(scale)
estimated_sigma = s
(这些不是对中样本的均值和标准差的估计data
。有关对数正态分布的均值和方差,以mu和sigma表示,请参见Wikipedia页面。)
要将直方图和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 。
logdata = np.log(data)
plt.hist(logdata, bins=40, normed=True, color='c', alpha=0.75)
xmin = logdata.min()
xmax = logdata.max()
x = np.linspace(xmin, xmax, 100)
pdf = stats.norm.pdf(x, loc=estimated_mu, scale=estimated_sigma)
plt.plot(x, pdf, 'k')
顺便说一句,拟合的替代方法stats.lognorm
是log(data)
使用stats.norm.fit
:
logdata = np.log(data)
estimated_mu, estimated_sigma = stats.norm.fit(logdata)
相关问题:
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句