標本分散はなぜ n−1 で割るのか — ベッセル補正と不偏推定の完全ガイド

統計の教科書で標本分散を学ぶと、必ずどこかで引っかかる式があります。データ $x_1, \dots, x_n$ の散らばりを測るのに、なぜか「$n$ で割る」のではなく「$n-1$ で割る」のです。平均を求めるときは $n$ 個のデータを $n$ で割ったのに、分散ではどうして $n-1$ なのか。多くの人がここで「そういうものだ」と暗記して通り過ぎてしまいます。

しかしこの $n-1$ は、ただの慣習でも誤魔化しでもありません。「$n$ で割ると分散を系統的に小さく見積もってしまう」という、れっきとした数学的な事実を補正するための値です。この補正を ベッセル補正(Bessel’s correction) と呼びます。標本平均という「自分で作った中心」のまわりで散らばりを測ると、真の平均のまわりよりも必ず小さくなる——この目減りをちょうど打ち消すのが $n-1$ で割る操作なのです。

この話を理解しておくと、いろいろな場面で迷わなくなります。たとえば、Excel に VAR.S(標本)と VAR.P(母集団)の2つの分散関数があるのはなぜか。numpy の np.varddof という引数があるのはなぜか。$t$ 検定や信頼区間の式に $n-1$ がしれっと現れるのはなぜか。これらはすべて、本記事で扱う「不偏推定」という考え方が根っこにあります。さらに、機械学習で最尤推定(MLE)が分散を $n$ で割るのに、統計の標準が $n-1$ で割るという「食い違い」の正体も見えてきます。

本記事の内容

  • なぜ標本平均のまわりで測ると過小評価になるのか(直感)
  • 偏差平方和の期待値 $E\!\left[\sum (x_i – \bar{x})^2\right] = (n-1)\sigma^2$ の完全な導出
  • 「自由度」という言葉の幾何的な意味(標本平均で1次元を使う)
  • 不偏推定量の定義と、$s^2 = \frac{1}{n-1}\sum (x_i-\bar{x})^2$ が不偏であることの証明
  • $n$ と $n-1$ を比べる数値実験(バイアスが本当に消えるか)
  • 「分散が不偏でも標準偏差は不偏でない」というやっかいな事実
  • 最尤推定(MLE)はなぜ $n$ で割るのか
  • numpy の ddof 引数、信頼区間、$t$ 検定への応用

n で割ると分散を過小評価する概念図。標本平均まわりの偏差平方和は真の平均まわりより必ず小さい

上の図は、これから解く問題の核心を一枚にまとめたものです。6個のデータ点について、真の平均 $\mu$ のまわりの散らばり(緑)と、標本平均 $\bar{x}$ のまわりの散らばり(紫)を比べています。標本平均まわりの偏差平方和(紫の数値)は、真の平均まわりの偏差平方和(緑の数値)より必ず小さくなります。この「必ず小さい」という性質こそ、$n$ で割ると過小評価になる原因です。なぜ必ず小さいのか、そしてどれだけ小さいのかを、これから順番に明らかにしていきましょう。

前提知識

この記事を読む前に、以下の記事を読んでおくと理解が深まります。

期待値の線形性 $E[aX + bY] = aE[X] + bE[Y]$ と、分散の定義 $\mathrm{Var}(X) = E[(X-\mu)^2] = E[X^2] – \mu^2$ は本記事の導出で繰り返し使います。不安な方は先に上記の記事で確認しておきましょう。

なぜズレるのか — 標本平均という「ずるい中心」

問題設定を整理する

まず、何を推定したいのかをはっきりさせましょう。背後には母集団があり、その平均(母平均)を $\mu$、分散(母分散)を $\sigma^2$ とします。この $\mu$ と $\sigma^2$ は神様だけが知っている真の値で、私たちには見えません。私たちの手元にあるのは、そこから無作為に取り出した $n$ 個の標本 $x_1, x_2, \dots, x_n$ だけです。各 $x_i$ は同じ分布から独立に得られた(i.i.d.)とします。

このデータから母分散 $\sigma^2$ を推定したい。素朴に考えると、分散の定義「平均からの偏差の二乗の平均」をそのまま標本に当てはめればよさそうです。

$$ \hat{\sigma}^2 = \frac{1}{n}\sum_{i=1}^{n}(x_i – \bar{x})^2, \qquad \bar{x} = \frac{1}{n}\sum_{i=1}^{n}x_i $$

ここで $\bar{x}$ は標本平均です。一見すると、これは完璧な推定量に見えます。ところが、この $\hat{\sigma}^2$ には系統的なクセがあります。たくさんの標本セットで計算して平均を取ると、真の $\sigma^2$ より少しだけ小さい値に落ち着くのです。なぜそうなるのか、その理由は「$\mu$ ではなく $\bar{x}$ を使った」という一点に尽きます。

標本平均は偏差平方和を最小にする

ここで決定的に重要な事実があります。データ $x_1, \dots, x_n$ に対して、ある定数 $c$ を中心とした偏差平方和

$$ Q(c) = \sum_{i=1}^{n}(x_i – c)^2 $$

を考えると、これを最小にする $c$ は標本平均 $\bar{x}$ です。確かめてみましょう。$Q(c)$ を $c$ で微分してゼロと置くと、

$$ \frac{dQ}{dc} = \sum_{i=1}^{n} 2(x_i – c)(-1) = -2\sum_{i=1}^{n}(x_i – c) = 0 $$

となります。これを解くと $\sum_i x_i = nc$、すなわち $c = \bar{x}$ です。$Q(c)$ は $c$ の二次関数で下に凸なので、この $c=\bar{x}$ が最小点です。

この事実が意味することは深刻です。私たちが推定に使う $\bar{x}$ は、「手元のデータに対して偏差平方和が最小になるよう、最適にフィットさせた中心」なのです。真の中心 $\mu$ は一般に $\bar{x}$ とは少しずれているので、$\mu$ のまわりで測った偏差平方和 $\sum(x_i-\mu)^2$ は、必ず $\bar{x}$ のまわりの $\sum(x_i-\bar{x})^2$ 以上になります。式で書けば、

