首页 文章

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

提问于
浏览
0

我正在尝试拟合多个分布并获得每个分布的标准偏差 . 然而,对于标准差,很多分布都会返回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

    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) 使用 np.std(data) 计算数据的标准差(没有任何拟合分布) .

  • 0

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

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

相关问题