1 回答
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()
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)。
添加回答
举报