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)。
添加回答
舉報