0

scipy の .tstd 関数を使用して標準偏差を計算しようとしたために発生しているスクリプトの問題を特定しました。

 sp.stats.tstd(IR)

私のIR価値はどこにありますか0.0979。これをゼロに丸めることをやめさせる方法はありますか?番号を呼び出すことを提案した以前のスタックオーバーフローの投稿から提案を試みましたが、うまくいきませ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 の場合に当てはまります。1 つの数値では母集団の分散がどうなるかがわからないため、これは理解できます。

この調整が望ましくない場合 (おそらく、配列総母集団であり、そこからのサンプルではない場合)、代わりにnumpy.stdを使用してください。サイズ 1 の配列の場合、期待どおり 0 が返されます。パラメーター ddof=1 と共に使用すると、numpy.stdと同等になりstats.tstdます。


Asie: SciPy のドキュメントの状態

tstd は偏りのない標本標準偏差を計算します。つまり、補正係数 n / (n - 1) を使用します。

この標準誤差推定量には偏りがないという一般的な誤解を繰り返しています (実際、補正係数は、標準偏差ではなく、分散の偏りを排除します)。 NumPy の std ドキュメントddofは、パラメーターについて説明しているこの時点で正しいことが判明しました

ただし、ddof が指定されている場合は、除数 N - ddof が代わりに使用されます。標準的な統計の実践では、ddof=1 は、無限母集団の分散の偏りのない推定量を提供します。ddof=0 は、正規分布変数の分散の最尤推定を提供します。この関数で計算される標準偏差は、推定された分散の平方根であるため、ddof=1 であっても、標準偏差自体の偏りのない推定値にはなりません。

于 2017-12-15T23:24:19.643 に答える