$$ \sum_{i=1}^{n}(x_i – \bar{x})^2 \;\leq\; \sum_{i=1}^{n}(x_i – \mu)^2 $$

が常に成り立ちます。つまり、標本平均という「データに合わせて選んだずるい中心」を使うと、散らばりが本来より小さく見えるのです。冒頭の図で紫の数値が緑より小さかったのは、まさにこの不等式の表れでした。

どれだけ小さくなるかが鍵

直感としては「$\bar{x}$ を使うと過小評価になる」とわかりました。しかし推定量として実用にするには、「どれだけ過小評価になるか」を正確に知る必要があります。もしその目減り量がきっちり計算できれば、それを補正して元に戻せるはずです。

実は、この目減り量は平均的にちょうど $\sigma^2$ になります。つまり $\mu$ のまわりの平方和と $\bar{x}$ のまわりの平方和は、期待値で見ると $\sigma^2$ ぴったりの差を持つのです。この「ちょうど $\sigma^2$」という美しい結果を導くのが、次のセクションの期待値計算です。

標本分散の期待値計算 — (n−1)σ² の導出

ゴールを宣言する

これから示したいのは、標本平均まわりの偏差平方和の期待値が

$$ \begin{equation} E\!\left[\sum_{i=1}^{n}(x_i – \bar{x})^2\right] = (n-1)\sigma^2 \end{equation} $$

となることです。$n\sigma^2$ ではなく $(n-1)\sigma^2$ になる——この「$-1$」がベッセル補正の起源です。導出は少し長いですが、一行ずつ丁寧に追えば難しくありません。

偏差を「真の平均からの偏差」に書き換える

直接 $\sum(x_i-\bar{x})^2$ を展開してもよいのですが、見通しのよい方法として、各偏差 $x_i – \bar{x}$ を真の平均 $\mu$ を経由する形に書き換えます。$x_i – \bar{x}$ の中に $\mu$ を足して引くだけです。

$$ x_i – \bar{x} = (x_i – \mu) – (\bar{x} – \mu) $$

これは単に $-\mu + \mu = 0$ を挟んだだけの恒等変形です。両辺を二乗します。

$$ (x_i – \bar{x})^2 = (x_i – \mu)^2 – 2(x_i – \mu)(\bar{x} – \mu) + (\bar{x} – \mu)^2 $$

この式を $i = 1$ から $n$ まで足し合わせます。第2項と第3項では $(\bar{x} – \mu)$ は $i$ によらない定数なので、和の外に出せます。

$$ \sum_{i=1}^{n}(x_i – \bar{x})^2 = \sum_{i=1}^{n}(x_i – \mu)^2 – 2(\bar{x} – \mu)\sum_{i=1}^{n}(x_i – \mu) + n(\bar{x} – \mu)^2 $$

真ん中の項を整理する

ここで真ん中の項に注目します。$\sum_{i=1}^{n}(x_i – \mu)$ を計算すると、

$$ \sum_{i=1}^{n}(x_i – \mu) = \sum_{i=1}^{n}x_i – n\mu = n\bar{x} – n\mu = n(\bar{x} – \mu) $$

です($\sum x_i = n\bar{x}$ を使いました)。これを真ん中の項に代入すると、

$$ -2(\bar{x} – \mu)\cdot n(\bar{x} – \mu) = -2n(\bar{x} – \mu)^2 $$

となります。元の式に戻すと、第2項と第3項がまとまります。

$$ \sum_{i=1}^{n}(x_i – \bar{x})^2 = \sum_{i=1}^{n}(x_i – \mu)^2 – 2n(\bar{x} – \mu)^2 + n(\bar{x} – \mu)^2 $$

最後の2つの項を足すと $-2n + n = -n$ なので、きれいな分解が得られます。

$$ \begin{equation} \sum_{i=1}^{n}(x_i – \bar{x})^2 = \sum_{i=1}^{n}(x_i – \mu)^2 – n(\bar{x} – \mu)^2 \end{equation} $$

これは確率も期待値も使わない、純粋な代数の恒等式です。意味するところは明快で、「標本平均まわりの平方和 = 真の平均まわりの平方和 − 標本平均のずれの分」です。最後の項 $-n(\bar{x}-\mu)^2$ こそ、$\bar{x}$ を使ったことによる目減りを表しています。

両辺の期待値を取る

いよいよ期待値を取ります。まず右辺第1項です。各 $x_i$ について、分散の定義から $E[(x_i – \mu)^2] = \sigma^2$ です。これが $n$ 個あるので、

$$ E\!\left[\sum_{i=1}^{n}(x_i – \mu)^2\right] = \sum_{i=1}^{n}E[(x_i – \mu)^2] = n\sigma^2 $$

となります。次に第2項の $E[(\bar{x} – \mu)^2]$ です。これは標本平均 $\bar{x}$ の分散にほかなりません。$\bar{x}$ は平均 $\mu$ を持つので $E[\bar{x}] = \mu$、したがって $E[(\bar{x}-\mu)^2] = \mathrm{Var}(\bar{x})$ です。独立な確率変数の和の分散の公式から、

$$ \mathrm{Var}(\bar{x}) = \mathrm{Var}\!\left(\frac{1}{n}\sum_{i=1}^{n}x_i\right) = \frac{1}{n^2}\sum_{i=1}^{n}\mathrm{Var}(x_i) = \frac{1}{n^2}\cdot n\sigma^2 = \frac{\sigma^2}{n} $$

が得られます。これは標準誤差の話でおなじみの「標本平均の分散は $\sigma^2/n$」という結果です。以上を式 $(2)$ に代入すると、

