numpy 对数正态分布的直方图叠加图[重复]

nimxete2  于 11个月前  发布在  其他
关注(0)|答案(1)|浏览(83)

此问题在此处已有答案

Scipy lognorm fitting to histogram(1个答案)
Scaling and fitting to a log-normal distribution using a logarithmic axis(3个答案)
Scaling the fitted PDF of a log-normal distribution to the histogram(1个答案)
21天前关闭
我想检查我的数据的拟合度,我怀疑数据是对数正态分布的,使用直方图并将对数正态PDF作为一条线覆盖。我从数据中估计对数正态参数并生成n=1000个数据点(与数据相同的数字)。data_list是一个包含1000个整数数据点的列表。

import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import lognorm

...
data = np.array(data_list)

plt.hist(data, bins=32, density=True, alpha=0.6, color='g', label='Data')

sigma, _, mu = lognorm.fit(np.log(data), floc=0)
x = np.linspace(min(data), max(data), 1000)
lognormal_data = lognorm.pdf(x, sigma, scale=np.exp(mu))

plt.plot(x, lognormal_data, 'r-', lw=2, label='Lognormal Distribution')
plt.xlabel('X-axis Label')
plt.ylabel('Y-axis Label')
plt.legend()
plt.title('Histogram Overlay with Lognormal Distribution')
plt.grid(True)

plt.show()

字符串
但是,结果图如下:

看起来对数正态分布的初始参数偏离了,因为它与数据不一致。此外,曲线看起来比对数正态分布更正常。有人看到我在这里做错了吗?>

vmjh9lq9

vmjh9lq91#

我不是统计学家,但如果你怀疑data有对数正态分布,你不应该试着拟合data而不是np.log(data)吗?
fit方法的文档声明它返回以下内容:
任何形状参数的估计值(如适用),然后是位置和尺度的估计值。
相同的文档指出,lognorm.pdf具有以下签名:pdf(x, s, loc=0, scale=1)
因此,我将尝试以下做法:

import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import lognorm

data = np.random.lognormal(mean=1, sigma=0.2, size=1000)
plt.hist(data, bins=50, density=True, alpha=0.6, color='g', label='Data')

s, loc, scale = lognorm.fit(data)
x = np.linspace(min(data), max(data), 1000)
lognormal_data = lognorm.pdf(x, s, loc=loc, scale=scale)

plt.plot(x, lognormal_data, 'r-', lw=2, label='Lognormal Distribution')
plt.xlabel('X-axis Label')
plt.ylabel('Y-axis Label')
plt.legend()
plt.title('Histogram Overlay with Lognormal Distribution')
plt.grid(True)

plt.show()

字符串
输出量:


的数据

相关问题