如何在scipy中得到拟合分布的标准偏差?

时间:2016-12-16 17:34:33

标签: python scipy statistics data-fitting

我试图拟合多个分布并获得每个分布的标准偏差。然而,对于标准差,很多分布都会返回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 个答案:

答案 0 :(得分:0)

Beta发布的variance是:

a * b / [ (a + b)^2 * (a + b + 1) ]

因此标准偏差是其平方根。获取ab

a = scipy.stats.beta.fit(data)[0]
b = scipy.stats.beta.fit(data)[1]

请注意,您可以始终使用np.std(data)计算数据的标准偏差(没有任何适合的分布)。

答案 1 :(得分:0)

我在Stack Overflow上问了一个不同的问题,并得到了一个解决这个问题的解决方案。事实证明,我传递的参数被scipy解释得不同。以下是答案的链接:

isinfmu-error-in-scipy-stats-when-calling-std-for-exponweib