$$ \begin{align} E\!\left[\sum_{i=1}^{n}(x_i – \bar{x})^2\right] &= E\!\left[\sum_{i=1}^{n}(x_i – \mu)^2\right] – n\,E[(\bar{x}-\mu)^2] \\ &= n\sigma^2 – n\cdot\frac{\sigma^2}{n} \\ &= n\sigma^2 – \sigma^2 \\ &= (n-1)\sigma^2 \end{align} $$

となり、目標の式 $(1)$ が示せました。目減り量はちょうど $\sigma^2$ ぶん、つまり $\bar{x}$ の分散 $\sigma^2/n$ を $n$ 倍した量だったのです。

偏差平方和の期待値の分解。μまわりの平方和 nσ² から平均のずれ σ² を引くと (n−1)σ² になる

この図は、いま導いた分解を棒グラフで表したものです($n=5$、$\sigma^2=1$ の場合)。左の緑が $\mu$ まわりの平方和の期待値 $n\sigma^2 = 5\sigma^2$、真ん中の紫が標本平均のずれ $E[n(\bar{x}-\mu)^2] = \sigma^2$、右の青が標本平均まわりの平方和 $E[\sum(x_i-\bar{x})^2] = (n-1)\sigma^2 = 4\sigma^2$ です。緑から紫の1本ぶん(ちょうど $\sigma^2$)が削られて青になっています。この「平均の自由度1本ぶん」が削られるという見方が、次のセクションの自由度の話につながります。

不偏になるように割り直す

式 $(1)$ がわかれば、補正の方法は自明です。期待値が $(n-1)\sigma^2$ になるのだから、$n$ ではなく $n-1$ で割れば、期待値がちょうど $\sigma^2$ に戻ります。

$$ \begin{equation} s^2 = \frac{1}{n-1}\sum_{i=1}^{n}(x_i – \bar{x})^2, \qquad E[s^2] = \frac{1}{n-1}\cdot(n-1)\sigma^2 = \sigma^2 \end{equation} $$

この $s^2$ を 不偏分散(unbiased sample variance) と呼びます。一方、$n$ で割った $\hat{\sigma}^2$ は期待値が $\frac{n-1}{n}\sigma^2$ となり、真値より $\frac{1}{n}$ ぶん小さくなります。これが「$n$ で割ると過小評価」の正体です。

ここまでで「$n-1$ で割れば期待値が合う」とわかりました。しかし、なぜ $-1$ なのか、$-2$ や $-0.5$ ではいけないのか、という疑問が残るでしょう。それに直感的な答えを与えるのが「自由度」という概念です。

自由度の直感 — 標本平均を使うと1次元失う

自由度とは何か

「自由度(degrees of freedom)」という言葉は統計のあちこちに顔を出しますが、最初は掴みどころがありません。一言でいえば、自由に動ける独立な情報の数です。

具体例で考えましょう。$n$ 個の偏差 $x_1 – \bar{x},\ x_2 – \bar{x},\ \dots,\ x_n – \bar{x}$ を並べたとき、これらは本当に $n$ 個ぶんの独立な情報を持っているでしょうか。実はそうではありません。これらの偏差を全部足すと、

$$ \sum_{i=1}^{n}(x_i – \bar{x}) = \sum_{i=1}^{n}x_i – n\bar{x} = n\bar{x} – n\bar{x} = 0 $$

となり、必ずゼロになります。つまり $n$ 個の偏差には「合計がゼロ」という1本の拘束(制約)がかかっています。$n-1$ 個の偏差を自由に決めれば、残り1個は自動的に決まってしまうのです。自由に動けるのは $n-1$ 個——これが「偏差の自由度は $n-1$」という意味です。

平均を求める段階で、私たちはデータから1つの量($\bar{x}$)を取り出して使いました。その代償として、散らばりを測る側では1つの自由度を失う。だから $n$ ではなく $n-1$ で割る。これが自由度の観点から見たベッセル補正です。

幾何で見る — ベクトルの射影

この話はベクトルの幾何で見ると一段とクリアになります。$n$ 個のデータをまとめて $n$ 次元空間のベクトル $\mathbf{x} = (x_1, \dots, x_n)$ と見なします。すべての成分が 1 のベクトルを $\mathbf{1} = (1,1,\dots,1)$ とすると、標本平均は $\mathbf{x}$ を $\mathbf{1}$ の方向に射影した成分に対応します。

$$ \bar{x}\,\mathbf{1} = \frac{\mathbf{x}\cdot\mathbf{1}}{\mathbf{1}\cdot\mathbf{1}}\,\mathbf{1} $$

実際、$\mathbf{x}\cdot\mathbf{1} = \sum x_i = n\bar{x}$、$\mathbf{1}\cdot\mathbf{1} = n$ なので、射影成分は $\bar{x}\mathbf{1}$ になります。そして偏差ベクトル $\mathbf{x} – \bar{x}\mathbf{1}$ は、この射影を引いた残り(残差)です。

自由度の幾何。データベクトルを 1ベクトル方向に射影すると平均成分が出て、残りの偏差ベクトルは n−1 次元に収まる

この図は $n$ 次元のうち2次元ぶんを取り出して描いた模式図です。データベクトル $\mathbf{x}$(黒)を、「全成分が等しい線」である $\mathbf{1}$ 方向に射影すると平均成分 $\bar{x}\mathbf{1}$(紫)が得られ、その残りが偏差ベクトル $\mathbf{x}-\bar{x}\mathbf{1}$(青)です。重要なのは、偏差ベクトルが $\mathbf{1}$ 方向と直交していることです。

直交する理由は、偏差ベクトルと $\mathbf{1}$ の内積を取ればわかります。

$$ (\mathbf{x} – \bar{x}\mathbf{1})\cdot\mathbf{1} = \sum_{i=1}^{n}(x_i – \bar{x}) = 0 $$

