为了账号安全,请及时绑定邮箱和手机立即绑定

在一个图中拟合对数正态分布和正态分布

在一个图中拟合对数正态分布和正态分布

海绵宝宝撒 2023-06-20 14:42:45
为了比较它们,我必须将对数正态分布和正态分布拟合到一个图上。我能够使我的数据正常,如下图所示。我很难添加合适的对数正态分布这是我的代码:   mu, std = st.norm.fit(data)   plt.hist(data, 50, density=True, facecolor='orange', alpha=0.75)   xmin, xmax  = plt.xlim()   x = np.linspace(xmin,xmax,100)   p = st.norm.pdf(x, mu, std)   plt.plot(x, p, 'k', linewidth=1.5)   plt.show()
查看完整描述

1 回答

?
aluckdog

TA贡献1847条经验 获得超7个赞

stats.lognorm与 类似stats.norm,但使用了 3 个参数。具有 3 个参数会使分布更难拟合,并且通常loc给出初始猜测为零。没有这样的初始猜测,拟合度通常很差。请注意,除了猜测,还loc可以将固定值设置为lognorm.fit(data, floc=0)

import numpy as np

from scipy import stats as st

import matplotlib.pyplot as plt


data = 60 + (np.random.randn(50, 200)+0.2).cumsum(axis=0).ravel()


lshape, lloc, lscale = st.lognorm.fit(data, loc=0)

mu, std = st.norm.fit(data)

plt.hist(data, 50, density=True, facecolor='orange', alpha=0.75)


xmin, xmax = plt.xlim()

x = np.linspace(xmin, xmax, 500)

plt.plot(x, st.norm.pdf(x, mu, std), color='dodgerblue', linewidth=1.5, label='gaussian normal')

plt.plot(x, st.lognorm.pdf(x, lshape, loc=lloc, scale=lscale), color='limegreen', linewidth=1.5, label='lognormal')

plt.legend()

plt.autoscale(enable=True, axis='x', tight=True)

plt.show()

//img1.sycdn.imooc.com/64914a9300015f2b09830397.jpg

PS:要试用Paul H 的库,可以安装pip install paramnormal

import paramnormal


lognorm_params = paramnormal.lognormal.fit(data)

plt.plot(x, paramnormal.lognormal.from_params(lognorm_params).pdf(x))

乍一看,对于这些示例数据,它给出了与 相同的曲线(但参数化不同)st.lognorm.fit(data, loc=0)。


查看完整回答
反对 回复 2023-06-20
  • 1 回答
  • 0 关注
  • 116 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信