本記事ではPythonを使用して不偏分散を求める方法を解説します。
分散とは
分散は、データの散らばりを表す指標です。以下の式で表されます。
\[
\sigma^2 = \frac{1}{n} \sum_{i=1}^{n} (x_i – \bar{x})^2
\]
\(n\) : データの総数
\( x_i \) : 各データ
\( \bar{x} \) : データの平均値
不偏分散とは
不偏分散は標本データから母集団の分散を推定するのに使用します。
以下式で表されます。
\[ s^2 = \frac{1}{n-1} \sum_{i=1}^{n} (x_i – \bar{x})^2 \]
分散の計算式と異なるところは分母がn - 1
になっている点です。
これにより、標本分散(標本の分散)が母分散(母集団の分散)が一致するように調整しています。
n-1をする理由
なぜ分散の式の分母をn - 1
にする調整をするのでしょうか。
それは、母分散が標本分散より大きくなるという特徴があるからです。
この特徴から標本分散に1よりも少しだけ大きいn/(n-1)
をかけることで調整しています。
式で表すと以下の通りです。
\[
s^2 = \frac{n}{n-1} \times \frac{1}{n} \sum_{i=1}^{n} (x_i – \bar{x})^2
\]
\[
s^2 = \frac{1}{n-1} \sum_{i=1}^{n} (x_i – \bar{x})^2
\]
Pythonで不偏分散を算出
Pythonで不偏分散を算出する方法は以下の2つがあります。
- NumPyを使用する方法(np.var)
- SciPyを使用する方法(stats.tvar)
NumPyを使用する方法
まずはNumPyを使用して不偏分散を求める方法を紹介します。
NumPyのvar
メソッドを使用します。
var
メソッドの引数ddof
に1
を指定することで、不偏分散を求めることができます。
import numpy as np
# サンプルデータ
data = [10, 12, 23, 23, 16, 23, 21, 16]
# 不偏分散の算出
u_var = np.var(data, ddof=1)
print("不偏分散 NumPy: ", u_var)
実行結果
不偏分散 NumPy: 27.428571428571427
SciPyを使用する方法
続いて、SciPyを使用して不偏分散を求める方法を紹介します。
SciPyのstats.tvar
を使用します。
from scipy import stats
# サンプルデータ
data = [10, 12, 23, 23, 16, 23, 21, 16]
# 不偏分散の算出
u_var = stats.tvar(data)
print("不偏分散 SciPy: ", u_var)
実行結果
不偏分散 SciPy: 27.428571428571427
不偏分散の平方根
不偏分散の平方根を求めることで、母集団の標準偏差を推定することができます。
不偏分散の平方根を求める方法は3つあります。
- 不偏分散の平方根を計算
- NumPyを使用(np.std)
- SciPyを使用(stats.tstd)
それぞれの結果を比較してみましょう
不偏分散の平方根を計算する方法
まずは不偏分散の計算結果から平方根を取る方法です。
サンプルコードは以下の通りです。
import numpy as np
# サンプルデータ
data = [10, 12, 23, 23, 16, 23, 21, 16]
# 不偏分散の算出
u_var = np.var(data, ddof=1)
# 不偏分散の平方根を算出
sqr_u_var = np.sqrt(u_var)
print("不偏分散の平方根 np.sqrt: ", sqr_u_var)
実行結果
不偏分散の平方根 np.sqrt: 5.237229365663817
NumPyを使用する方法
不偏分散の平方根を求めるには、NumPyのstd
メソッドを使用します。
std
メソッドの引数ddof
に1
を指定することで、不偏分散の平方根を求めることができます。
サンプルコードは以下の通りです。
import numpy as np
# サンプルデータ
data = [10, 12, 23, 23, 16, 23, 21, 16]
# 不偏分散の平方根を算出
sqr_u_var = np.std(data, ddof=1)
print("不偏分散の平方根 np.std: ", sqr_u_var)
実行結果
不偏分散の平方根 np.std: 5.237229365663817
SciPyを使用する方法
SciPyを使用して不偏分散の平方根を求めることもできます。
statsモジュールのtstd
を使用します。
サンプルコードは以下の通りです。
from scipy import stats
# サンプルデータ
data = [10, 12, 23, 23, 16, 23, 21, 16]
# 不偏分散の算出
sqr_u_var = stats.tstd(data)
print("不偏分散の平方根 stats.tstd: ", sqr_u_var)
実行結果
不偏分散の平方根 stats.tstd: 5.237229365663817
まとめ
分散と不偏分散についてまとめると以下です。
- 分散
データの散らばりを求めるときに使用 - 不偏分散
標本から母分散を推定ときに使用
ここまで読んでくださりありがとうございます。
参考
おすすめ教材
米国データサイエンティストが教える統計学超入門講座【Pythonで実践】 【世界で55万人が受講】データサイエンティストを目指すあなたへ〜データサイエンス25時間ブートキャンプ〜他のUdemyの講座が気になる方はこちら