これは先ほどの「偏差の合計はゼロ」と同じ式です。偏差ベクトルは $\mathbf{1}$ に垂直な $(n-1)$ 次元の部分空間(超平面)の中にしか存在できません。$n$ 次元のうち $\mathbf{1}$ 方向の1次元を平均が使い切ってしまい、散らばりは残りの $n-1$ 次元に押し込められる。だから偏差平方和 $\|\mathbf{x}-\bar{x}\mathbf{1}\|^2$ は、$n$ 個ではなく $n-1$ 個の独立な自由度しか持たないのです。

自由度が σ² 何個ぶんかを数える

直交分解からは、期待値の結果も自然に再現できます。ピタゴラスの定理から、

$$ \|\mathbf{x} – \mu\mathbf{1}\|^2 = \|\mathbf{x} – \bar{x}\mathbf{1}\|^2 + \|\bar{x}\mathbf{1} – \mu\mathbf{1}\|^2 $$

が成り立ちます(これは式 $(2)$ の幾何版です)。左辺は $\mu$ まわりの平方和で、$n$ 個の独立な $\sigma^2$ の和なので期待値 $n\sigma^2$。右辺第2項は平均方向の1次元ぶんで期待値 $\sigma^2$。差し引いて右辺第1項(偏差平方和)の期待値は $(n-1)\sigma^2$。「$n$ 次元から平均方向の1次元を引いた $n-1$ 次元」が、そのまま「$(n-1)\sigma^2$」に対応しているのです。自由度の数 $=$ $\sigma^2$ の係数、という見方が腑に落ちると思います。

自由度の直感が掴めたところで、もう一度きちんと「不偏推定量」という言葉を定義し、$s^2$ がその条件を満たすことを証明としてまとめておきましょう。

不偏性の証明

不偏推定量の定義

推定量 $\hat{\theta}$ が母数 $\theta$ の 不偏推定量(unbiased estimator) であるとは、その期待値が真の値に一致すること、すなわち

$$ E[\hat{\theta}] = \theta $$

が成り立つことをいいます。期待値というのは「同じ条件で標本を取り直す実験を無限に繰り返したときの平均」です。不偏性は「平均的には的の中心を射抜く」という性質で、個々の推定が当たることを保証するものではありません。しかし系統的なズレ(バイアス)がないという点で、推定量の基本的な望ましさの一つです。バイアスは

$$ \mathrm{Bias}(\hat{\theta}) = E[\hat{\theta}] – \theta $$

で定義され、不偏推定量とはバイアスがゼロの推定量のことです。

s² の不偏性

不偏分散 $s^2$ が母分散 $\sigma^2$ の不偏推定量であること、すなわち $E[s^2] = \sigma^2$ を示します。これは式 $(1)$ をすでに導いてあるので、ほとんど一行で終わります。

$$ \begin{align} E[s^2] &= E\!\left[\frac{1}{n-1}\sum_{i=1}^{n}(x_i – \bar{x})^2\right] \\ &= \frac{1}{n-1}\,E\!\left[\sum_{i=1}^{n}(x_i – \bar{x})^2\right] \\ &= \frac{1}{n-1}\cdot(n-1)\sigma^2 \\ &= \sigma^2 \end{align} $$

1行目から2行目では期待値の線形性(定数 $\frac{1}{n-1}$ を外に出す)を使い、2行目から3行目で式 $(1)$ を代入しました。これで $s^2$ は $\sigma^2$ の不偏推定量だと証明できました。

一方、$n$ で割った $\hat{\sigma}^2$ のバイアスを計算しておきましょう。

$$ E[\hat{\sigma}^2] = \frac{1}{n}\cdot(n-1)\sigma^2 = \frac{n-1}{n}\sigma^2 = \sigma^2 – \frac{\sigma^2}{n} $$

なので、バイアスは

$$ \mathrm{Bias}(\hat{\sigma}^2) = E[\hat{\sigma}^2] – \sigma^2 = -\frac{\sigma^2}{n} $$

です。マイナスの符号は「真値より小さく見積もる」ことを表します。$n$ が大きくなればバイアスは $0$ に近づくので、大標本では $n$ で割っても $n-1$ で割っても実質的な差はありません。差が問題になるのは $n$ が小さいときです。

ここまでは理論だけで進めてきました。「平均的には $\sigma^2$ に一致する」というのは本当でしょうか。実際に乱数で確かめるのが一番納得できます。次のセクションで、$n$ と $n-1$ を並べて数値実験してみましょう。

n vs n−1 の数値実験

バイアスが本当に消えるか

理論で導いた「$n$ で割ると $\frac{n-1}{n}\sigma^2$、$n-1$ で割ると $\sigma^2$」を、シミュレーションで確かめます。真の分散がわかっている正規分布から標本を大量に取り、両方の推定量の平均がどこに落ち着くかを見ます。

import numpy as np

rng = np.random.default_rng(0)
sigma2 = 4.0                  # 真の分散
ns = [2, 3, 5, 10, 30, 100]   # 標本サイズをいくつか試す
trials = 200000               # 各サイズで20万回の標本取得

print(f"{'n':>4} | {'÷n (MLE)':>12} | {'÷(n-1) 不偏':>14} | {'理論 (n-1)/n·σ²':>16}")
print("-" * 56)
for n in ns:
    # (trials, n) の正規乱数: 各行が1つの標本セット
    samp = rng.normal(0.0, np.sqrt(sigma2), size=(trials, n))
    xbar = samp.mean(axis=1, keepdims=True)
    ss = np.sum((samp - xbar) ** 2, axis=1)   # 偏差平方和
    mean_biased = np.mean(ss / n)             # n で割る
    mean_unbias = np.mean(ss / (n - 1))       # n-1 で割る
    theory = (n - 1) / n * sigma2
    print(f"{n:>4} | {mean_biased:>12.4f} | {mean_unbias:>14.4f} | {theory:>16.4f}")

