如何从分布拟合器输出的“s”、“loc”和“scale”值中获取对数正态分布的参数(均值、sd)?

问题描述 投票:0回答:1

这是我的代码:

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 
但我还是不确定

python numpy simulation curve-fitting distribution
1个回答
0
投票

如果

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)

© www.soinside.com 2019 - 2024. All rights reserved.