SciPy 的 `lognorm.pdf` 和 `lognorm.rvs` 参数似乎不兼容

问题描述 投票:0回答:1

我可能犯了一个愚蠢的错误,但重现方法如下:

  1. 根据对数正态分布生成随机变量
  2. 将对数正态分布拟合到合成数据
  3. 使用拟合参数计算概率分布函数
  4. 绘制与 PDF 重叠的合成变量的直方图
  5. 他们不匹配!
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-")

python scipy distribution scipy.stats
1个回答
0
投票

我不认为问题出在

scipy.stats
。用
matplotlib
绘图,我看到很好的一致性:

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

mu = 25
samples = lognorm.rvs(s=1, loc=0, scale=np.log(mu), size=10000)
shape, loc, scale = lognorm.fit(samples)

fig, ax = plt.subplots()
ax.set_xscale('log')
bins = np.logspace(-2, 2)
ax.hist(samples, bins=bins, density=True)
xs = np.logspace(-2, 2, 10000)
ys = lognorm.pdf(xs, s=shape, loc=loc, scale=scale)
ax.plot(xs, ys, "r-")

© www.soinside.com 2019 - 2024. All rights reserved.