我正在尝试拟合多个分布并获得每个分布的标准偏差 . 然而,对于标准差,很多分布都会返回inf或Nan . 获得拟合分布方差的方法是正确的吗?有没有更好的办法?南方为什么?这就是我所做的:
param = distribution.fit(data)
arg = param[:-2]
loc = param[-2]
scale = param[-1]
if len(arg)>0:
std = np.sqrt(distribution.stats(arg, loc, scale, moments='v')[0]))
else:
std = np.sqrt(distribution.stats(loc, scale, moments='v')[0]))
我也会跳过在拟合数据时生成警告的分布 .
更新1:例如,当 distribution = scipy.stats.beta
时,我得到 [ nan nan]
,参数如下:
arg: (32.198726690922953, 15883184.284202889)
loc: -33527.5754686
scale: 35484135514.4
2 回答
Beta发行版的variance是:
所以标准差是平方根 . 要获得
a
和b
:请注意,您可以
np.std(data)
使用np.std(data)
计算数据的标准差(没有任何拟合分布) .我在Stack Overflow上问了一个不同的问题,得到了一个解决这个问题的解决方案 . 事实证明,我传递的参数被scipy解释得不同 . 这是答案的链接:
isinfmu-error-in-scipy-stats-when-calling-std-for-exponweib