这是我的代码:
model = Fitter(data,distributions='lognorm') model.fit() print(model.summary()) model.get_best(method='sumsquare_error')
它输出:
{'lognorm': {'s': 0.8612498618921953, 'loc': 0.3175483462045392, 'scale': 0.30617261628597686}}
我想找到正确的参数插入SIMIO中的Lognormal(normalMean,normalStdDev),但我对什么是s,loc和scale感到困惑,以及如何轻松地将其更改为SIMIO所需的normalmean和normalSD
我在 wiki 上研究了对数正态分布是什么,它让我更加困惑,我尝试了代码
logsample = stats.norm.rvs(loc=0.3175483462045392, scale=0.30617261628597686, size=1000) sample = np.exp(logsample) shape, loc, scale = stats.lognorm.fit(sample, floc=0) shape, loc, scale np.log(scale), shape
但我还是不确定
如果
Y
呈对数正态分布,形状为 s
,尺度为 scale
,则 log(Y)
呈正态分布,平均值为 np.log(scale)
,标准差为 s
。 (来源:scipy.stats.lognorm
)
import numpy as np
import matplotlib.pyplot as plt
from scipy import stats
rng = np.random.default_rng(3483594639650936)
s = 0.8612498618921953,
loc = 0 # 0.3175483462045392
scale = 0.30617261628597686
lognorm = stats.lognorm(s=s, loc=loc, scale=scale)
data = lognorm.rvs(size=10000, random_state=rng)
logdata = np.log(data)
x = np.linspace(logdata.min(), logdata.max(), 300)
sigma = s
mu = np.log(scale)
norm = stats.norm(loc=mu, scale=sigma)
pdf = norm.pdf(x)
plt.hist(logdata, density=True, bins=50)
plt.plot(x, pdf)