如何使标准偏差与Scipy中拟合的分布



我正在尝试适合多个分布并获得每个分布的标准偏差。但是,对于标准偏差,大量分布返回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 

beta分布的方差为:

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)

我在堆栈溢出上问了一个不同的问题,并得到了一个解决这个问题的解决方案。事实证明,我通过的参数被Scipy用不同的解释。这是答案的链接:

isInfmu-error-in-cipy-stats-当calling-std-for-exponweib

最新更新