我在stackoverflow上看到了几个关于如何拟合对数正态分布的问题。但是我需要知道两个澄清问题。
我有一组样本数据,其对数遵循正态分布。因此,我可以使用scipy.stats.lognorm.fit(即log-normal分布)来拟合数据。
拟合效果良好,并且还给出了标准差。以下是我的代码和结果。
从图像中可以清楚地看到平均值约为14.2,但是我得到的是1.15?!为什么会这样?显然,对数(平均值)也不接近14.2!
在此帖子和此问题中提到,对数(平均值)是实际平均值。
但是从我的代码中可以看出,我得到的拟合结果使用了
我有一组样本数据,其对数遵循正态分布。因此,我可以使用scipy.stats.lognorm.fit(即log-normal分布)来拟合数据。
拟合效果良好,并且还给出了标准差。以下是我的代码和结果。
import numpy as np
from scipy import stats
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!
在此帖子和此问题中提到,对数(平均值)是实际平均值。
但是从我的代码中可以看出,我得到的拟合结果使用了
sample = log(data)
,并且似乎也很好地拟合了。然而,当我尝试...sample = data
pdf_fitted = stats.lognorm.pdf(x_fit,scatter,loc,np.log10(mean))
这个适配似乎不起作用。
1) 为什么平均值不是14.2?
2) 如何绘制填充/绘制垂直线以显示1 sigma置信区间?
1.07
,对于10**1.07
是11.24
。 - Srivatsan