我可能犯了一个愚蠢的错误,但这里是如何复制:
1.基于对数正态分布生成随机变量
1.将对数正态分布拟合到合成数据
1.使用拟合参数计算概率分布函数
1.绘制叠加在PDF上的合成变量直方图
1.它们不匹配!
import seaborn as sns
from scipy.stats import lognorm
import numpy as np
mu = 25
samples = lognorm.rvs(s=1, loc=0, scale=np.log(mu), size=10000)
shape, loc, scale = lognorm.fit(samples)
print(shape, loc, scale)
fig, ax = plt.subplots()
sns.histplot(samples, bins=50, stat="density", log_scale=True, ax=ax)
xs = np.linspace(0.1, 100, 10000)
ys = lognorm.pdf(xs, s=shape, loc=loc, scale=scale)
ax.plot(xs, ys, "r-")
字符串
x1c 0d1x的数据
1条答案
按热度按时间o4tp2gmn1#
我不认为
scipy.stats
有问题。用matplotlib
绘图,我看到了很好的一致性:字符串
的数据
您还可以使用Seaborn绘制样本对数与相应正态分布的直方图。
型
的
我怀疑
'density'
和log_scale
之间的相互作用有一些不正确的地方,可能是我们对seaborn的理解。这并没有解决问题,但是注意到您定义了
mu=25
并将scale=np.log(mu)
传递给lognorm
。请仔细检查这是否是您针对documentation oflognorm
所要做的。假设正态分布的随机变量
X
的均值为mu
,标准差为sigma
,则Y = exp(X)
与s = sigma
和scale = exp(mu)
服从对数正态分布。