关于统计信息:Python中的对数正态分布

您所在的位置:网站首页 python拟合对数函数 关于统计信息:Python中的对数正态分布

关于统计信息:Python中的对数正态分布

2023-08-08 01:09| 来源: 网络整理| 查看: 265

我在stackoverflow中看到了几个有关如何适合log-normal distribution的问题。 我仍然需要知道两个澄清。

我有一个样本数据,其对数遵循正态分布。 所以我可以使用scipy.stats.lognorm.fit(即log-normal distribution)拟合数据

拟合效果很好,并且还提供了标准偏差。 这是我的代码片段及其结果。

123456789sample = 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

结果

12scatter 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!!

在此帖子和此问题中,提到log(mean)是实际均值。

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

12sample = data pdf_fitted = stats.lognorm.pdf(x_fit,scatter,loc,np.log10(mean))

适合似乎不起作用。

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

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

相关讨论 请发布可重复出现问题的部分数据或伪数据,以便我们测试您的示例代码。 filehosting.org/file/details/460413/test.txt这是带有数据的文本文件 您显示的平均值是log(mean),10。** 1.15731 = 14.36 @CTZhu感谢您的信息!但是我尝试了另一个平均值为14.1的样本,但得到了10**1.07为11.24的1.07 在stats.stackexchange.com上,您可能会对此问题有更多的关注。您会在那里找到更多可以回答此类问题的人。 您不应该执行sample = np.log10(data)(除非您尝试适应某种log-log-normal分布)。只需将data赋予stats.lognormal.fit()方法即可。另外,您可能希望在对fit()的调用中使用参数floc=0。 scipy.stats中分布的loc参数是纯翻译;它通常不用于对数正态分布。 @WarrenWeckesser当我按照您的建议进行操作时,我会得到更大的stddev。我想在log10(data)中显示图形并执行拟合。 lognorm.fit不可能吗?

你说

I have a sample data, the logarithm of which follows a normal distribution.

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

1s, loc, scale = stats.lognorm.fit(data, floc=0)

现在假设mu和sigma是 基本正态分布。获取这些值的估计值 为此,请使用:

12estimated_mu = np.log(scale) estimated_sigma = s

(这些不是估计的均值和标准差 data中的样本。有关公式,请参见维基百科页面 对数正态分布的均值和方差以mu和sigma表示)。

要将直方图和PDF结合起来,可以使用例如

12345678import 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 这里。

1234567logdata = 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:

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

相关问题:

使用Scipy与Matlab拟合对数正态分布 对数正态随机数,以高值为中心 相关讨论 现在,这是一种轻松的方式! 我从没想过使用norm.fit和使用log(data)可以完美地工作!



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3