はじめに
統計検定や推測統計学を学び始めると、必ず立ちはだかるのが「t分布」です。
「正規分布があるのに、なぜ別の分布を使うのか?」
「自由度 $n-1$ の $-1$ にはどんな数学的な意味があるのか?」
この記事では、難解な数式を極力減らし、変数の考え方や歴史的背景からt分布の本質を解説します。記事の最後には、Google Colabで1秒で実行できる可視化検証コードも掲載しています。
1. t分布が生まれた背景:「少ないデータ」で全体を推測するため
t分布(正式名称:スチューデントのt分布)は、1908年にウィリアム・ゴセットという人物によって発見されました。彼はアイルランドのギネスビール工場で働くデータアナリストでした。
当時の統計学は、人間の身長など「何百・何千という大量のデータを集めて分析する正規分布」が主流でした。しかし、工場で麦芽や酵母の実験をする際、彼が用意できるサンプル数はせいぜい「4〜10個」程度でした。
「大数の法則が効かない少数のデータから、いかに母集団全体の傾向を正しく推測するか?」
この問題を数学的に解決するために生み出されたのが、t分布です。
💡 豆知識
ゴセットは企業秘密の漏洩を防ぐ会社の規定により、実名ではなく「Student(学生)」というペンネームで論文を発表しました。これが現在でも「スチューデントのt分布」と呼ばれる理由です。
2. なぜ正規分布じゃダメなのか?(母分散未知の問題)
世の中のデータの多くは正規分布に従いますが、正規分布を使って計算(Z検定や区間推定)を行うには、「母集団の本当のばらつき(母分散)」があらかじめ分かっているという前提が必要です。
しかし、手元に少数のサンプルしかない状況で、母集団全体のばらつきを知ることは不可能です。そのため、サンプルから計算した「不偏分散」で代用することになります。
ここで問題が起きます。サンプル数が少ない時、そのサンプルのばらつきは、真のばらつきからズレている(過小評価されている)可能性が高くなります。
つまり、「データが少ないぶん、計算の不確実性が増している」状態です。
この不確実性をカバーするために、正規分布よりも少しだけ「裾(両端)を厚く」して、外れ値が出やすく調整した分布、それがt分布の正体です。
3. 自由度「$n-1$」の謎を変数の視点で解き明かす
t分布の形を決める唯一のパラメータが「自由度(Degrees of Freedom)」です。データ(サンプルサイズ)の数を $n$ としたとき、自由度は $n-1$ になります。
なぜ $-1$ するのでしょうか?これは「方程式の変数と制約条件」の関係で考えるとスッキリ理解できます。
例えば、3つの変数 $a, b, c$ があるとします。これらが完全に自由にどんな値でも取れるなら、自由度は 3 です。
しかし、ここに「3つの変数の平均値は 10 でなければならない」という制約条件が加わったとします。数式で表すと $a+b+c=30$ です。
- 1つ目の変数 $a$ に、あなたは自由に $5$ を入れました。
- 2つ目の変数 $b$ に、あなたは自由に $15$ を入れました。
- では、3つ目の変数 $c$ はどうなるでしょうか?
自動的に $c=10$ に固定されてしまいます。$c$ にはもう、好きな値を取る「自由」はありません。
つまり、「制約条件が1つ増えるごとに、自由に動ける変数の数が1つ減る」のです。
統計の計算において、私たちは母集団の本当の平均(母平均)を知らないため、分散を計算する際に手元のデータから作った「標本平均」を使います。この「計算プロセスの中で標本平均を基準として使ってしまう」という行為が、まさに数式上の制約を1つ生み出します。
だからこそ、データ数 $n$ から制約の数 $1$ を引いた $n-1$ が、自由に動ける変数の数(自由度)になるのです。
4. Google Colabで検証:サンプル数による分布の変化を見てみよう
自由度(サンプル数)が小さくなるとどれだけ裾が厚くなるのか、そしてデータが増えると本当に正規分布に近づくのかをPythonで可視化してみましょう。
以下のコードをコピーして、Google Colab のセルに貼り付けて実行してみてください。
!pip install japanize-matplotlib
import numpy as np
import matplotlib.pyplot as plt
import scipy.stats as stats
import japanize_matplotlib # 日本語表示用のライブラリをインポート
# X軸の範囲を設定(-5から5まで)
x = np.linspace(-5, 5, 500)
plt.figure(figsize=(10, 6))
# 基準となる「標準正規分布」をプロット(点線)
plt.plot(x, stats.norm.pdf(x), label='Standard Normal (標準正規分布)', linestyle='--', color='black', linewidth=2)
# 異なる自由度(df)のt分布を重ねてプロット
# df=1(サンプル数2相当)、df=3(サンプル数4相当)、df=30(サンプル数31相当)
degrees_of_freedom = [1, 3, 30]
for df_val in degrees_of_freedom:
y_val = stats.t.pdf(x, df_val)
plt.plot(x, y_val, label=f't-distribution (自由度 df={df_val})', linewidth=1.5)
# グラフの装飾
plt.title('標準正規分布とt分布の比較', fontsize=14)
plt.xlabel('確率変数', fontsize=12)
plt.ylabel('確率密度', fontsize=12)
plt.legend(fontsize=11)
plt.grid(True, linestyle=':', alpha=0.6)
# グラフ表示
plt.show()
実行結果から分かること
グラフを描画すると、以下の傾向が視覚的に確認できます。
-
自由度(df)が小さいとき(例:df=1, 3):
標準正規分布(黒い点線)に比べて、中央のピークが低く、両端の裾(テイル)が明らかに厚くなっているのが分かります。これが「少ないデータにおける不確実性」をカバーしている状態です。 -
自由度(df)が大きくなったとき(例:df=30):
t分布の曲線は、ほぼ完全に標準正規分布と重なり合います。統計学において「サンプル数が30を超えると正規分布に近似して良い(中心極限定理)」とされる理由が、ここからも見て取れます。
まとめ
- t分布は、母分散がわからず、かつデータ数が少ない時に母集団を推測するために作られた分布。
- データが少ない時の「不確実性」をカバーするため、正規分布より裾が厚い。
- 自由度 $n-1$ の $-1$ は、計算に「標本平均」を使うことで失われる変数の自由を表している。
- データ数(自由度)が増えると、t分布は標準正規分布に完全に重なる。
t分布は、データが限られた状況下で精度の高い推論を行うための非常に優れた数学的ツールです。この直感的なイメージを持っておくと、t検定や区間推定の学習がずっとスムーズになります。
