代表値はデータの中心的傾向を示すが,データの散らばりの度合いを表す指標として,分散や標準偏差がある.
分散
標本分散
n 個のデータ x_1, x_2, \ldots, x_n があるとする.このとき,標本分散(biased sample variance) s_n^2 は以下の式で計算される.
s_n^2 = \frac{(x_1 - \bar{x})^2 + (x_2 - \bar{x})^2 + \cdots + (x_n - \bar{x})^2}{n} = \frac{1}{n} \sum_{i=1}^{n} (x_i - \bar{x})^2
標本分散の計算式を見ると,各データ x_i から平均値 \bar{x} を引いた値の二乗を計算し,その平均を取っていることがわかる.つまり,各データと平均値の差の絶対値 |x_i - \bar{x}| が大きいほど,分散も大きくなる.標本分散はデータのばらつきの度合いを表す指標である.
不偏分散
データから得られた標本を使って母集団の分散を推定する場合,標本分散は母分散よりも系統的に小さくなることが知られている.そのため,不偏分散(unbiased sample variance)で母分散の推定を行うことが一般的である.不偏分散 s^2 は以下の式で計算される.
s^2 = \frac{(x_1 - \bar{x})^2 + (x_2 - \bar{x})^2 + \cdots + (x_n - \bar{x})^2}{n-1} = \frac{1}{n-1} \sum_{i=1}^{n} (x_i - \bar{x})^2
証明. 不偏分散の分母を n-1 にする手法はベッセルの補正(Bessel’s correction)と呼ばれる.ここでは,\mathbb{E}[s^2] = \sigma^2 となることを示す.読者は飛ばしてもよい.
\begin{align}
\mathbb{E}[s^2] &= \mathbb{E}\left[\frac{1}{n-1} \sum_{i=1}^{n} (X_i - \bar{X})^2\right] \\
&= \frac{1}{n-1} \mathbb{E}\left[\sum_{i=1}^{n} ((X_i - \mu) - (\bar{X} - \mu))^2\right] \\
&= \frac{1}{n-1} \mathbb{E}\left[\sum_{i=1}^{n} ((X_i - \mu)^2 - 2(X_i - \mu)(\bar{X} - \mu) + (\bar{X} - \mu)^2)\right] \\
&= \frac{1}{n-1} \left( \sum_{i=1}^{n} \mathbb{E}[(X_i - \mu)^2] - 2 \sum_{i=1}^{n} \mathbb{E}[(X_i - \mu)(\bar{X} - \mu)] + \sum_{i=1}^{n} \mathbb{E}[(\bar{X} - \mu)^2] \right) \\
&= \frac{1}{n-1} \left( n\sigma^2 - 2n \cdot \frac{\sigma^2}{n} + n \cdot \frac{\sigma^2}{n} \right) \\
&= \frac{1}{n-1} (n\sigma^2 - \sigma^2) \\
&= \sigma^2
\end{align}
標準偏差
分散はデータと平均値の差の二乗を使って計算されるため,元のデータと単位が異なり,理解しづらい.そこで,分散の平方根を取ったものを標準偏差といい,元のデータと同じ単位になる.
標本標準偏差
標本分散の平方根を取ったものを標本標準偏差(sample standard deviation)といい,s_n で表される.
s_n = \sqrt{s_n^2} = \sqrt{\frac{1}{n} \sum_{i=1}^{n} (x_i - \bar{x})^2}
不偏標準偏差
不偏標準偏差(unbiased standard deviation)は不偏分散の平方根を取ったもので,s で表される.
s = \sqrt{s^2} = \sqrt{\frac{1}{n-1} \sum_{i=1}^{n} (x_i - \bar{x})^2}
例 9.1 アンケート調査で,A商品とB商品の満足度を5段階で評価したとする.1 が最も不満,5 が最も満足を表す.下の表は,4人の回答者の評価を示している.
このとき,A商品とB商品の平均値はどちらも 3 である.
A商品の標本分散は
\frac{(1-3)^2 + (1-3)^2 + (5-3)^2 + (5-3)^2}{4} = 4
となり,B商品の標本分散は
\frac{(3-3)^2 + (3-3)^2 + (3-3)^2 + (3-3)^2}{4} = 0
となる.
A商品の標本標準偏差は s_A = \sqrt{4} = 2,B商品の標本標準偏差は s_B = \sqrt{0} = 0 である.
Python で計算する場合,np.var() 関数と np.std() 関数を使うと分散と標準偏差を計算できる.
これらの関数では ddof=1 とすると分母が n-1 となり不偏分散・不偏標準偏差を計算し,ddof=0 とすると分母が n となり標本分散・標本標準偏差を計算する.
import numpy as np
a_ratings = np.array([1, 1, 5, 5])
b_ratings = np.array([3, 3, 3, 3])
a_variance = np.var(a_ratings, ddof=0) # 標本分散
b_variance = np.var(b_ratings, ddof=0) # 標本分散
a_std = np.std(a_ratings, ddof=0) # 標本標準偏差
b_std = np.std(b_ratings, ddof=0) # 標本標準偏差
print("A商品の標本分散:", a_variance)
print("B商品の標本分散:", b_variance)
print("A商品の標本標準偏差:", a_std)
print("B商品の標本標準偏差:", b_std)
A商品の標本分散: 4.0
B商品の標本分散: 0.0
A商品の標本標準偏差: 2.0
B商品の標本標準偏差: 0.0
この例では,A商品とB商品の平均値は同じであるが,データのばらつきは異なる.A商品の評価は1と5に分かれており,好き嫌いがはっきりしている.一方,B商品の評価は全て3であり,満足度にばらつきがないことがわかる.
ddof は “delta degrees of freedom” の略であり,分散や標準偏差の計算において,分母から引く値を指定するための引数である.ddof=1 とすると分母は n-1 となり,ddof=0 とすると分母は n となる.
練習問題
練習 9.1 学生10人のテストの点数が以下のように与えられたとする.このデータの不偏分散を python で計算せよ.
import numpy as np
scores = np.array([70, 80, 90, 100, 60, 75, 85, 95, 65, 55])
# ここにコードを書け
練習 9.2 my_variance() という関数を定義し,data というリストを引数として受け取り,そのデータの標本分散を計算して返すようにせよ.
import numpy as np
def my_variance(data):
# ここにコードを書く
return variance
data = [1, 2, 3, 4, 5]
variance = my_variance(data)
print("分散:", variance)
print("確認:", np.var(data, ddof=0))