このコードを実行すると、おおむね次のような表が得られます。÷n の列は理論値 $\frac{n-1}{n}\sigma^2$ にぴったり一致し、$n=2$ では $2.0$($\sigma^2$ の半分!)、$n=100$ では $3.96$ と、$n$ が小さいほど真値 $4.0$ から大きく下に外れます。一方 ÷(n-1) の列はどの $n$ でも $4.0$ 前後に張り付いています。理論で示したとおり、$n-1$ で割ると標本サイズによらず真値に一致し、$n$ で割ると系統的に過小評価することが数値でも確認できました。

バイアスの収束を可視化する

表だけでなくグラフでも見てみましょう。標本サイズ $n$ を横軸に、推定量の期待値(多数回平均)を縦軸に取ります。

import numpy as np
import matplotlib.pyplot as plt

rng = np.random.default_rng(0)
sigma2 = 4.0
ns = np.arange(2, 31)
trials = 40000
mean_biased, mean_unbias = [], []
for n in ns:
    samp = rng.normal(0.0, np.sqrt(sigma2), size=(trials, n))
    xbar = samp.mean(axis=1, keepdims=True)
    ss = np.sum((samp - xbar) ** 2, axis=1)
    mean_biased.append(np.mean(ss / n))         # MLE
    mean_unbias.append(np.mean(ss / (n - 1)))   # 不偏

plt.figure(figsize=(10, 5.6))
plt.axhline(sigma2, color="green", ls="--", lw=2, label="真の分散 σ²=4")
plt.plot(ns, mean_biased, "o-", color="crimson", label="÷n(過小評価)")
plt.plot(ns, mean_unbias, "s-", color="royalblue", label="÷(n-1)(不偏)")
plt.plot(ns, (ns - 1) / ns * sigma2, ":", color="crimson", label="理論 (n-1)/n·σ²")
plt.xlabel("標本サイズ n")
plt.ylabel("推定量の期待値(4万回平均)")
plt.legend()
plt.grid(True, alpha=0.3)
plt.tight_layout()
plt.show()

n vs n−1 のバイアス収束。n で割ると σ² を系統的に下回り、n−1 で割ると n によらず σ² に一致する

このグラフから2つのことがはっきり読み取れます。第一に、$n$ で割った推定量(赤)は理論曲線 $\frac{n-1}{n}\sigma^2$(赤の点線)の上にぴったり乗り、$n$ が小さいほど真値 $\sigma^2=4$(緑の破線)から大きく下に外れています。$n=2$ では $2.0$ しかなく、真値の半分です。第二に、$n-1$ で割った推定量(青)は標本サイズによらず $4.0$ の水平線上に張り付いています。シミュレーションが理論の不偏性をきれいに裏付けています。

推定値の分布を見る

推定量は確率変数なので、1回ごとの値は真値のまわりにばらつきます。「平均が合う(不偏)」ことと「1回の値が当たる」ことは別問題です。$n=5$ の小標本で、$n$ で割った場合と $n-1$ で割った場合の推定値のヒストグラムを比べてみましょう。

import numpy as np
import matplotlib.pyplot as plt

rng = np.random.default_rng(11)
sigma2, n, trials = 4.0, 5, 60000
samp = rng.normal(0, np.sqrt(sigma2), size=(trials, n))
xbar = samp.mean(axis=1, keepdims=True)
ss = np.sum((samp - xbar) ** 2, axis=1)
biased = ss / n
unbias = ss / (n - 1)

plt.figure(figsize=(10, 5.6))
bins = np.linspace(0, 16, 80)
plt.hist(biased, bins=bins, color="crimson", alpha=0.45, density=True,
         label=f"÷n 平均={biased.mean():.2f}")
plt.hist(unbias, bins=bins, color="royalblue", alpha=0.45, density=True,
         label=f"÷(n-1) 平均={unbias.mean():.2f}")
plt.axvline(sigma2, color="green", ls="--", lw=2, label="真値 σ²=4")
plt.xlabel("分散推定値")
plt.ylabel("確率密度")
plt.legend()
plt.grid(True, alpha=0.3)
plt.tight_layout()
plt.show()

MLE(÷n) と不偏(÷n−1) の推定値ヒストグラム。MLE の平均は真値より左に寄る

ヒストグラムから、両方の分布とも右に長い裾を引いた非対称な形(カイ二乗型)であることがわかります。$n$ で割った分布(赤)の平均は約 $3.2$ で真値 $4$ より左に寄っており、$n-1$ で割った分布(青)の平均は約 $4.0$ で真値に重なります。どちらの分布も幅広く、1回の推定値は真値から大きく外れることもあります。不偏性が保証するのは「平均的に中心が合う」ことだけで、個々の推定の正確さではない、という点が視覚的に理解できます。

標本サイズ依存の箱ひげ図。n が小さいほど ÷n と ÷(n−1) の中央値の差が開く

こちらは標本サイズ $n$ を変えながら、両推定量の分布を箱ひげ図で並べたものです。$n=3$ では2つの箱(赤=$\div n$、青=$\div(n-1)$)の中央値がはっきりずれていますが、$n=100$ ではほぼ重なります。また $n$ が小さいほど箱(推定値のばらつき)自体も大きいことが読み取れます。小標本ではベッセル補正の有無が無視できず、大標本では誤差に埋もれて差がなくなる——実務での判断材料になる図です。

数値実験で「分散については $n-1$ で割れば不偏」と確信できました。ところが、分散の平方根である標準偏差に話を移すと、思わぬ落とし穴が待っています。

標準偏差は不偏でない

平方根が不偏性を壊す

不偏分散 $s^2$ の平方根 $s = \sqrt{s^2}$ を「標本標準偏差」としてよく使います。$s^2$ が $\sigma^2$ の不偏推定量なら、$s$ も $\sigma$ の不偏推定量になりそうに思えます。ところが、これは成り立ちません。一般に

$$ E[s] = E[\sqrt{s^2}] \neq \sqrt{E[s^2]} = \sqrt{\sigma^2} = \sigma $$

