Pythonの数値計算ライブラリnumpyと数理統計計算ライブラリstatisticsの違い 〜標準偏差と分散値〜

スポンサーリンク

numpyとstatisticsで値が違う?

前回、前々回と数値計算ライブラリnumpyと数理統計ライブラリstatisticsを使って、平均値、中央値、標準偏差、分散値の計算を紹介しました。

Pythonの数値計算ライブラリ numpy 〜平均値、中央値、標準偏差、分散値の取得 (np.average、np.mean、np.median、np.std、np.var)〜
Python数値計算ライブラリnumpy前回、Python数値計算ライブラリnumpyを使って、最大値、最小値、そしてそのインデックスの取得方法を解説しました。今回は統計でよく用いる数値である平均値、中央値、標準偏...
Pythonの数理統計関数ライブラリstatisticsで平均値、中央値、標準偏差、分散値
数理統計関数statistics前回、numpyを使って、平均値や中央値など統計で使いそうな関数を解説しました。今回は数理統計関数のライブラリであるstatisticsを使って、平均値、中央値、標準偏差、分散値の計...

しかしその際、numpyの標準偏差np.stdと分散値np.varの値が、statisticsの標準偏差stdevと分散値varianceの値と異なっているということを見つけました。

今回はそれが何故起こったのかを考えていきたいと思います。

まずは基本となるプログラムから。

今回はnumpyもstatisticsも使うので両方インポートしますが、statisticsを何度もタイプするのは疲れるので、「stat」としてインポートします。

import numpy as np
import statistics as stat

a = [1, 5, 3, 4, 0, 9, 6, 2, 8, 7]

print("<Standard Deviation>")
print(np.std(a))
print(stat.stdev(a))

print("<Variance>")
print(np.var(a))
print(stat.variance(a))

実行結果
<Standard Deviation>
2.8722813232690143
3.0276503540974917
<Variance>
8.25
9.166666666666666

確かに標準偏差も分散値も異なっています。

スポンサーリンク

pstdevとpvariance

実はstatisticsの標準偏差と分散にはもう一つの計算方法があります。

それが「pstdev」と「pvariance」です。

これらは母集団の標準偏差と分散を計算するコマンドです。

ちなみに前に紹介した「stdev」は不偏標準偏差、「variance」は不偏分散という値になります。

とりあえず計算してみましょう。

import numpy as np
import statistics as stat

a = [1, 5, 3, 4, 0, 9, 6, 2, 8, 7]

print("<Standard Deviation>")
print(np.std(a))
print(stat.pstdev(a))

print("<Variance>")
print(np.var(a))
print(stat.pvariance(a))

実行結果
<Standard Deviation>
2.8722813232690143
2.8722813232690143
<Variance>
8.25
8.25

同じ値になりました。

ということはnumpyの「np.std」と「np.var」はstatisticsの「pstdev」 と「pvariance」と同じ計算をしていると言えそうです。

ではstatisticsの「stdev」と「pstdev」、また「variance」と「pvariance」はどう違うのでしょうか?

スポンサーリンク

標本と母集団

これには少し統計のことを勉強する必要があります。

私自身も統計をしっかり学んだわけではないので、間違っていたらごめんなさい。

まず統計ではものすごく数多くのデータ、もしくはすべてのデータ値がわかっているわけではない「母集団」が存在します。

そして全部を計算するのは大変だったり、もしくは全部を計算できない場合、そこからいくつかのデータを抽出し、統計処理をし、母集団の統計値を推定します。

ということは標準偏差も分散値も、「母集団に対する標準偏差・分散値」と「標本に対する標準偏差・分散値」が存在するわけです。

これで少し明らかになってきました。

numpyの「np.std」、「np.var」、そしてstatisticsの「pstdev」、「pvariance」は母集団に対する標準偏差、分散値を計算するコマンドなのです。

またstatisticsの「stdev」と「variance」は標本に対する標準偏差と分散値を計算するコマンドになるということです。

ちなみにそれぞれを計算式にするとこんな感じになります。

・母集団に対する標準偏差

・母集団に対する分散値

・標本に対する標準偏差

・標本に対する分散値

違うところはそう、分母が「N(データの個数)」になっているか「N – 1(データの個数 – 1)」となっているかです。

これは標本だとデータ数が少なるなることから、計算値が小さい方に偏りやすいということで補正をしているということらしいです。

こちらのウェブサイトで詳しく解説されていますので、もし良かったら見てみてください。

母集団の分散や標準偏差の推定値を計算するときにn-1で割る理由
点推定と区間推定について説明した記事では、標本の5個のデータから母平均を区間推定しました。母平均の推定とは、標本の平均から、母集団の平均を推定することですが、一つ問題があります。「標本から計算した分散や標準偏差は、母集団の分散や標準偏差と比

今回はnumpyとstatisticsの標準偏差、分散値に関して解説をしました。

最終的にはたった「-1」 をしているかしていないかだけの違いですが、統計にとってはこの差が違う目的で用いる重要な違いだったりします。

個人的にはこういう本質的な違いというのを理解して使っていくというのが重要だなぁと思った記事でした。

ということで今回はこんな感じで。

コメント

タイトルとURLをコピーしました