代表値はデータの中心的傾向を示すが、データの散らばりの度合を表す指標として、分散や標準偏差がある。
分散
標本分散
\(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
\]
Proof. 不偏分散の分母が \(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}
\]
Example 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\) となる。
演習問題
Exercise 9.1 学生10人のテストの点数が以下のように与えられたとする。このデータの不偏分散を python で計算せよ。
import numpy as np
scores = np.array([70, 80, 90, 100, 60, 75, 85, 95, 65, 55])
# ここにコードを書け
Exercise 9.2 my_variance() という関数を定義し、dataというリストを引数として受け取り、そのデータの標本分散を計算して返すようにせよ。
def my_variance(data):
# ここにコードを書く
return variance
data = [1, 2, 3, 4, 5]
variance = my_variance(data)
print("分散:", variance)
print("確認:", np.var(data, ddof=0))