Jak*_* M. 27 python statistics scipy
我想使用python将对数正态分布拟合到我的数据中scipy.stats.lognormal.fit.根据手册,fit返回shape,loc,scale参数.但是,对数正态分布通常只需要两个参数:均值和标准差.
如何解释scipy fit函数的结果?如何获得mean和std.dev.
ars*_*ars 33
scipy中的分布以通用方式编码,具有两个参数位置和比例,因此location是loc使分布向左或向右移动的参数(),scale而是压缩或拉伸分布的参数.
对于两个参数对数正态分布,"mean"和"std dev"对应log(scale)和shape(你可以让loc=0).
以下说明了如何拟合对数正态分布以找到感兴趣的两个参数:
In [56]: import numpy as np
In [57]: from scipy import stats
In [58]: logsample = stats.norm.rvs(loc=10, scale=3, size=1000) # logsample ~ N(mu=10, sigma=3)
In [59]: sample = np.exp(logsample) # sample ~ lognormal(10, 3)
In [60]: shape, loc, scale = stats.lognorm.fit(sample, floc=0) # hold location to 0 while fitting
In [61]: shape, loc, scale
Out[61]: (2.9212650122639419, 0, 21318.029350592606)
In [62]: np.log(scale), shape # mu, sigma
Out[62]: (9.9673084420467362, 2.9212650122639419)
Run Code Online (Sandbox Code Playgroud)
我只是花了一些时间来解决这个问题,并希望在这里记录它:如果你想x从三个返回值lognorm.fit(让它们调用它们(shape, loc, scale))获得概率密度(点),你需要使用这个公式:
x = 1 / (shape*((x-loc)/scale)*sqrt(2*pi)) * exp(-1/2*(log((x-loc)/scale)/shape)**2) / scale
Run Code Online (Sandbox Code Playgroud)
因此,作为(loc是µ,shape是?和scale是?)的等式:

| 归档时间: |
|
| 查看次数: |
17103 次 |
| 最近记录: |