です。むしろ $E[s] < \sigma$ となり、標準偏差は真値より小さく見積もられます。なぜこんなことが起きるのか、原因は平方根という関数の形にあります。

凹関数とイェンセンの不等式

平方根 $f(t) = \sqrt{t}$ は上に凸(凹)な関数です。凹関数に対しては イェンセンの不等式(Jensen’s inequality) が成り立ち、

$$ E[f(X)] \leq f(E[X]) $$

となります(等号は $X$ が定数のときのみ)。$X = s^2$、$f = \sqrt{\cdot}$ を当てはめると、

$$ E[\sqrt{s^2}] \leq \sqrt{E[s^2]} = \sqrt{\sigma^2} = \sigma $$

が得られます。$s^2$ は標本ごとにばらつく確率変数なので、等号は成立せず厳密に $E[s] < \sigma$ です。直感的には、平方根が「上に凸」なせいで、$s^2$ が大きいときの $s$ の伸びより、小さいときの $s$ の縮みのほうが効いてしまい、平均すると下にずれるのです。

標準偏差のバイアス。左: 平方根が上に凸でイェンセン不等式により下にずれる。右: 補正係数 c4(n) が小 n で 1 を大きく下回る

左の図は平方根関数 $f(s^2)=\sqrt{s^2}$(青)とその $\sigma^2$ における接線(灰の破線)です。凹関数は接線より下にあるため、$s^2$ がばらつくと $\sqrt{\cdot}$ の平均が真値 $\sigma$ より下に引き下げられる様子がわかります。右の図は、正規母集団のもとで $E[s]/\sigma$ がちょうどいくつになるかを表す補正係数 $c_4(n)$ をプロットしたものです。$n$ が小さいほど 1 を大きく下回り($n=2$ では約 $0.80$)、$n$ が増えると 1 に近づきます。不偏分散の平方根でさえ、小標本では系統的に $\sigma$ を過小評価することがはっきり見て取れます。

正規分布での補正係数

母集団が正規分布のときは、$E[s]$ を厳密に計算できます。結果だけ示すと、

$$ E[s] = c_4(n)\,\sigma, \qquad c_4(n) = \sqrt{\frac{2}{n-1}}\,\frac{\Gamma(n/2)}{\Gamma((n-1)/2)} $$

となります($\Gamma$ はガンマ関数)。この $c_4(n)$ は常に $1$ より小さく、$n\to\infty$ で $1$ に近づきます。したがって $s / c_4(n)$ とすれば $\sigma$ の不偏推定量が作れます。ただし $c_4$ は母集団分布に依存するので、実務で標準偏差の不偏補正までやることは稀です。「分散は $n-1$ で不偏にできるが、標準偏差は平方根のせいで厳密には不偏にならない」という事実を知っておくことが大切です。

ここまで一貫して「不偏になるように $n-1$ で割る」と説明してきました。しかし機械学習や最尤推定の文脈では、堂々と $n$ で割ります。これは矛盾ではなく、推定の哲学が違うからです。次に、その違いを見ていきましょう。

MLE(n で割る)との違い

最尤推定は n で割る

母集団が正規分布 $N(\mu, \sigma^2)$ だと仮定し、パラメータ $\mu, \sigma^2$ を 最尤推定(MLE) で求めると、分散の推定量は $n$ で割る形になります。対数尤度

$$ \ell(\mu, \sigma^2) = -\frac{n}{2}\ln(2\pi\sigma^2) – \frac{1}{2\sigma^2}\sum_{i=1}^{n}(x_i – \mu)^2 $$

を $\mu$ と $\sigma^2$ で偏微分してゼロと置きます。$\mu$ については $\hat{\mu} = \bar{x}$ が出ます。$\sigma^2$ については、

$$ \frac{\partial \ell}{\partial \sigma^2} = -\frac{n}{2\sigma^2} + \frac{1}{2\sigma^4}\sum_{i=1}^{n}(x_i – \mu)^2 = 0 $$

を解くと、$\mu$ に $\hat{\mu}=\bar{x}$ を代入して

$$ \hat{\sigma}^2_{\mathrm{MLE}} = \frac{1}{n}\sum_{i=1}^{n}(x_i – \bar{x})^2 $$

となります。これは $n$ で割る推定量、つまりバイアスのある $\hat{\sigma}^2$ です。最尤推定は「観測データを最も尤もらしくするパラメータ」を選ぶ原理で、不偏性をそもそも要求していません。だから補正なしの $n$ が出てくるのです。

バイアスと一致性は別物

MLE が不偏でないことは、MLE の欠陥ではありません。MLE は 一致性(consistency) という別の良い性質を持ちます。一致性とは、標本サイズ $n$ を無限に増やせば推定量が真値に確率収束することです。$\hat{\sigma}^2_{\mathrm{MLE}}$ のバイアスは $-\sigma^2/n$ で $n\to\infty$ で消えるので、一致推定量です。

ここに推定量を選ぶときの設計思想の違いが現れます。

  • 不偏推定($n-1$) — 平均的なズレ(バイアス)をゼロにしたい。小標本でも系統誤差を出したくない場面、信頼区間や仮説検定の理論を組み立てる場面で重視される。
  • 最尤推定($n$) — 尤度最大化という統一原理に従う。多少のバイアスがあっても、大標本での効率や漸近的な性質を重視する。機械学習の多くのモデルがこちら。

どちらが「正しい」というものではなく、何を最適化したいかの違いです。実は、平均二乗誤差(MSE = バイアス² + 分散)という総合的な基準で見ると、正規分布では $n+1$ で割る推定量が最小になることも知られています。「不偏が常に最良」というわけではないのです。

MLE(÷n) と不偏(÷n−1) の比較表に相当する数値実験の関係。ddof 引数で割り方を切り替えられる

