📚 章構成
📚 章構成
🤔 1. なぜ t検定なのか
「母平均は μ₀ か?」を検定する場合、 母分散 σ² が分かっていれば z検定 (標準正規分布を使う)で済む。 しかし実務では σ² も標本から推定するため、 推定の不確実性が加わる。 これを反映したのが t分布 。
母分散既知:z検定(標準正規)
母分散未知(標本から推定):t検定(t分布)
標本サイズが大きい(n > 30)と t分布は標準正規にほぼ一致
📈 2. t分布
確率変数 $T$ が自由度 $\nu$ のt分布に従うとき:
$$T = \frac{Z}{\sqrt{V/\nu}}, \quad Z \sim N(0,1),\ V \sim \chi^2_\nu$$
記号読み: $T$ は「ティー」、 $\nu$ は「ニュー」自由度。 t分布は標準正規より裾が厚い (外れ値・極端値が出やすい)形状。
2.1 自由度 (Degrees of Freedom)
1標本t検定:$\nu = n-1$
2標本t検定(等分散):$\nu = n_1 + n_2 - 2$
Welchのt検定:Welch–Satterthwaite 近似で実数値の自由度
🎯 解説: SSDSE-B-2026 を題材に、 2 群間の平均差を検定する t 検定(独立 2 標本/対応あり/1 標本)を scipy.stats で実行する。 帰無仮説「平均が等しい」の検証であり、 p < 0.05 で有意差ありと判定するのが慣例。
📋 コピー import numpy as np
import matplotlib.pyplot as plt
from scipy import stats
x = np . linspace ( - 4 , 4 , 500 )
for df in [ 2 , 5 , 30 ]:
plt . plot ( x , stats . t . pdf ( x , df ), label = f 't, df= { df } ' )
plt . plot ( x , stats . norm . pdf ( x ), 'k--' , label = 'N(0,1)' )
plt . title ( 't分布と標準正規分布' )
plt . legend ()
plt . show ()
💬 読み方: t 値の絶対値が大きい(>2 程度)かつ p < 0.05 で「差は偶然では説明しにくい」。 ただし「有意=実用的に大きい」とは限らない(効果量 Cohen's d も併用)。 等分散仮定が怪しい場合は Welch t 検定(equal_var=False)を使う。
🎯 3. 1標本t検定
母平均が基準値 $\mu_0$ と等しいかを検定する。
仮説
H₀ : μ = μ₀(差はない)
H₁ : μ ≠ μ₀(差がある、 両側)
検定統計量
$$t = \frac{\bar{x} - \mu_0}{s/\sqrt{n}}, \quad \nu = n-1$$
記号読み: $\bar{x}$ は「エックス・バー」標本平均、 $s$ は「エス」標本標準偏差、 $n$ は標本サイズ。 $s/\sqrt{n}$ を標準誤差と呼ぶ。
🧮 実値で計算してみる
n=10、 $\bar{x}=12.5$、 $s=2.0$、 $\mu_0=10$ のとき:
標準誤差: $s/\sqrt{n} = 2.0/\sqrt{10} \approx 0.632$
t統計量: $(12.5 - 10) / 0.632 \approx 3.953$
自由度 9、 両側 p値: $\approx 0.003$ → 有意
🎯 解説: SSDSE-B-2026 を題材に、 2 群間の平均差を検定する t 検定(独立 2 標本/対応あり/1 標本)を scipy.stats で実行する。 帰無仮説「平均が等しい」の検証であり、 p < 0.05 で有意差ありと判定するのが慣例。
📥 入力例(SSDSE-B-2026 の 2023 年・47 都道府県から 3 行)
都道府県 B4101(年平均気温)
北海道 11.0
東京都 17.6
沖縄県 23.8
…(全 47 行)
📋 コピー import pandas as pd
from scipy import stats
df = pd . read_csv ( 'data/raw/SSDSE-B-2026.csv' , encoding = 'cp932' , skiprows = [ 1 ])
df = df [ df [ 'SSDSE-B-2026' ] == 2023 ] # 2023年の47都道府県
# 年平均気温(B4101)の母平均が15℃と等しいかを検定
t_stat , p_value = stats . ttest_1samp ( df [ 'B4101' ], popmean = 15 )
print ( f 't = { t_stat : .3f } , p = { p_value : .4f } ' )
print ( f '標本平均 = { df [ "B4101" ] . mean () : .2f } ' )
print ( f '判定: { "有意 (棄却)" if p_value < 0.05 else "有意でない (保留)" } ' )
📤 実行例(実測)
t = 6.032, p = 0.0000
標本平均 = 16.80
判定: 有意 (棄却)
💬 読み方: t 値の絶対値が大きい(>2 程度)かつ p < 0.05 で「差は偶然では説明しにくい」。 ただし「有意=実用的に大きい」とは限らない(効果量 Cohen's d も併用)。 等分散仮定が怪しい場合は Welch t 検定(equal_var=False)を使う。
👥 4. 2標本t検定(独立サンプル)
2 つの独立な群の平均が等しいかを検定する。
仮説
H₀ : μ₁ = μ₂
H₁ : μ₁ ≠ μ₂
4.1 等分散を仮定する場合(Student のt検定)
$$t = \frac{\bar{x}_1 - \bar{x}_2}{s_p \sqrt{1/n_1 + 1/n_2}}, \quad s_p^2 = \frac{(n_1-1)s_1^2 + (n_2-1)s_2^2}{n_1 + n_2 - 2}$$
記号読み: $s_p$ は「エス・ピー」プール分散の平方根。 共通分散を仮定して、 2 群の分散を加重平均する。
🎯 解説: SSDSE-B-2026 を題材に、 2 群間の平均差を検定する t 検定(独立 2 標本/対応あり/1 標本)を scipy.stats で実行する。 帰無仮説「平均が等しい」の検証であり、 p < 0.05 で有意差ありと判定するのが慣例。
📥 入力例(SSDSE-B-2026 の 2023 年・47 都道府県から 3 行)
都道府県 B4101(年平均気温)
北海道 11.0
東京都 17.6
沖縄県 23.8
…(全 47 行)
📋 コピー 1
2
3
4
5
6
7
8
9
10
11
12 import pandas as pd
from scipy import stats
df = pd . read_csv ( 'data/raw/SSDSE-B-2026.csv' , encoding = 'cp932' , skiprows = [ 1 ])
df = df [ df [ 'SSDSE-B-2026' ] == 2023 ]
# 東日本(北海道-静岡) vs 西日本(愛知-沖縄) の年平均気温を比較
east = df . iloc [: 24 ][ 'B4101' ]
west = df . iloc [ 24 :][ 'B4101' ]
t_stat , p_value = stats . ttest_ind ( east , west , equal_var = True )
print ( f 't = { t_stat : .3f } , p = { p_value : .4f } ' )
print ( f '東日本平均 = { east . mean () : .2f } ℃, 西日本平均 = { west . mean () : .2f } ℃' )
📤 実行例(実測)
t = -4.106, p = 0.0002
東日本平均 = 15.77℃, 西日本平均 = 17.88℃
💬 読み方: t 値の絶対値が大きい(>2 程度)かつ p < 0.05 で「差は偶然では説明しにくい」。 ただし「有意=実用的に大きい」とは限らない(効果量 Cohen's d も併用)。 等分散仮定が怪しい場合は Welch t 検定(equal_var=False)を使う。
🔁 5. 対応のあるt検定
同じ個体に対して 2 回測定した結果を比較する。 例:薬投与の前後、 訓練の前後。
検定統計量
個体ごとの差 $d_i = x_{1i} - x_{2i}$ について:
$$t = \frac{\bar{d}}{s_d / \sqrt{n}}, \quad \nu = n - 1$$
各個体内で「個人差」がキャンセルされるため、 独立2標本より検出力が高い。
🎯 解説: SSDSE-B-2026 を題材に、 2 群間の平均差を検定する t 検定(独立 2 標本/対応あり/1 標本)を scipy.stats で実行する。 帰無仮説「平均が等しい」の検証であり、 p < 0.05 で有意差ありと判定するのが慣例。
📥 入力例(SSDSE-B-2026 の 2023 年・47 都道府県から 3 行)
都道府県 B4101(年平均気温)
北海道 11.0
東京都 17.6
沖縄県 23.8
…(全 47 行)
📋 コピー import pandas as pd
from scipy import stats
# 各都道府県の年平均気温を 2013年 と 2023年 で対応比較(同一県=対応データ)
df = pd . read_csv ( 'data/raw/SSDSE-B-2026.csv' , encoding = 'cp932' , skiprows = [ 1 ])
y2013 = df [ df [ 'SSDSE-B-2026' ] == 2013 ] . set_index ( 'Prefecture' )[ 'B4101' ]
y2023 = df [ df [ 'SSDSE-B-2026' ] == 2023 ] . set_index ( 'Prefecture' )[ 'B4101' ]
y2013 , y2023 = y2013 . align ( y2023 , join = 'inner' ) # 県で対応づけ
t_stat , p_value = stats . ttest_rel ( y2023 , y2013 )
print ( f 't = { t_stat : .3f } , p = { p_value : .4f } , 平均差 = { ( y2023 - y2013 ) . mean () : .2f } ℃' )
📤 実行例(実測)
t = 17.325, p = 0.0000, 平均差 = 1.19℃
💬 読み方: t 値の絶対値が大きい(>2 程度)かつ p < 0.05 で「差は偶然では説明しにくい」。 ただし「有意=実用的に大きい」とは限らない(効果量 Cohen's d も併用)。 等分散仮定が怪しい場合は Welch t 検定(equal_var=False)を使う。
⚖️ 6. Welchのt検定(実務既定)
等分散を仮定しない 2 標本t検定。 自由度を Welch–Satterthwaite 近似で計算。
$$t = \frac{\bar{x}_1 - \bar{x}_2}{\sqrt{s_1^2/n_1 + s_2^2/n_2}}$$
$$\nu \approx \frac{(s_1^2/n_1 + s_2^2/n_2)^2}{(s_1^2/n_1)^2/(n_1-1) + (s_2^2/n_2)^2/(n_2-1)}$$
SciPy の ttest_ind は equal_var=False を指定すると Welch(実務では既定的にこちらを使う)。
🎯 解説: SSDSE-B-2026 を題材に、 2 群間の平均差を検定する t 検定(独立 2 標本/対応あり/1 標本)を scipy.stats で実行する。 帰無仮説「平均が等しい」の検証であり、 p < 0.05 で有意差ありと判定するのが慣例。
📋 コピー from scipy import stats
t_stat , p_value = stats . ttest_ind ( east , west , equal_var = False )
print ( f 'Welch t = { t_stat : .3f } , p = { p_value : .4f } ' )
📤 実行例(実測)
Welch t = -4.130, p = 0.0002
💬 読み方: t 値の絶対値が大きい(>2 程度)かつ p < 0.05 で「差は偶然では説明しにくい」。 ただし「有意=実用的に大きい」とは限らない(効果量 Cohen's d も併用)。 等分散仮定が怪しい場合は Welch t 検定(equal_var=False)を使う。
R との対応
R の t.test() の既定は Welch である。 SciPy も実務的に Welch を既定にすべきとされる。
📋 7. 前提条件
前提
確認方法
違反したら
正規性 QQ プロット・Shapiro–Wilk n≥30 なら CLT で頑健 / Mann–Whitney U / 並べ替え検定
等分散性 Levene 検定・F検定 Welchを使う
独立性 サンプリング設計を確認 混合効果モデル等
外れ値の影響 箱ひげ図 中央値検定や頑健統計
🎯 解説: SSDSE-B-2026 を題材に、 2 群間の平均差を検定する t 検定(独立 2 標本/対応あり/1 標本)を scipy.stats で実行する。 帰無仮説「平均が等しい」の検証であり、 p < 0.05 で有意差ありと判定するのが慣例。
📋 コピー from scipy import stats
# 正規性
print ( 'Shapiro east:' , stats . shapiro ( east ))
print ( 'Shapiro west:' , stats . shapiro ( west ))
# 等分散性
print ( 'Levene:' , stats . levene ( east , west ))
📤 実行例(実測)
Shapiro east: ShapiroResult(statistic=np.float64(0.9156214003414235), pvalue=np.float64(0.04677871942068713))
Shapiro west: ShapiroResult(statistic=np.float64(0.6971434155426495), pvalue=np.float64(1.2856143451481795e-05))
Levene: LeveneResult(statistic=np.float64(3.450196654861491), pvalue=np.float64(0.06979547843605204))
💬 読み方: t 値の絶対値が大きい(>2 程度)かつ p < 0.05 で「差は偶然では説明しにくい」。 ただし「有意=実用的に大きい」とは限らない(効果量 Cohen's d も併用)。 等分散仮定が怪しい場合は Welch t 検定(equal_var=False)を使う。
t 検定は「推測統計・検定」グループの中核教材。 SSDSE-B-2026 を題材にした実装ハンズオンは以下から辿れます。
同カテゴリの他用語(正規分布、 標準誤差、 検定統計量、 棄却域)と合わせて学ぶと、 t 検定単独では見えない「検定理論の全体像」が掴めます。
📚 t 検定 完全攻略補足
t 検定 Student Welch 対応のあるt 平均の差 p 値 効果量 SSDSE-B-2026 正規性 等分散
🔬 数式を言葉で読み解く(拡張 narration)
🔬 数式を言葉で読み解く(narration): A1101 → 総人口(千人)。 分析の分母 になる基本量です。A1303 → 65 歳以上人口。 高齢化率を産む分子 。A1201 → 15 〜 64 歳人口(生産年齢人口)。 経済活動の主体。μ → 全国平均。 比較基準 として用います。α → 有意水準。 第一種の誤り 許容率(t 検定 に関する判断で重要)。p → p 値。 H₀ の下でデータがどれだけ稀かを示す。
📐 補足の数式と読み解き 基本量の関係を、 記号 → 意味で整理します。 任意の比率は
$$\text{比率} = \frac{\text{分子}}{\text{分母}} \times 100\quad\text{単位: }\%$$
記号 → 意味:
分子 → SSDSE では A1303(65歳以上人口) 分母 → SSDSE では A1101(総人口) ×100 → 単位を「割合(小数)」から「%」に変える 平均と分散は
$$\bar{x} = \frac{1}{n}\sum_{i=1}^{n} x_i,\quad s^2 = \frac{1}{n-1}\sum_{i=1}^{n}(x_i - \bar{x})^2$$
t 統計量・効果量は
$$t = \frac{\bar{x}_1 - \bar{x}_2}{\sqrt{s_1^2/n_1 + s_2^2/n_2}},\quad d = \frac{\bar{x}_1 - \bar{x}_2}{s_{\text{pooled}}}$$
🧮 実値で計算してみる — SSDSE-B-2026 47 都道府県
SSDSE-B-2026 の都道府県データから t 検定 の文脈で代表値を読み取ります。 各列の記号 → 意味を確認し、 平均・中央値・四分位を併記する習慣を身につけましょう。
都道府県 総人口(千) 65歳以上人口(千) 高齢化率(%) 記号 → 意味 秋田県 945 370 39.1 A1101 → 総人口 / A1303 → 高齢者 / 比率 → 高齢化率 東京都 14,047 3,193 22.7 巨大分母 → 平均を引き上げる外れ値の典型 沖縄県 1,467 323 22.0 若い人口構造 → 全国最低の高齢化率 大阪府 8,838 2,420 27.4 大都市圏の中位 → 比較基準として有用 島根県 658 231 35.1 人口減少地域 → 分母縮小型の高齢化
🐍 Python 実装 — 高齢化率で 4 種の t 検定
Welch の t 検定 — 高齢化率(東日本 vs 西日本)の比較 🎯 SSDSE-B-2026(都道府県データ)を t 検定 の文脈で読み解く実値計算例。 各セルの記号 → 意味(A1101 → 総人口, A1303 → 65 歳以上人口)を確認しながら手元の Jupyter で実行できます。
📥 入力例(SSDSE-B-2026 の 2023 年・47 都道府県から 3 行)
都道府県 A1101(総人口) A1303(65歳以上人口)
北海道 5,092,000 1,681,000
東京都 14,086,000 3,205,000
沖縄県 1,468,000 350,000
…(全 47 行)
📋 コピー import pandas as pd
from scipy import stats
df = pd . read_csv ( 'data/raw/SSDSE-B-2026.csv' , encoding = 'cp932' , skiprows = [ 1 ])
df [ 'aging' ] = df [ 'A1303' ] / df [ 'A1101' ] * 100
west = [ '滋賀県' , '京都府' , '大阪府' , '兵庫県' , '奈良県' , '和歌山県' , '鳥取県' , '島根県' , '岡山県' , '広島県' , '山口県' , '徳島県' , '香川県' , '愛媛県' , '高知県' , '福岡県' , '佐賀県' , '長崎県' , '熊本県' , '大分県' , '宮崎県' , '鹿児島県' , '沖縄県' ]
g_w = df [ df [ 'Prefecture' ] . isin ( west )][ 'aging' ]
g_e = df [ ~ df [ 'Prefecture' ] . isin ( west )][ 'aging' ]
t , p = stats . ttest_ind ( g_e , g_w , equal_var = False )
print ( f 't= { t : .3f } , p= { p : .4f } ' )
📤 実行例(実測)
t=-2.988, p=0.0029
📥 入力: data/raw/SSDSE-B-2026.csv(47 都道府県 × 主要統計列)。 出力例は数値・p 値・統計量で、 解釈には「実値で計算してみる → 仮説検定 → 効果量 → 結論」の流れを推奨します。
対応のある t 検定 — 各県の昼夜人口の差 🎯 SSDSE-B-2026(都道府県データ)を t 検定 の文脈で読み解く実値計算例。 各セルの記号 → 意味(A1101 → 総人口, A1303 → 65 歳以上人口)を確認しながら手元の Jupyter で実行できます。
📋 コピー import pandas as pd
from scipy import stats
# A1101: 総人口(常住), A1102: 昼間人口(あれば)
day = df [ 'A1101' ] # 常住人口
night = df [ 'A1101' ] * 0.95 # 仮の昼夜比でデモ
t , p = stats . ttest_rel ( day , night )
print ( f '対応のあるt: t= { t : .3f } , p= { p : .4f } ' )
📤 実行例(実測)
対応のあるt: t=23.399, p=0.0000
📥 入力: data/raw/SSDSE-B-2026.csv(47 都道府県 × 主要統計列)。 出力例は数値・p 値・統計量で、 解釈には「実値で計算してみる → 仮説検定 → 効果量 → 結論」の流れを推奨します。
Cohen's d で効果量を算出 🎯 SSDSE-B-2026(都道府県データ)を t 検定 の文脈で読み解く実値計算例。 各セルの記号 → 意味(A1101 → 総人口, A1303 → 65 歳以上人口)を確認しながら手元の Jupyter で実行できます。
📋 コピー import numpy as np
m1 , m2 = g_e . mean (), g_w . mean ()
s1 , s2 = g_e . std ( ddof = 1 ), g_w . std ( ddof = 1 )
n1 , n2 = len ( g_e ), len ( g_w )
sp = np . sqrt ((( n1 - 1 ) * s1 ** 2 + ( n2 - 1 ) * s2 ** 2 ) / ( n1 + n2 - 2 ))
d = ( m1 - m2 ) / sp
print ( f "Cohen's d = { d : .3f } " ) # 0.2 小, 0.5 中, 0.8 大
📤 実行例(実測)
Cohen's d = -0.252
📥 入力: data/raw/SSDSE-B-2026.csv(47 都道府県 × 主要統計列)。 出力例は数値・p 値・統計量で、 解釈には「実値で計算してみる → 仮説検定 → 効果量 → 結論」の流れを推奨します。
検定の前提を全部チェック(実値で計算してみる) 🎯 SSDSE-B-2026(都道府県データ)を t 検定 の文脈で読み解く実値計算例。 各セルの記号 → 意味(A1101 → 総人口, A1303 → 65 歳以上人口)を確認しながら手元の Jupyter で実行できます。
📋 コピー from scipy import stats
print ( 'Shapiro 正規性 east:' , stats . shapiro ( g_e ))
print ( 'Shapiro 正規性 west:' , stats . shapiro ( g_w ))
print ( 'Levene 等分散:' , stats . levene ( g_e , g_w ))
📤 実行例(実測)
Shapiro 正規性 east: ShapiroResult(statistic=np.float64(0.9922590135221308), pvalue=np.float64(0.13844264982270046))
Shapiro 正規性 west: ShapiroResult(statistic=np.float64(0.9695292199411693), pvalue=np.float64(1.3310559921148322e-05))
Levene 等分散: LeveneResult(statistic=np.float64(0.03818181250319859), pvalue=np.float64(0.8451491340274265))
📥 入力: data/raw/SSDSE-B-2026.csv(47 都道府県 × 主要統計列)。 出力例は数値・p 値・統計量で、 解釈には「実値で計算してみる → 仮説検定 → 効果量 → 結論」の流れを推奨します。
❓ よくある質問 (FAQ)
どの t 検定を使えばよい? 2 群独立かつ等分散仮定が成り立つなら Student、 そうでなければ Welch を既定で。 同じ対象の前後比較なら paired t(対応のある t)。
正規性が崩れていたら? サンプル数が大きい(n≥30 程度)と中心極限定理で頑健ですが、 小標本かつ歪みが強いなら Wilcoxon/Mann-Whitney を検討。
片側と両側の使い分けは? 事前に方向の仮説を理論的に固定できるときのみ片側。 通常は両側を既定にします。
p<0.05 で勝利と言える? p 値だけでなく効果量(Cohen's d)と信頼区間、 サンプルサイズの計画を併記してください。
等分散仮定はどう確認? F 検定や Levene 検定。 等分散がはっきりしない場合は最初から Welch を使うのが実務的に安全。
⚠️ 拡張版 落とし穴チェックリスト 分母を確認しない罠 : 比率や率の意味は分母で決まります。 SSDSE で「per 1000」と「per 100」を取り違えると桁違いになります。外れ値の影響 : 東京都が平均値を引き上げる効果は実際に大きく、 中央値との乖離を必ず併記しましょう。因果と相関の混同 : 高齢化率と平均所得が相関しても、 因果は別問題。 第三変数(産業構造・気候)の介在を疑います。選択バイアス : 「都市部のサンプルだけ」では地方の構造が見えません。 47 都道府県すべてを観察しましょう。多重比較 : 47 都道府県を一斉比較すると α=0.05 でも約 2.35 件は偶然有意。 Bonferroni 等の補正が必須です。時点ずれ : SSDSE-B-2026 と 国勢調査 2020 では基準時点が異なります。 同期した比較が必要。t 検定 特有の文脈ずれ : 教育用に正規化したサンプルと現場データの落差。 単位・桁・カテゴリを揃える前処理が肝心。
🔗 関連用語(前提・並列・発展)
t 検定 を中心に、 前提概念・並列分野・発展手法へリンクします。
📚 関連グループ教材
グループ教材から t 検定 の文脈に直結する論文・ハンズオンを辿れます。
🕰 歴史的背景と現代 t 検定 は古典統計と社会データの交差点で発達してきました。 19 世紀末から 20 世紀初頭にかけて Pearson, Fisher, Neyman などが基礎を整え、 戦後の公的統計整備により実務応用が広がりました。
2010 年代以降は、 「再現性危機」「ビッグデータ」「AI 倫理」の三つの波が t 検定 に新しい意味を与えました。 単に p<0.05 を出すのではなく、 効果量・信頼区間・事前登録・データシートが必須となっています。
日本では総務省統計局・国立社会保障人口問題研究所・経済産業省 RESAS などが公的統計を整備し、 教育用に SSDSE が無償公開されました。 本ページもこの枠組みで t 検定 を扱います。
📚 参考リンク 総務省統計局 e-Stat https://www.e-stat.go.jp/ SSDSE 公開ページ https://www.nstac.go.jp/use/literacy/ssdse/ scipy.stats 公式ドキュメント https://docs.scipy.org/doc/scipy/reference/stats.html statsmodels 公式 https://www.statsmodels.org/ JIS Q 38507 / ISO/IEC 22989(AI 用語) OECD Principles on AI(2019)
🌐 関連手法・派生(広域マップ)
同じカテゴリの手法、 上位概念、 派生分野へのリンクを補強します。
📚 t 検定 追加演習と詳細解説
🧮 実値で計算してみる — SSDSE-B-2026 拡張ケーススタディ
t 検定 を SSDSE-B-2026 の 47 都道府県データで多角的に検証します。 ここでは(1)地域グルーピング、 (2)時系列推移の近似、 (3)リスク評価指標の三つを順に扱います。
ケース 1: 9 地域ブロック × t 検定
SSDSE-B-2026 の都道府県を北海道・東北・関東・中部・近畿・中国・四国・九州・沖縄の 9 ブロックに集約して比較します。 ブロック内分散とブロック間分散の比から t 検定 の構造を観察できます。
📥 入力例(SSDSE-B-2026 の 2023 年・47 都道府県から 3 行)
都道府県 A1101(総人口) A1303(65歳以上人口)
北海道 5,092,000 1,681,000
東京都 14,086,000 3,205,000
沖縄県 1,468,000 350,000
…(全 47 行)
📋 コピー 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 import pandas as pd
df = pd . read_csv ( 'data/raw/SSDSE-B-2026.csv' , encoding = 'cp932' , skiprows = [ 1 ])
df [ 'aging' ] = df [ 'A1303' ] / df [ 'A1101' ] * 100
block_map = {
'北海道' : '北海道' , '青森県' : '東北' , '岩手県' : '東北' , '宮城県' : '東北' , '秋田県' : '東北' , '山形県' : '東北' , '福島県' : '東北' ,
'茨城県' : '関東' , '栃木県' : '関東' , '群馬県' : '関東' , '埼玉県' : '関東' , '千葉県' : '関東' , '東京都' : '関東' , '神奈川県' : '関東' ,
'新潟県' : '中部' , '富山県' : '中部' , '石川県' : '中部' , '福井県' : '中部' , '山梨県' : '中部' , '長野県' : '中部' , '岐阜県' : '中部' , '静岡県' : '中部' , '愛知県' : '中部' ,
'三重県' : '近畿' , '滋賀県' : '近畿' , '京都府' : '近畿' , '大阪府' : '近畿' , '兵庫県' : '近畿' , '奈良県' : '近畿' , '和歌山県' : '近畿' ,
'鳥取県' : '中国' , '島根県' : '中国' , '岡山県' : '中国' , '広島県' : '中国' , '山口県' : '中国' ,
'徳島県' : '四国' , '香川県' : '四国' , '愛媛県' : '四国' , '高知県' : '四国' ,
'福岡県' : '九州' , '佐賀県' : '九州' , '長崎県' : '九州' , '熊本県' : '九州' , '大分県' : '九州' , '宮崎県' : '九州' , '鹿児島県' : '九州' ,
'沖縄県' : '沖縄'
}
df [ 'block' ] = df [ 'Prefecture' ] . map ( block_map )
print ( df . groupby ( 'block' )[ 'aging' ] . agg ([ 'mean' , 'std' , 'min' , 'max' ]))
📤 実行例(実測)
mean std min max
block
中国 30.885325 2.620121 25.183888 35.362096
中部 29.123906 2.671748 21.410308 33.866416
九州 29.976094 2.617774 23.305168 34.333070
北海道 30.327014 2.342641 26.020128 33.012569
四国 32.077715 2.344783 27.098079 36.336336
東北 31.290476 3.530200 22.928295 39.059081
沖縄 20.973425 2.048332 17.717931 23.841962
近畿 28.260015 2.715462 21.640736 34.192825
関東 26.102699 2.632884 21.248300 30.967403
ケース 2: 時系列の単純外挿で 2040 年を予測
過去 50 年の高齢化率推移は近似的に直線(やや上に凸)です。 線形外挿で 2030 / 2040 / 2050 年の値を推定し、 t 検定 の将来像を可視化します。
📋 コピー import numpy as np
years = [ 1970 , 1980 , 1990 , 2000 , 2010 , 2020 ]
rate = [ 7.1 , 9.1 , 12.1 , 17.4 , 23.0 , 28.6 ] # 厚労省・統計局公表値
coef = np . polyfit ( years , rate , 2 )
for y in [ 2030 , 2040 , 2050 ]:
print ( f ' { y } 年予測: { np . polyval ( coef , y ) : .1f } %' )
📤 実行例(実測)
2030 年予測: 36.4%
2040 年予測: 44.9%
2050 年予測: 54.4%
ケース 3: リスクスコア — 都道府県の t 検定 観点での順位
複数指標を z 標準化し、 単純合成スコアで都道府県をランキングします。 重み付けの工夫により t 検定 の優先度を可変にできます。
📋 コピー import pandas as pd
cols = [ 'A1101' , 'A1303' ]
z = ( df [ cols ] - df [ cols ] . mean ()) / df [ cols ] . std ()
df [ 'risk_score' ] = z [ 'A1303' ] - 0.5 * z [ 'A1101' ]
print ( df [[ 'Prefecture' , 'aging' , 'risk_score' ]] . sort_values ( 'risk_score' , ascending = False ) . head ( 10 ))
📤 実行例(実測)
Prefecture aging risk_score
148 東京都 22.909974 1.705840
149 東京都 22.963923 1.697275
146 東京都 22.855103 1.694603
145 東京都 22.809517 1.689477
144 東京都 22.753088 1.685269
150 東京都 22.951772 1.674785
151 東京都 22.863843 1.636051
147 東京都 22.123518 1.543931
153 東京都 22.471826 1.514854
314 大阪府 27.731092 1.487033
🔬 数式を言葉で読み解く — 演習問題
SSDSE-B-2026 の A1101 と A1303 の意味 を言葉で答えなさい。(記号 → 意味)
「高齢化率=A1303 / A1101」を秋田県のデータで具体的に計算しなさい。 答え: 約 39%。
東京都・沖縄県・全国平均の三つを比較したとき、 どちらが t 検定 の「外れ値」と呼べるか説明しなさい。
p<0.05 を採用したとき、 47 都道府県の同時検定で偶然有意になる期待件数を求めなさい。 答え: 47 × 0.05 ≈ 2.35。
Bonferroni 補正後の有意水準を答えなさい。 答え: 0.05 / 47 ≈ 0.001。
t 検定 を実務で使うときに最も避けるべき落とし穴を一つ挙げ、 対策を述べなさい。
🌐 関連手法・派生(広域マップ追補)
同じカテゴリの隣接概念、 派生分野、 上位概念へのリンクを補強します。
📚 関連グループ教材(追補)
⚠️ 落とし穴(追加 3 件)
サンプルサイズが小さい 状況での過大解釈。 47 都道府県だけでは全国推定に向かないことがある。
カテゴリ分け(cut) の閾値で結論が変わる。 WHO 区分の 7/14/21% は便宜的で、 学術的根拠は限定。
時間軸の解像度不足 。 単年データだけでは構造変化を見逃す。 SSDSE 過去版も併用しよう。
📐 数式または定義 — 補足公式
95% 信頼区間と検出力の式を併記します。
$$\text{CI}_{95\%} = \bar{x} \pm 1.96 \frac{s}{\sqrt{n}}$$
記号 → 意味:
\(\bar{x}\) → 標本平均
\(s\) → 標本標準偏差
\(n\) → 標本サイズ
\(1.96\) → 標準正規分布の上側 2.5% 点
🎨 直感で掴む — もう一つの比喩
t 検定 を「カメラの絞り」に例えると、 絞りを開けすぎると(α を大きくすると)光(偽陽性)が入りすぎ、 絞りすぎると(α を小さくすると)暗くなって何も写らない(偽陰性増加)。 適度な絞り=適度な α を、 撮影条件=研究設計に応じて決める作業が統計的判断です。
🐍 Python 実装 — 標本生成と検定の一気通貫
📥 入力例(SSDSE-B-2026 の 2023 年・47 都道府県から 3 行)
都道府県 A1101(総人口) A1303(65歳以上人口)
北海道 5,092,000 1,681,000
東京都 14,086,000 3,205,000
沖縄県 1,468,000 350,000
…(全 47 行)
📋 コピー 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 import pandas as pd
from scipy import stats
df = pd . read_csv ( 'data/raw/SSDSE-B-2026.csv' , encoding = 'cp932' , skiprows = [ 1 ])
df [ 'aging' ] = df [ 'A1303' ] / df [ 'A1101' ] * 100
# 全国平均との一群比較
t , p = stats . ttest_1samp ( df [ 'aging' ], 29.0 )
print ( f 't= { t : .3f } / p= { p : .4f } ' )
# 効果量
d = ( df [ 'aging' ] . mean () - 29.0 ) / df [ 'aging' ] . std ()
print ( f "Cohen's d = { d : .3f } " )
# 95% 信頼区間
import numpy as np
m , s , n = df [ 'aging' ] . mean (), df [ 'aging' ] . std (), len ( df )
ci = ( m - 1.96 * s / np . sqrt ( n ), m + 1.96 * s / np . sqrt ( n ))
print ( f '95% CI = { ci } ' )
📤 実行例(実測)
t=1.636 / p=0.1023
Cohen's d = 0.069
95% CI = (np.float64(28.95259387233837), np.float64(29.526878016427027))
📈 補講: t 検定 を「分布の重なり」で読み解く
t 検定 の出力 (t 値・p 値・自由度) は数字だけ見ると「合格・不合格」の二値判定になりがちですが、 内部では 「観測差が偶然のばらつきと比べてどれだけ大きいか」 を t 分布上で重なり面積として評価しています。 本補講では、 SSDSE-B-2026 の都道府県データを題材に、 観測 t 値・両側 p 値・効果量 Cohen's d・サンプルサイズ依存性を 3 枚の図と 1 表で可視化し、 「なぜ同じ平均差でも n が大きいと有意になるのか」「効果量が小さくても有意な結果は実務的に意味があるのか」を整理します。 検定結果を表にするだけでなく、 図で重なり面積を確認することで、 報告書の説得力が大きく高まります。
▶ 3 枚の図で「重なり」を直感する
図 R279-1: t 検定の重なり構造。 観測 t 値が両側棄却域 (灰色) に入るかが判定の核心。 自由度 n-1 が大きいほど t 分布は標準正規分布に近づき、 棄却限界 ±1.96 に漸近する。
上図のように、 t 分布の裾に観測 t 値が落ち込むほど p 値は小さくなります。 例えば SSDSE-B-2026 (2023 年) で「東日本 24 県と西日本 23 県の年間降水量 (B4109) に差はあるか」を Welch t 検定で評価すると、 t = -1.67、 p = 0.101、 Cohen's d = -0.49 となり、 α = 0.05 でも 0.10 でも非有意だが p ≈ 0.10 の「境界」、 効果量は中程度 (|d| ≈ 0.5) という「境界例」が頻出します。 こうした場合、 「有意ではなかった」と一刀両断するのではなく、 信頼区間と効果量を併記し、 「サンプルを 70 県程度に拡張すれば有意域に入る可能性が高い」と将来計画まで提示するのが実務基準です。
図 R279-2: 自由度 df=5/10/30/∞ の t 分布。 df が小さいほど裾が厚く、 同じ t 値でも p 値は大きくなる。 47 都道府県 (n=47, df=46) の解析は実質的に正規分布と一致する。
自由度が 5 と 30 では、 同じ t = 2.0 でも両側 p 値は 0.10 と 0.054 と大きく異なります。 47 都道府県データのように df=46 程度になれば、 t 分布と標準正規分布の差は実務上無視できる範囲です。 一方、 PoC や臨床試験で n=10 前後しか取れない場合、 t 値を Z 表で読むと p 値を 過小評価 し、 第一種の誤りを増やします。 サンプルサイズが小さい時こそ、 t 分布表 (または scipy.stats.t.cdf) を厳密に使うべきです。
図 R279-3: p 値は「帰無仮説が真の世界で、 観測 t 値以上に極端な結果が偶然出る確率」。 「帰無仮説が真である確率」ではない点に注意 (頻繁な誤解)。
p 値は 頻度論的 な概念で、 「同じ研究を無限回繰り返したとき、 観測差以上に極端な結果が偶然得られる割合」を意味します。 「H0 が正しい確率が p%」ではありません。 この誤解が「p=0.04 なので H0 は 4% しか正しくない」という誤った言い換えを生み、 ASA (米国統計学会) の 2016 年声明で公式に警告されています。 本ページでは scipy.stats.ttest_ind 等の出力を、 信頼区間・効果量・図示と並べて報告することを推奨します。
▶ サンプルサイズ別の p 値・有意判定の早見表
標本平均差 Δ SD n=10 n=30 n=47 (都道府県) n=200 d (Cohen)
0.5% 2.0% p=0.45 (非有意) p=0.18 (非有意) p=0.10 (境界) p=0.014 (有意) 0.25 (小)
1.0% 2.0% p=0.13 (非有意) p=0.008 (有意) p=0.001 (有意) p≈0 (有意) 0.50 (中)
2.0% 2.0% p=0.008 (有意) p≈0 (有意) p≈0 (有意) p≈0 (有意) 1.00 (大)
0.2% 2.0% p=0.76 (非有意) p=0.59 (非有意) p=0.49 (非有意) p=0.16 (非有意) 0.10 (極小)
表から分かるように、 効果量が小さくても n が大きいと p 値は小さくなり、 「統計的に有意 ≠ 実務的に意味がある」 状況が頻発します。 47 都道府県データはちょうど中間サイズで、 中程度効果量 (d=0.5) が境界の有意域に来やすい設計です。 報告では 「有意・非有意」「効果量 d」「95% 信頼区間」 の三点セットを必ず併記しましょう。
▶ Python で 4 種類の t 検定を一括比較
このコードでやること : SSDSE-B-2026 の高齢化率を題材に、 (1) 一群 t 検定 (全国平均との比較)、 (2) 等分散 t 検定 (Student)、 (3) Welch t 検定 (分散不等)、 (4) 対応のある t 検定 (paired) の 4 種類を scipy.stats でまとめて実行し、 違いを表示する。
📥 入力データ (SSDSE-B-2026 の先頭 3 行を抜粋):
SSDSE-2026 都道府県 A1101(総人口) A1303(65歳以上)
R01000 北海道 5181776 1696512
R02000 青森県 1227000 428000
R13000 東京都 14040732 3198000
...
(47 行)
📋 コピー
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 import pandas as pd
from scipy import stats
df = pd . read_csv ( 'data/raw/SSDSE-B-2026.csv' , encoding = 'cp932' , skiprows = [ 1 ])
df = df [ df [ 'SSDSE-B-2026' ] == 2023 ] . copy ()
df [ 'aging' ] = df [ 'A1303' ] / df [ 'A1101' ] * 100
# (1) 一群 t 検定: 高齢化率が基準値 30% と等しいか
t1 , p1 = stats . ttest_1samp ( df [ 'aging' ], 30.0 )
# (2)(3) 二群 t 検定: 東日本 (北海道〜静岡) vs 西日本 (愛知〜沖縄)
east = df . iloc [: 24 ][ 'aging' ]
west = df . iloc [ 24 :][ 'aging' ]
t2 , p2 = stats . ttest_ind ( east , west , equal_var = True ) # Student
t3 , p3 = stats . ttest_ind ( east , west , equal_var = False ) # Welch
# (4) 対応のある t 検定: 同一県で 高齢化率(A1303) と 年少人口割合(A1301) を比較
df [ 'young' ] = df [ 'A1301' ] / df [ 'A1101' ] * 100
t4 , p4 = stats . ttest_rel ( df [ 'aging' ], df [ 'young' ])
print ( f '(1) 一群 t= { t1 : .3f } p= { p1 : .4f } ' )
print ( f '(2) Student t= { t2 : .3f } p= { p2 : .4f } ' )
print ( f '(3) Welch t= { t3 : .3f } p= { p3 : .4f } ' )
print ( f '(4) Paired t= { t4 : .3f } p= { p4 : .4f } ' )
📤 実行すると次の出力が得られる:
(1) 一群 t=3.257 p=0.0021
(2) Student t=-0.891 p=0.3776
(3) Welch t=-0.894 p=0.3763
(4) Paired t=34.924 p=0.0000
💬 結果の読み方 : (1) 高齢化率 (平均 31.6%) は基準値 30% と有意差あり (p=0.002)。 (2)(3) 高齢化率の東西比較は非有意 (p≈0.38)、 Student と Welch は分散がほぼ等しいためほぼ同じ結果。 (4) 対応のある t 検定は同じ都道府県内で高齢化率と年少人口割合を比べるので差が明確で t 値が極めて大きく出る (期待通り)。 報告書には 4 種類のうち 研究設計に合うもの 1 つを選ぶ理由を必ず明記すること。
▶ 4 タイプの t 検定 — 使い分け早見表
タイプ scipy 関数 仮定 使う場面
一群 ttest_1samp 正規性 全国平均・規格値との比較
独立二群 (等分散) ttest_ind (equal_var=True) 正規性 + 等分散性 A/B テスト (分散が同じと事前に分かる場合)
独立二群 (Welch) ttest_ind (equal_var=False) 正規性のみ 分散が異なる、 サンプル数が異なる場合の標準選択
対応のある (paired) ttest_rel 差の正規性 前後比較・同一個体の二指標比較
▶ 理解度チェック (R279)
設問 期待される回答
Q1. 47 都道府県 (n=47) の t 検定で自由度はいくつか? 一群なら df=46、 等分散二群 (n1=24, n2=23) なら df=45、 Welch なら近似式で算出 (おおむね 40-45)。
Q2. p=0.04 と p=0.06 の実務的差は? α=0.05 を境に「有意・非有意」と二分するのは便宜的で、 効果量と信頼区間を併記して連続的に評価すべき。 二つの p 値の差は本質的に小さい。
Q3. Welch と Student のどちらを使うべきか? 迷ったら Welch (equal_var=False)。 等分散の事前知識がなければ Welch がデフォルト推奨 (Ruxton 2006)。
Q4. 正規性が崩れている時の代替手段は? Wilcoxon の順位和検定 (独立) または符号付順位検定 (対応のある) を採用。 scipy.stats.mannwhitneyu / wilcoxon。
Q5. 多重比較 (47 都道府県 vs 全国平均) で p 値はどう扱う? Bonferroni 補正 α/47≈0.001、 または Benjamini-Hochberg (FDR) を用いる。 単純な p<0.05 では偽陽性が増える。
本補講で扱った要素は t 検定 、 仮説検定 、 p 値 、 効果量 、 信頼区間 、 ANOVA 、 F 検定 、 正規性 、 多重比較 の各ページと連結し、 統計的検定の現場運用に直結する判断材料となる。
▶ 補講補足: t 検定 を「研究設計」と「報告書」の両面から運用する
t 検定 を実務で適切に運用するには、 検定そのものよりも「研究設計の段階で適切な仮説と検定を予め決めておく (事前登録)」「結果を p 値だけでなく多面的に報告する」 という前後の工程が圧倒的に重要です。 ここでは t 検定 を中心とする統計的検定の運用について、 (1) 事前登録 (pre-registration) の文化と意義、 (2) 標本設計と検出力分析、 (3) 多重比較の罠と現実的補正、 (4) 報告書テンプレートの実例、 (5) 査読・社内レビューで指摘される典型ミス、 の 5 観点で整理します。 これらは個別の用語ページとして 仮説検定 、 効果量 、 サンプルサイズ 、 多重比較 等で展開済みですが、 t 検定 を実装する瞬間に思い出すべき統合的視点として補講します。
(1) 事前登録 (pre-registration) の文化と意義 : 解析の自由度 (researcher degrees of freedom) は p 値の信頼性を蝕みます。 同じデータに対して「等分散 t 検定 → 非有意 → Welch → 有意」 のように検定を渡り歩く、 「外れ値除外で有意 → 除外せずに非有意 → 除外を採用」 のように前処理を選び、 出た結果を後付けで仮説化する (HARKing) などの行為は、 結果として α インフレ (見かけの第一種誤り率の急増) を生みます。 事前登録は、 仮説・検定・サンプルサイズ・除外基準を データ収集前 に文書化し、 公開リポジトリ (OSF, AsPredicted など) に登録する文化で、 心理学の再現性危機 (2015 Open Science Collaboration) 以降、 学術界で急速に普及しています。 ビジネス用途でも、 A/B テスト開始前に「検定・成功基準・終了条件」を社内 wiki に書いておくだけで、 ステークホルダー間の「途中で目標を動かす」摩擦を減らせます。
(2) 標本設計と検出力分析 : 「検定したら有意でした」 という後付け解析と、 「有意になるように標本を設計しました」 という事前設計では信頼性が桁違いです。 検出力分析 (statistical power analysis) は、 効果量 d, 有意水準 α, 検出力 1-β を指定したときの必要サンプル数 n を計算する手法で、 t 検定 では Cohen (1988) の早見表が古典的です。 例えば d=0.5 (中程度効果量)、 α=0.05 (両側)、 1-β=0.80 (検出力 80%) を求めるなら n=64/群が必要で、 47 都道府県データ (n≈23/群) では検出力 0.50 程度しかありません。 「非有意」 という結果を「効果なし」 と読み替えるためには、 検出力が 0.80 以上は必要で、 さもなければ「効果はあるかもしれないが、 サンプル不足で検出できなかった」 と慎重に書く必要があります。 Python では statsmodels.stats.power.TTestIndPower の solve_power メソッドが使えます。
(3) 多重比較の罠と現実的補正 : 47 都道府県すべてを全国平均と比較する、 8 地方間で全ペア比較する、 100 種類の指標で同時に検定する、 などの状況では、 偶然有意になる結果が大量に発生します。 α=0.05 で 100 回検定すれば偶然有意は期待値 5 件。 Bonferroni 補正 (α / 比較数) は厳しすぎることが多く、 Benjamini-Hochberg (FDR 制御) の方が現実的で、 「100 件中 5 件が偽発見である」 という FDR=5% を保ちつつ、 個別 α を緩めます。 t 検定 を多数併用する場面では、 最初から ANOVA で「全体差」を見て、 有意なときだけ事後検定で個別差を見る 2 段階方式を取れば、 多重比較問題はかなり軽減されます。 重要なのは「何個の検定を実行したか 」を必ず数えて報告すること。 4 つの t 検定 のうち 1 つが p=0.04 で有意なら、 補正後の有効 α は 0.04 × 4 = 0.16 で、 もはや有意ではないかもしれません。
(4) 報告書テンプレートの実例 : 学術論文と実務レポートで共通の最低限報告事項は以下のとおり。 (A) 検定の種類 (Welch t 検定 など)、 (B) 自由度、 (C) 観測 t 値、 (D) p 値 (両側 or 片側を明記)、 (E) 効果量 (Cohen's d など)、 (F) 95% 信頼区間、 (G) 検出力 (事後ではなく事前のものを推奨)、 (H) 採用した α と多重比較補正、 (I) サンプルサイズと標本特徴量、 (J) 前提検定の結果 (正規性・等分散性)。 文章テンプレート: 「東日本 24 県と西日本 23 県の年間降水量を Welch t 検定で比較した結果、 平均差 -258mm (東日本 1517mm、 西日本 1775mm)、 t(44.8) = -1.67、 p = 0.101、 Cohen's d = -0.49、 95% CI = [-568, 53]mm。 α=0.05 では有意差なし。 ただし効果量は中程度、 検出力 0.50 (n=47, d≈0.5) のため Type II 誤りの可能性も否定できない。」 — このように p 値以外の情報 を併記することで、 読者が独自に判断する余地を残せます。
(5) 査読・社内レビューで指摘される典型ミス : 査読論文や社内データレビューで指摘されがちな典型例を整理します。 (a) 「p<0.05 だから有意 → 効果あり」 と短絡 : 効果量と信頼区間も併記すべき。 (b) 「片側検定で p を半分にする」 の事後変更 : 仮説の方向は事前登録すべきで、 結果を見てから片側にするのは違反。 (c) 「正規性を確認せず Student t 検定」 : 分布形を可視化、 Shapiro-Wilk 等で正規性確認、 崩れていれば Welch か Wilcoxon に切替。 (d) 「外れ値除外で有意 → 除外せずに非有意」 を後付け選択 : sensitivity analysis で両方の結果を併記。 (e) 「サンプル増やしたら有意になった」 をそのまま採用 : 「いつでも止める」 オプション付き (sequential testing) なら α インフレ。 SPRT や alpha-spending 関数を使う。 (f) 「群間で異なる単位を直接比較」 : 標準化 (z スコア化) してから比較。 (g) 「対応のあるデータに独立 t 検定」 : 同一個体・前後比較なら paired t 検定 を使う。 これらのチェックリストを毎回確認するだけで、 統計レビューの大半の指摘は事前に防げます。
最後に、 統計的検定は「白黒判定の道具」 ではなく、 「不確実性を構造化して表現する道具」 と捉えるべきです。 p 値、 信頼区間、 効果量、 検出力、 これらをセットで提示することで、 ステークホルダーは「本当に効果があるか」 「効果はどの程度か」 「将来どうすればより確かな結論が得られるか」 を多面的に判断できます。 t 検定 は最も基本的なツールですが、 その背景にあるこうした「不確実性の言語化」 という設計思想は、 ANOVA、 回帰分析、 ベイズ統計、 機械学習評価指標まで、 すべての統計的判断の根幹になります。 t 検定 を実行する一行のコードの背後に、 これだけの設計判断と運用ルールがあることを、 ぜひ意識して使ってください。
関連: 仮説検定 / 効果量 / サンプルサイズ / 有意水準 / 第一種の誤り / 第二種の誤り / 多重比較 / 正規性 / ANOVA / 信頼区間
▶ 補講補足 VII: t 検定 と隣接分野 — 因果推論・ベイズ・機械学習との接続
t 検定 は単独の手法ではなく、 隣接分野との接続を意識すると活用の幅が広がります。 (1) 因果推論との接続 : t 検定 は「群間の平均差」 を検定しますが、 因果推論の文脈では「処置効果 (ATE: Average Treatment Effect)」 を推定する道具として再解釈されます。 ランダム化比較試験 (RCT) では t 検定 が ATE の不偏推定を与えますが、 観察研究では交絡 (confounding) があり、 t 検定 だけでは因果効果を測れません。 傾向スコアマッチングや回帰調整 (ANCOVA) などで交絡を補正してから t 検定 を適用する必要があります。 (2) ベイズ統計との接続 : 頻度論的 t 検定 は「H0 が真の世界での確率」 を扱いますが、 Bayesian t 検定 (BEST: Bayesian Estimation Supersedes the t Test、 Kruschke 2013) は「データを観察した後の平均差の事後分布」 を扱います。 Bayes Factor BF10 を使えば「H0 vs H1 のエビデンスの強さ」 を明示でき、 「非有意」 と「H0 支持」 の区別が可能になります。 PyMC や Stan で実装可能です。 (3) 機械学習評価との接続 : モデル A と B の予測誤差を比較する場面で、 t 検定 (paired t test) や 5×2 cross-validated t test (Dietterich 1998) が使われます。 ただし、 機械学習の予測誤差は通常非正規で、 サンプル間に相関があるため、 t 検定 の前提が崩れることがあり、 ブートストラップ法や順位検定が代替として使われます。 (4) 多変量への拡張 : 2 群で複数指標を同時比較したい場合、 ホテリングの T² 検定 が t 検定 の多変量版で、 MANOVA や Bonferroni 補正と並んで標準ツールです。 (5) 非線形・複雑関係への拡張 : 平均差だけでなく分布全体の差を見たい場合、 Kolmogorov-Smirnov 検定や、 機械学習の MMD (Maximum Mean Discrepancy) などが t 検定 の拡張として使えます。 これらの隣接分野との接続を意識することで、 t 検定 から始まる統計的判断のスキルが、 因果推論・ベイズ・機械学習の中核領域へと自然に発展していきます。 統計初学者がまず t 検定 を学び、 そこから ANOVA、 線形回帰、 ベイズ推定、 因果推論、 機械学習評価指標へと段階的に学んでいけば、 統計的判断の全体像が見えてきます。 t 検定 は最も基本的なツールですが、 その背景にある「不確実性の言語化」 という設計思想は、 すべての統計的・機械学習的判断の根幹になります。 SSDSE-B-2026 のような公的データで実際に t 検定 を実行する経験を積みながら、 同時に「結果の解釈」 「報告書の書き方」 「現代的代替手法」 「社会的責任」 「隣接分野との接続」 までを意識的に学ぶ姿勢が、 質の高いデータ分析・データサイエンスを実現する道筋です。
▶ 補講補足 VI: 統計検定の社会的役割と倫理的留意
t 検定 を含む統計的検定は、 単なる技術ではなく社会的判断の根拠として広く使われています。 医薬品の承認、 政策の効果評価、 教育プログラムの導入判断、 ビジネスの意思決定、 すべてに統計検定が関わります。 この社会的影響を考えると、 統計検定の運用には倫理的留意点があります。 (1) 結果の誇張 : 「p<0.05 で有意 → 効果あり」 を「治療が効く」 「政策が成功」 と過大解釈すると、 社会的に誤った判断を導きます。 効果量・信頼区間・前提条件を必ず添え、 「限定的な状況での統計的判断」 と慎重に記述すべきです。 (2) 非有意の隠蔽 : 製薬業界の臨床試験で、 「効果なし」 という非有意結果が報告されない publication bias が問題視されており、 事前登録による完全公開が国際的に推進されています。 (3) 因果と相関の混同 : t 検定 は「2 群の平均差」 を測りますが、 「群分けが原因」 とは限りません。 「東日本と西日本で高齢化率が違う → 東日本に住むと高齢化が進む」 という因果解釈は誤りで、 群分けは結果 (地理) の代理にすぎません。 (4) 多重比較の隠蔽 : 100 個の指標を検定し、 偶然 5 つ有意になった結果だけを報告するのは、 解析の自由度問題 (p-hacking) で社会的に問題です。 検定数の透明性が必要。 (5) 個人レベルへの誤適用 : 群間で平均が違うからといって、 個人レベルで「東日本の○○さんは西日本の××さんより高齢化が進んでいる」 と推論するのは誤りです。 群レベル統計は個人差を反映しません。 これらの倫理的留意を意識することで、 t 検定 を社会的に責任ある形で運用できます。 統計検定は「技術」 であると同時に「社会的判断の枠組み」 であることを、 教育と実務の両面で強調すべきです。
▶ 補講補足 V: 教材設計の視点 — t 検定 を教えるベストプラクティス
t 検定 を学生・新人データサイエンティストに教える際の効果的アプローチを整理します。 (1) 「公式を覚える」 ではなく「仕組みを描かせる」 : t = (x_bar - μ) / (s/√n) の式を暗記させるのではなく、 (a) なぜ分子が平均差か、 (b) なぜ分母が標準誤差か、 (c) なぜ大きい t が「差あり」 を意味するか、 を絵で描かせると理解が定着します。 「観測差を不確実性 (標準誤差) で割って正規化した値」 という直感的説明が、 公式の本質を伝えます。 (2) 「実データで体感」 が最優先 : SSDSE-B-2026 のような公的データを使って「東日本と西日本の高齢化率は本当に違うか?」 という現実的問いから入ると、 「統計検定が何のためにあるか」 が伝わります。 教科書の架空データではなく、 学生自身が報告書を書ける素材で教えるべきです。 (3) 「p 値の誤解」 を最初から避ける : 「p<0.05 で有意」 を機械的に教えると、 「H0 が 5% 確率で正しい」 という典型的誤解を生みます。 最初から「p 値は H0 が真の世界で観測差以上が偶然出る確率」 と正確に定義し、 効果量と信頼区間を併記する習慣を徹底させるべきです。 (4) 「不確実性の言語化」 として位置づけ : 統計検定を「合格・不合格判定」 ではなく、 「不確実性を構造化して表現する道具」 として教えると、 後の Bayesian 統計や機械学習評価との接続がスムーズになります。 「効果はあるかもしれないが、 サンプル不足で確信できない」 という記述が、 適切な統計的判断であることを学ばせるべきです。 (5) 「現代的代替手法」 を補講で扱う : 入門コースでは頻度論的 t 検定 が中心ですが、 補講で Bayesian t 検定、 ノンパラメトリック検定、 効果量推定、 事前登録などの現代的トピックを扱うことで、 学生が卒業後に学び直す手間を減らせます。 これらの教育設計を意識することで、 t 検定 を「公式」 から「思考の枠組み」 へと進化させることができます。
▶ 補講補足 III: 実務での落とし穴と対処の追加事例
SSDSE-B-2026 の都道府県データで t 検定 を実行する際、 典型的に遭遇する追加の落とし穴を整理します。 (1) 「47 都道府県全体を母集団と見る」 と「全国の母集団から抽出した標本と見る」 の区別 : 47 都道府県は日本の全体を覆う「悉皆データ」 なので、 統計的推測 (sampling inference) の対象ではなく、 「記述統計」 として扱うべきという見解もあります。 一方、 「2026 年の状態は過去・未来から抽出された標本」 と捉えれば、 統計的推測は意味を持ちます。 報告書には「悉皆 vs 抽出」 の解釈を明示すべきです。 (2) 「平均値が有意に違う」 と「実務上意味のある差」 の区別 : SSDSE-B-2026 で東日本と西日本の高齢化率の差が「平均 1.2pt、 p=0.075、 d=0.53」 だったとき、 1.2pt の差は実務的に何を意味するか? 介護施設の必要数で言えば数万人規模、 1 都道府県あたり数千人。 こうした「業務翻訳」 を統計検定に添えることで、 ステークホルダーが意思決定に活かせるレポートになります。 (3) 「同じデータで複数の検定」 → 偶然有意の罠 : SSDSE-B には 100+ の指標があり、 47 都道府県で全指標を t 検定 すれば、 α=0.05 で偶然 5 つは有意になります。 「事前登録」 で検定する指標を絞るか、 多重比較補正 (Bonferroni / FDR) を必ず適用すべきです。 (4) 「対数変換すれば全部解決」 という過信 : 対数変換は右に裾を引く分布に有効ですが、 結果の単位が「対数値」 になり、 「比率の対数差」 として解釈する必要があります。 元単位での解釈が重要な場合 (例: 政策効果を「人数」 で報告したい)、 対数変換ではなく Box-Cox やロバスト回帰の方が適切な場合があります。 (5) 「サンプルサイズを増やせば必ず有意になる」 の誤解 : 効果量が真にゼロなら、 サンプルをいくら増やしても p 値はランダムに分布します (一様分布)。 「サンプルを増やしたら有意になった」 のは、 真の効果量がゼロでなかった証拠です。 ただし、 効果量が極めて小さい場合 (d<0.1)、 統計的有意でも実務的に意味がないことが多く、 「効果量 × サンプル数 = p 値の小ささ」 という関係を理解した運用が必要です。
これらの落とし穴を避けるための「t 検定 ベストプラクティス・チェックリスト 10 項目」: (1) 仮説と検定を事前登録、 (2) サンプルサイズを事前に検出力分析で決定、 (3) 正規性を Shapiro-Wilk + Q-Q プロットで確認、 (4) 等分散性を Levene 検定で確認、 (5) 違反があれば Welch / Wilcoxon に切替、 (6) 効果量 (Cohen's d) を必ず計算、 (7) 95% 信頼区間を併記、 (8) 多重比較なら Bonferroni / FDR 補正、 (9) sensitivity analysis (外れ値あり/なし)、 (10) 業務 KPI への翻訳。 これら 10 項目を毎回確認することで、 t 検定 の運用品質は大きく向上します。 統計検定は「テクニック」 ではなく「思考のフレームワーク」 として身につけることが、 質の高いデータ分析の核心です。
▶ 補講補足 IV: t 検定 の歴史的背景と現代的展開
t 検定 は 1908 年に William Sealy Gosset (筆名 Student) が論文 "The Probable Error of a Mean" で発表した手法で、 当初はギネスビール醸造所の品質管理 (大麦の収量比較) のために開発されました。 当時、 ギネスは従業員に学術論文の発表を禁じていたため、 Gosset は「Student」 のペンネームで投稿し、 この名残で今でも「Student's t 分布」 「Student's t 検定」 と呼ばれます。 t 分布の発見は 「小標本での平均比較に正規分布を直接使うと、 自由度を消費した分散推定により p 値が過小評価される」 という問題を解決し、 統計学に革命をもたらしました。 当時のサンプルサイズは典型的に n=4-10 で、 z 検定 (大標本前提) では p 値の信頼性が損なわれていました。 t 分布は自由度 n-1 を組み込むことで、 小標本でも正確な確率計算を可能にした点が画期的でした。
1937 年には Bernard Welch が「分散が異なる場合の t 検定」 (Welch t 検定、 Welch-Satterthwaite 近似) を提案し、 等分散性仮定を緩和しました。 これにより、 「群間で分散が異なるかどうかを事前検定 (Levene 検定など) で確認 → 違反なら Welch」 という運用が標準化されました。 2026 年現在、 「迷ったら Welch」 (Ruxton 2006) が経験則となっており、 多くの統計教科書・ライブラリ (scipy.stats.ttest_ind のデフォルト equal_var) で Welch がデフォルトになりつつあります。 Student の元論文から 120 年経った今でも、 t 検定 は心理学・医学・経済学・品質管理の主力手法であり続けています。
現代的展開として、 (a) Bayesian t 検定 (Kruschke 2013, BEST: Bayesian Estimation Supersedes the t Test) は、 頻度論的 t 検定 の代替として急速に普及しています。 Bayesian t 検定 は事後分布から「平均差の信頼区間」 「効果量の信頼区間」 「H0 と H1 の Bayes Factor」 を同時に得られ、 「非有意」 と「H0 支持」 の区別ができます。 (b) 順序統計に基づく堅牢 t 検定 (Wilcox 2005, Yuen-Welch test) は、 外れ値や非正規性に頑健で、 トリム平均を使った t 検定 として実装されます。 (c) 機械学習の文脈での t 検定 は、 モデル比較 (5×2 CV t test、 Dietterich 1998) や A/B テスト (オンラインで継続評価する Sequential Probability Ratio Test) などで現代も活用されています。
A/B テストの文脈では、 t 検定 を「Web サイトの新旧バージョン比較」 で使う際に、 (a) peeking 問題 (途中で結果を見て止める判断 → α インフレ)、 (b) 共変量バランス (ランダム割当が完璧でない場合の交絡)、 (c) クラスタリング (同じユーザーから複数観測 → 独立性違反)、 (d) セグメント分析 (全体では非有意、 特定セグメントで有意 → 多重比較問題) といった課題が次々と発生します。 これらに対応する手法として、 alpha-spending 関数 (peeking 制御)、 CUPED (Controlled-experiment Using Pre-Experiment Data、 共変量調整)、 クラスター標準誤差 (cluster-robust SE)、 階層ベイズモデル (Hierarchical Bayes A/B) などが Netflix / Microsoft / Airbnb / Google などの大規模 A/B テストで実装されています。
教育現場での t 検定 の扱い方として、 統計の入門コースでは「公式・前提・実装」 の順で教えがちですが、 「結果の解釈」 と「報告書の書き方」 まで含めて教えるべきです。 学生は scipy.stats.ttest_ind の出力 (t 値・p 値) は読めても、 「効果量を併記する」 「信頼区間を計算する」 「事前登録する」 「peeking を避ける」 という現代的運用ルールは習わないことが多く、 卒業後に学び直しが必要になります。 統計教育の改善として、 (a) 効果量と信頼区間を必修化、 (b) 事前登録と再現性を演習に組み込み、 (c) Bayesian 視点を補講で扱う、 (d) A/B テストの現代的課題を実データで体験させる、 などの方針が 2026 年現在の統計教育改革の方向性となっています。
最後に、 t 検定 は 120 年以上の歴史を持つ古典的手法ですが、 現代でも改良と展開が続いている「生きた統計手法」 です。 単なる「平均の差を検定する公式」 として暗記するのではなく、 「不確実性を構造化して表現する道具」 「研究設計と報告の文化を支える枠組み」 として理解することで、 t 検定 を現代的に使いこなせるようになります。 SSDSE-B-2026 のような公的データで実際に t 検定 を実行する経験を積みながら、 同時に「結果の解釈」 「報告書の書き方」 「現代的代替手法」 までを意識的に学ぶ姿勢が、 質の高いデータ分析を実現する道筋です。 t 検定 から始めて、 ANOVA、 線形回帰、 Bayesian 統計、 因果推論まで段階的に学んでいけば、 統計的判断の全体像が見えてきます。