【Python】不偏分散を求める方法

  • URLをコピーしました!

本記事では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メソッドの引数ddof1を指定することで、不偏分散を求めることができます。

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メソッドの引数ddof1を指定することで、不偏分散の平方根を求めることができます。

サンプルコードは以下の通りです。

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で実践】 icon 【世界で55万人が受講】データサイエンティストを目指すあなたへ〜データサイエンス25時間ブートキャンプ〜 icon

他のUdemyの講座が気になる方はこちら

¥3,630 (2024/04/08 23:55時点 | Amazon調べ)

よかったらシェアしてね!
  • URLをコピーしました!

この記事を書いた人

エンジニア。20代。組み込みエンジニアとして働き始めるも、働き方や業務内容に限界を感じ、 AI,Web3エンジニアを目指して勉強中。 エンジニアとして思うことや、学んだことを発信します。

目次