この図は、numpy で割り方(自由度の引き方)を変えたときに推定量の平均がどう動くかを示しています(詳細は次節)。$\div n$(ddof=0、MLE)は真値より下、$\div(n-1)$(ddof=1、不偏)はちょうど真値、$\div(n-2)$(ddof=2)は逆に過大評価になります。割る数を1つ変えるごとに期待値が系統的にずれることが、MLE と不偏推定の違いを定量的に表しています。

理論と哲学が出揃いました。最後に、これらを実際のコードでどう使い分けるか、numpy の ddof 引数と統計的応用を見ていきましょう。

Pythonでの実装 — numpy の ddof 引数

ddof で割り方を制御する

numpy の np.varnp.std には ddof(delta degrees of freedom、自由度の差分)という引数があります。これは「割る数を $n – \mathtt{ddof}$ にする」という指定です。

$$ \texttt{np.var(x, ddof=d)} = \frac{1}{n-d}\sum_{i=1}^{n}(x_i – \bar{x})^2 $$

デフォルトは ddof=0($n$ で割る、MLE/母分散の形)です。不偏分散が欲しいときは ddof=1($n-1$ で割る)を指定します。ここが初学者がよくつまずくポイントで、numpy のデフォルトは統計の教科書の標準(不偏)とは逆なのです。

import numpy as np

rng = np.random.default_rng(2)
sigma2, n, trials = 4.0, 6, 50000
samp = rng.normal(0, np.sqrt(sigma2), size=(trials, n))

for d in [0, 1, 2]:
    v = samp.var(axis=1, ddof=d)   # 各標本セットの分散を計算
    print(f"ddof={d} (÷{n-d}): 推定値の平均 = {v.mean():.4f}")

print(f"\n真の分散 σ² = {sigma2}")
print(f"理論 ddof=0: {(n-1)/n*sigma2:.4f}  (過小)")
print(f"理論 ddof=1: {sigma2:.4f}  (不偏)")
print(f"理論 ddof=2: {(n-1)/(n-2)*sigma2:.4f}  (過大)")

このコードの出力では、ddof=0 の平均が約 $3.33$(理論値 $\frac{5}{6}\cdot4 = 3.333$)、ddof=1 が約 $4.00$、ddof=2 が約 $5.00$(理論値 $\frac{5}{4}\cdot4 = 5.0$)となります。$\div(n-1)$ つまり ddof=1 のときだけ真値 $4.0$ に一致することが確認できます。割る数を $n-1$ より小さくする(ddof を 2 にする)と今度は過大評価になり、$n-1$ が「ちょうど」の値であることがわかります。

ddof 引数の効果。ddof=1 でちょうど σ² に一致し、ddof=0 は過小、ddof=2 は過大になる

棒グラフで見ると、3本の棒(ddof=0, 1, 2)のうち真ん中の ddof=1 だけが真値 $\sigma^2=4$ の破線に届いています。ddof=0 は届かず(過小)、ddof=2 は突き抜けています(過大)。numpy で標本データから母分散を推定したいときは ddof=1 を付ける、と覚えておきましょう。pandas の Series.var() はデフォルトが ddof=1(不偏)なので、numpy とは逆である点も要注意です。

自前実装で中身を確認する

ddof がやっていることをスクラッチで書いてみると、ブラックボックス感が消えます。

import numpy as np

def my_var(x, ddof=0):
    """numpy の np.var(x, ddof=ddof) の自前実装"""
    x = np.asarray(x, dtype=float)
    n = len(x)
    xbar = x.sum() / n                       # 標本平均
    ss = np.sum((x - xbar) ** 2)             # 偏差平方和
    return ss / (n - ddof)                   # n - ddof で割る

rng = np.random.default_rng(7)
x = rng.normal(10, 3, size=8)

for d in [0, 1]:
    mine = my_var(x, ddof=d)
    ref = np.var(x, ddof=d)
    print(f"ddof={d}: 自前={mine:.6f}, numpy={ref:.6f}, 一致={np.isclose(mine, ref)}")

この出力では、ddof=0 でも ddof=1 でも自前実装と numpy の結果が完全に一致し、一致=True と表示されます。np.var は内部で「偏差平方和を $n – \mathtt{ddof}$ で割る」だけのシンプルな処理をしている、という確認です。中身を一度自分で書いておくと、ddof の指定を間違えにくくなります。

理論も実装も押さえました。最後に、この $n-1$ が統計の実務でどこに効いてくるのか、信頼区間と $t$ 検定の例で締めくくります。

応用 — 信頼区間と t 検定

信頼区間に現れる n−1

母平均 $\mu$ の信頼区間を作るとき、母分散 $\sigma^2$ がわからないので不偏分散 $s^2$ で代用します。このとき、標本平均を標準化した統計量

$$ T = \frac{\bar{x} – \mu}{s/\sqrt{n}} $$

は標準正規分布ではなく、自由度 $n-1$ の $t$ 分布に従います。ここでも自由度として $n-1$ が登場します。これは「$\sigma$ の代わりに $s$ という推定値を使った不確かさ」を反映したもので、$t$ 分布は正規分布より裾が重く、小標本ほどその差が大きくなります。95% 信頼区間は

$$ \bar{x} \pm t_{0.975,\,n-1}\cdot\frac{s}{\sqrt{n}} $$

で与えられます。$t_{0.975, n-1}$ は自由度 $n-1$ の $t$ 分布の上側 2.5% 点です。

被覆率で確かめる

信頼区間が本当に「95%」を実現するには、(1) 不偏分散 $s$ を使い、(2) $t$ 分布の臨界値を使う、という両方が必要です。小標本でこれを怠るとどうなるかをシミュレーションで見ます。「被覆率」とは、作った区間が真の $\mu$ を含む割合のことです。

import numpy as np
from scipy import stats

