我使用scipy.stats.lognormal
对我的数据进行了分配,现在我正在尝试绘制分布。我用seaborn生成了我的数据:
ax = sns.distplot(1 - clint_unique_cov_filter['Identity'], kde=False, hist=True,
norm_hist=True, fit=lognorm, bins=np.linspace(0, 1, 500))
ax.set_xlim(0, 0.1)
这让我觉得我很满意:
我需要使用此发行版的参数进行进一步分析,但首先我想验证我理解这些术语。 This post告诉我,我想进行以下转换以转换lognorm.fit
的输出以获取对数正态的标准mu和sigma参数:
shape, loc, scale = lognorm.fit(1 - clint_unique_cov_filter['Identity'])
mu = np.log(scale)
sigma = shape
但是当我尝试绘制这个时,我没有得到我期望的分布。为了仔细检查,我尝试将原始值重新粘贴到图中,但分布明显不同:
s, l, sc = lognorm.fit(1 - clint_unique_cov_filter['Identity'])
rv = lognorm(s, l, sc)
plt.plot(np.linspace(0, 0.1), rv.pdf(np.exp(np.linspace(0, 0.1))))
为什么这个分布与一个seaborn产生的分布不一样?
编辑:
阅读seaborn代码让我得到了答案:
params = lognorm.fit(1 - clint_unique_cov_filter['Identity'])
xvals = np.linspace(0, 0.1)
pdf = lambda x: lognorm.pdf(xvals, *params)
yvals = pdf(xvals)
plt.plot(xvals, yvals)
这提供了正确的情节: