0

由于尝试使用 scipy 的 .tstd 函数进行标准偏差计算,我在脚本中隔离了一个问题,

 sp.stats.tstd(IR)

我的IR价值在哪里0.0979。有没有办法让它停止(我假设)将它舍入为零?我已经尝试过之前 stackoverflow 帖子中的建议,该帖子建议拨打电话号码,np.float64但没有奏效。希望有人给出答案。

完整错误打印输出:

    Traceback (most recent call last):
  File "Utt_test.py", line 995, in <module>
    X.write(Averaging())
  File "Utt_test.py", line 115, in Averaging
    IR_sdev=str(round(sp.stats.tstd(IR),4))
  File "/usr/lib64/python2.7/site-packages/scipy/stats/stats.py", line 848, in tstd
    return np.sqrt(tvar(a,limits,inclusive))
  File "/usr/lib64/python2.7/site-packages/scipy/stats/stats.py", line 755, in tvar
    return a.var()*(n/(n-1.))
ZeroDivisionError: float division by zero
4

1 回答 1

0

该方法tstd计算样本方差的平方根。样本方差与总体方差的差异在于n/(n-1)使样本方差成为总体方差的无偏估计量所必需的因素。这在 n=1 时会失效,这是可以理解的,因为只有一个数字让我们不知道总体方差可能是多少。

如果不希望进行这种调整(也许您的数组总人口,而不是其中的样本),请改用numpy.std。对于大小为 1 的数组,它将按预期返回 0。如果与参数 ddof=1 一起使用,numpy.std则等效于stats.tstd.


Asie:SciPy 的文档状态

tstd 计算无偏样本标准偏差,即它使用校正因子 n / (n - 1)。

重复这个标准误差估计量是无偏的普遍误解(事实上,校正因子消除了方差的偏差,而不是标准偏差)。 NumPy 的标准文档ddof在讨论参数的这一点上是正确的

但是,如果指定了 ddof,则使用除数 N - ddof。在标准统计实践中,ddof=1 提供了无限总体方差的无偏估计。ddof=0 为正态分布的变量提供方差的最大似然估计。在此函数中计算的标准差是估计方差的平方根,因此即使 ddof=1,它本身也不是标准差的无偏估计。

于 2017-12-15T23:24:19.643 回答