rng = np.random.default_rng(8)
mu, sigma, n, trials = 0.0, 2.0, 5, 20000
samp = rng.normal(mu, sigma, size=(trials, n))
xbar = samp.mean(axis=1)
s = samp.std(axis=1, ddof=1)     # 不偏分散の平方根
s_mle = samp.std(axis=1, ddof=0) # n で割る

t_crit = stats.t.ppf(0.975, df=n - 1)   # t 分布の臨界値
z_crit = stats.norm.ppf(0.975)          # 正規分布の臨界値

# (A) n で割る s + 正規近似(誤り)
cover_A = np.mean(np.abs(xbar - mu) <= z_crit * s_mle / np.sqrt(n))
# (B) n-1 で割る s + 正規近似(まだ不十分)
cover_B = np.mean(np.abs(xbar - mu) <= z_crit * s / np.sqrt(n))
# (C) n-1 で割る s + t 分布(正しい)
cover_C = np.mean(np.abs(xbar - mu) <= t_crit * s / np.sqrt(n))

print(f"(A) ÷n の s + 正規近似 : 被覆率 = {cover_A*100:.1f}%")
print(f"(B) ÷(n-1) の s + 正規 : 被覆率 = {cover_B*100:.1f}%")
print(f"(C) ÷(n-1) の s + t分布: 被覆率 = {cover_C*100:.1f}%  ← 目標95%")

出力を見ると、(A) は約 $84\%$、(B) は約 $88\%$ と目標の $95\%$ に届きません。(C) で初めて約 $95\%$ に達します。$n$ で割った標準偏差を使うと分散を過小評価し、区間が狭くなりすぎて真値を取りこぼします。さらに正規近似では小標本の不確かさを表現しきれず、$t$ 分布を使って初めて正しい被覆率になります。ベッセル補正と $t$ 分布の両方が、小標本の正しい推測に不可欠だとわかります。

信頼区間の被覆率比較。不偏分散 s と t 分布を組み合わせて初めて 95% に届く

この棒グラフは3つの方法の実際の被覆率を比べたものです。左2本($n$ で割る、または正規近似)は目標の $95\%$(緑の破線)に届かず、右の「$n-1$ で割る $s$ + $t$ 分布」だけが $95\%$ に達しています。$n-1$ で割ることは、単に分散の見積もりを正しくするだけでなく、検定や区間推定の信頼性そのものを支えている——応用面での重要性がよくわかる結果です。

t 検定との関係

$t$ 検定は、いま見た信頼区間と表裏一体です。1標本 $t$ 検定では帰無仮説 $\mu = \mu_0$ のもとで統計量 $T = (\bar{x}-\mu_0)/(s/\sqrt{n})$ を計算し、自由度 $n-1$ の $t$ 分布と照らして $p$ 値を求めます。ここで使う $s$ は不偏分散の平方根であり、自由度は $n-1$。つまり $t$ 検定の妥当性は、ベッセル補正の上に成り立っています。標本分散を $n$ で割ってしまうと、$t$ 検定の理論的な分布が崩れ、誤った結論を導きかねません。$n-1$ という小さな補正が、統計的推測の根幹を支えているのです。

まとめ表。n で割る(MLE) と n−1 で割る(不偏) の定義・期待値・バイアス・自由度・numpy・用途の比較

最後の表は、本記事の内容を「$n$ で割る vs $n-1$ で割る」の対比でまとめたものです。定義式、期待値、バイアスの有無、自由度の解釈、numpy での書き方、主な用途が一目で比較できます。迷ったときの早見表として活用してください。

まとめ

本記事では、標本分散をなぜ $n-1$ で割るのか——ベッセル補正と不偏推定——を、直感・導出・実験・応用のすべての角度から解説しました。

  • 過小評価の原因: 標本平均 $\bar{x}$ は手元のデータに対して偏差平方和を最小化する「ずるい中心」なので、$\bar{x}$ まわりの散らばりは真の平均 $\mu$ まわりより必ず小さい。だから $n$ で割ると分散を系統的に小さく見積もる。
  • 核心の期待値計算: 恒等式 $\sum(x_i-\bar{x})^2 = \sum(x_i-\mu)^2 – n(\bar{x}-\mu)^2$ の期待値を取ると、$n\sigma^2 – \sigma^2 = (n-1)\sigma^2$。目減り量はちょうど標本平均の分散 $\sigma^2/n$ の $n$ 倍、すなわち $\sigma^2$ ぶん。
  • 自由度の直感: 偏差には $\sum(x_i-\bar{x})=0$ という1本の拘束があり、自由に動けるのは $n-1$ 個。幾何的には、データベクトルを $\mathbf{1}$ 方向に射影して1次元を平均が使い、偏差は残り $n-1$ 次元に収まる。
  • 不偏性: $s^2 = \frac{1}{n-1}\sum(x_i-\bar{x})^2$ は $E[s^2]=\sigma^2$ を満たす不偏推定量。$n$ で割った推定量のバイアスは $-\sigma^2/n$ で、$n$ が大きいと消える。
  • 標準偏差は不偏でない: 平方根が凹関数なので、イェンセン不等式により $E[s] < \sigma$。$s^2$ を不偏にしても $s$ は厳密には不偏にならない。
  • MLE との違い: 最尤推定は $n$ で割る。不偏性ではなく尤度最大化を原理にするため。一致性は両方が持つ。何を最適化したいかで割る数が変わる。
  • 実装と応用: numpy は np.var(x, ddof=1) で不偏分散(デフォルトの ddof=0 は $n$ で割るので注意)。信頼区間や $t$ 検定では自由度 $n-1$ が現れ、不偏分散と $t$ 分布の両方を使って初めて正しい被覆率が得られる。

$n-1$ という一見不可解な値は、「標本平均を使った代償として失う1自由度」を補う、極めて合理的な補正でした。この理解は、標準誤差・$t$ 検定・分散分析・回帰分析(残差の自由度 $n-p$)など、統計のあらゆる場面で効いてきます。

次のステップとして、以下の記事も参考にしてください。