statisticsとは、Pythonの標準ライブラリで、統計計算用のパッケージです。
このstatisticsをつかって各種の統計量を計算していきます。
(原則として Google Colaboratory 上でコードの記述や結果の確認をおこないます)
####⑴ 数値計算に使うライブラリをインポートする
まず、!pip install xxxx
コマンドを使って、statisticsをColaboratory上にインストールします。
!pip install statistics
import statistics as stat # statisticsをインポート
####⑵ データを用意する
data = [12, 3, 5, 2, 6, 7, 9, 6, 4, 11]
####⑶ 母標準偏差・不偏標準偏差を算出する
stat.pstdev(data)
statisticsのpstdev
関数は population standard deviation の略で、つまりstatisticsでは母標準偏差を指定して計算します。
続いて、不偏標準偏差を算出します。
stat.stdev(data)
英語で不偏標準偏差は unbiased standard deviation ですが、statisticsにおいてはこれがstdev
関数となります。
##分散
標準偏差は、分散の平方根をとったものです。
そして分散は、「データが平均値からどの程度ばらついているか」を表した指標であり、計算式に書くと次のようになります。
$σ^2 = \frac{1}{N} {\displaystyle {\sum_{i=1}^{N} (x_{i}-μ)^2}}$
データの個数は全部で$N$個あります。
式中の$(x_{i}-μ)$は、データ$x$の$i$番目の値から平均値$μ$を差し引いたもの、これを偏差と呼びます。この偏差を2乗したもの$(x_{i}-μ)^2$を、$i=1$番目から$N$番目まで全部のデータについて合計するというのが$\sum_{i=1}^{N}$の意味するところです。これをまとめて偏差平方和と呼びます。
この偏差平方和に$\frac{1}{N}$をかけ算する、つまりデータの個数$N$個で割ったものが分散です。
かりに、「データと平均値との差」をその間の距離だとすると、分散とは、データ全体としてみたときの「データと平均値との距離の平均値」といえます。データ全体として平均値からどの程度離れているか、ばらつき具合いを表していることになります。
正確には、これを標本分散といいます。
標本分散には偏りがあることが知られており、この欠点を修正した不偏分散を使うのが普通です。
####⑷ 不偏分散を算出する
stat.variance(data)
念の為、不偏分散の平方根をとって確かめてみます。
import numpy as np # Numpyをインポート
data_2 = stat.variance(data) # 不偏分散の値を変数data_2に格納
np.sqrt(data_2) # data_2の平方根をとる
不偏分散の平方根は、確かに不偏標準偏差と一致しています。
##不偏分散
不偏分散の計算式を示します。
$σ^2 = \frac{1}{N-1} {\displaystyle {\sum_{i=1}^{N} (x_{i}-μ)^2}}$
先の標本分散の計算式と異なるのは、$\frac{1}{N}$が$\frac{1}{N-1}$になっているところです。分母が1だけ小さくなるので、不偏分散は標本分散よりも少し大きな値となります。
なぜ、このような操作をするのか。
ここで思い起こしたいのは、分散を計算するために、あらかじめ平均値を計算しているということです。
本当なら母平均を使いたい、でもそれがわからないから標本平均を使うしかない。
この標本平均は、母集団の中の一部の平均値に過ぎないので、母集団における真の平均値(母平均)とは多少ずれていると考えるのが自然でしょう。
そこで、この ‘ずれ’ のメカニズムを考えてみたいと思います。
標本平均を使うしかないことで、常に標本分散は、本来あるべき真の分散よりも小さくなってしまうのです。
この偏りを補正するために、不偏分散すなわち「偏りのない分散」を用い、その平方根をとった不偏標準偏差を使うこととなっています。