t検定とは?1標本・2標本・対応ありの3種類をわかりやすく解説

はじめに

「この製品の平均重量は規格値を満たしているか?」「2つの教育法で学生の成績に差はあるか?」「同じ被験者に投薬前後で血圧に変化はあるか?」

こうした「平均値に関する問い」に対して統計的に答えるための手法が t検定(t-test) です。t検定は、実験科学、品質管理、医学研究、社会科学など、あらゆる分野で最も頻繁に使われる統計的検定です。

なぜ t 検定がこれほど広く使われるのでしょうか。理由は2つあります。第一に、多くの実データが正規分布で近似できること。第二に、母分散が未知でもサンプルサイズが小さくても適用できる という実用上の強みがあることです。母分散が既知であれば Z 検定(正規分布に基づく検定)が使えますが、現実には母分散を知っていることはほとんどありません。t 検定は、母分散を標本分散で推定したときに生じる不確実性を t 分布 で正しく取り扱います。

本記事では、t 検定の3つの種類(1標本・対応なし2標本・対応あり)を、数式の導出から Python 実装まで丁寧に解説します。

本記事の内容

  • t 分布と正規分布の関係
  • 1標本 t 検定の導出と具体例
  • 対応なし2標本 t 検定(等分散・ウェルチ)の導出と具体例
  • 対応あり t 検定の導出と具体例
  • t 検定の前提条件
  • Python(scipy.stats)での実装
  • 効果量(Cohen’s d)の計算

前提知識

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

帰無仮説・対立仮説、p値、有意水準、第1種の過誤・第2種の過誤といった基本概念は上記の記事で解説しています。本記事ではこれらの概念を前提として進めます。

t 分布とは

正規分布から t 分布へ

母集団が正規分布 $N(\mu, \sigma^2)$ に従うとき、標本平均 $\bar{X}$ は

$$ \bar{X} \sim N\!\left(\mu,\, \frac{\sigma^2}{n}\right) $$

に従います。ここで $n$ は標本サイズです。これを標準化すると

$$ Z = \frac{\bar{X} – \mu}{\sigma / \sqrt{n}} \sim N(0, 1) $$

となり、標準正規分布に従います。しかし、この式では母分散 $\sigma^2$ を知っている必要があります。

現実には母分散は未知なので、標本から推定した 不偏分散 $s^2$ で置き換えます。

$$ s^2 = \frac{1}{n-1} \sum_{i=1}^{n} (X_i – \bar{X})^2 $$

このとき、$\sigma$ を $s$ で置き換えた統計量

$$ t = \frac{\bar{X} – \mu}{s / \sqrt{n}} $$

は、もはや標準正規分布には従いません。代わりに 自由度 $\nu = n – 1$ の t 分布 に従います。

$$ t = \frac{\bar{X} – \mu}{s / \sqrt{n}} \sim t(n – 1) $$

t 分布の確率密度関数

自由度 $\nu$ の t 分布の確率密度関数は次のとおりです。

$$ f(t) = \frac{\Gamma\!\left(\frac{\nu+1}{2}\right)}{\sqrt{\nu\pi}\,\Gamma\!\left(\frac{\nu}{2}\right)} \left(1 + \frac{t^2}{\nu}\right)^{-\frac{\nu+1}{2}} $$

ここで $\Gamma(\cdot)$ はガンマ関数です。

t 分布の特徴

t 分布は正規分布と形が似ていますが、以下の違いがあります。

  • 裾が厚い(heavy-tailed): 正規分布より裾の確率が大きく、極端な値が出やすい
  • 自由度が大きくなると正規分布に近づく: $\nu \to \infty$ のとき $t(\nu) \to N(0, 1)$
  • $\nu = 1$ のときはコーシー分布 に一致し、平均が存在しない
  • 対称: 0を中心に左右対称

自由度が小さいほど裾が厚いのは、標本分散 $s^2$ の推定が不安定であるため、その不確実性が反映されているからです。サンプルサイズが大きくなると $s^2$ は $\sigma^2$ に近づき、t 分布は正規分布に収束します。

1標本 t 検定

問題設定

1標本 t 検定は、母集団の平均 $\mu$ がある基準値 $\mu_0$ に等しいかどうか を検定します。

仮説の設定

$$ H_0: \mu = \mu_0 \quad \text{(母平均は基準値に等しい)} $$

$$ H_1: \mu \neq \mu_0 \quad \text{(母平均は基準値と異なる)} $$

上記は両側検定の場合です。片側検定の場合は $H_1: \mu > \mu_0$ または $H_1: \mu < \mu_0$ とします。

t 統計量の導出

標本 $X_1, X_2, \dots, X_n$ が独立に $N(\mu, \sigma^2)$ に従うとします。帰無仮説 $H_0: \mu = \mu_0$ のもとで、検定統計量を構成します。

まず、標本平均と不偏分散を求めます。

$$ \bar{X} = \frac{1}{n} \sum_{i=1}^{n} X_i $$

$$ s^2 = \frac{1}{n-1} \sum_{i=1}^{n} (X_i – \bar{X})^2 $$

次に、t 統計量を計算します。

$$ t = \frac{\bar{X} – \mu_0}{s / \sqrt{n}} $$

この統計量の意味を直感的に説明します。分子 $\bar{X} – \mu_0$ は「標本平均が基準値からどれだけずれているか」を表し、分母 $s / \sqrt{n}$(標準誤差)は「そのずれがどの程度の不確実性を持つか」を表します。つまり t 統計量は、標本平均のずれを標準誤差の単位で測ったもの です。

帰無仮説のもとで、この統計量は自由度 $n – 1$ の t 分布に従います。

$$ t \sim t(n – 1) $$

具体例: 製品の平均重量の検定

ある工場で製造している部品の規格重量は 50.0 g です。ランダムに 10 個の部品を抽出し、重量を測定したところ、以下の結果が得られました。

$$ \{51.2,\; 49.8,\; 50.5,\; 51.0,\; 50.3,\; 50.7,\; 49.5,\; 51.1,\; 50.9,\; 50.0\} $$

有意水準 $\alpha = 0.05$ で、この部品の平均重量は 50.0 g と異なるかを両側検定で調べます。

ステップ1: 仮説の設定

$$ H_0: \mu = 50.0 \quad \text{vs} \quad H_1: \mu \neq 50.0 $$

ステップ2: 基本統計量の計算

標本サイズ $n = 10$。

標本平均を求めます。

$$ \bar{X} = \frac{51.2 + 49.8 + 50.5 + 51.0 + 50.3 + 50.7 + 49.5 + 51.1 + 50.9 + 50.0}{10} $$

$$ \bar{X} = \frac{505.0}{10} = 50.50 $$

各データと標本平均との偏差の二乗和を計算します。

$$ \sum_{i=1}^{10} (X_i – \bar{X})^2 = (0.7)^2 + (-0.7)^2 + (0.0)^2 + (0.5)^2 + (-0.2)^2 + (0.2)^2 + (-1.0)^2 + (0.6)^2 + (0.4)^2 + (-0.5)^2 $$

$$ = 0.49 + 0.49 + 0.00 + 0.25 + 0.04 + 0.04 + 1.00 + 0.36 + 0.16 + 0.25 = 3.08 $$

不偏分散を計算します。

$$ s^2 = \frac{3.08}{10 – 1} = \frac{3.08}{9} \approx 0.3422 $$

標本標準偏差は

$$ s = \sqrt{0.3422} \approx 0.5850 $$

ステップ3: t 統計量の計算

$$ t = \frac{\bar{X} – \mu_0}{s / \sqrt{n}} = \frac{50.50 – 50.00}{0.5850 / \sqrt{10}} $$

分母を計算します。

$$ \frac{0.5850}{\sqrt{10}} = \frac{0.5850}{3.1623} \approx 0.1850 $$

したがって

$$ t = \frac{0.50}{0.1850} \approx 2.703 $$

ステップ4: 判定

自由度 $\nu = 10 – 1 = 9$、有意水準 $\alpha = 0.05$ の両側検定における臨界値は $t_{0.025, 9} \approx 2.262$ です。

$$ |t| = 2.703 > 2.262 = t_{0.025, 9} $$

よって帰無仮説 $H_0$ を棄却します。この部品の平均重量は 50.0 g と統計的に有意に異なると結論づけられます。

対応なし2標本 t 検定(独立2標本 t 検定)

問題設定

2つの独立な母集団の平均に差があるかどうかを検定します。たとえば、薬剤群とプラセボ群の平均値の比較です。

$$ H_0: \mu_1 = \mu_2 \quad \text{vs} \quad H_1: \mu_1 \neq \mu_2 $$

等分散を仮定する場合(Student の t 検定)

2つの母集団の分散が等しい($\sigma_1^2 = \sigma_2^2 = \sigma^2$)と仮定します。

群1の標本: $X_1, X_2, \dots, X_{n_1}$(標本サイズ $n_1$、標本平均 $\bar{X}_1$、不偏分散 $s_1^2$)

群2の標本: $Y_1, Y_2, \dots, Y_{n_2}$(標本サイズ $n_2$、標本平均 $\bar{X}_2$、不偏分散 $s_2^2$)

2つの群の情報を統合して共通分散を推定します。これを プールされた分散(pooled variance) と呼びます。

$$ s_p^2 = \frac{(n_1 – 1)\,s_1^2 + (n_2 – 1)\,s_2^2}{n_1 + n_2 – 2} $$

各群の偏差平方和を自由度で重みづけして合算しています。分母 $n_1 + n_2 – 2$ は全体の自由度です。

t 統計量は次のように定義されます。

$$ t = \frac{\bar{X}_1 – \bar{X}_2}{s_p \sqrt{\dfrac{1}{n_1} + \dfrac{1}{n_2}}} $$

導出を1ステップずつ示します。帰無仮説のもとで $\mu_1 = \mu_2$ なので

$$ \begin{align} t &= \frac{(\bar{X}_1 – \bar{X}_2) – (\mu_1 – \mu_2)}{s_p \sqrt{\dfrac{1}{n_1} + \dfrac{1}{n_2}}} \\ &= \frac{(\bar{X}_1 – \bar{X}_2) – 0}{s_p \sqrt{\dfrac{1}{n_1} + \dfrac{1}{n_2}}} \\ &= \frac{\bar{X}_1 – \bar{X}_2}{s_p \sqrt{\dfrac{1}{n_1} + \dfrac{1}{n_2}}} \end{align} $$

この統計量は、帰無仮説のもとで自由度 $\nu = n_1 + n_2 – 2$ の t 分布に従います。

$$ t \sim t(n_1 + n_2 – 2) $$

不等分散の場合(ウェルチの t 検定)

2つの母集団の分散が等しいとは限らない場合、ウェルチの t 検定(Welch’s t-test) を使います。実務上はこちらを使う方が安全です。等分散が成り立つ場合でもウェルチの t 検定はほぼ同じ結果を与えますが、等分散が成り立たない場合に Student の t 検定は誤った結論を導く可能性があるからです。

t 統計量は次のように定義されます。

$$ t = \frac{\bar{X}_1 – \bar{X}_2}{\sqrt{\dfrac{s_1^2}{n_1} + \dfrac{s_2^2}{n_2}}} $$

プールされた分散を使わず、各群の分散をそのまま使う 点が Student の t 検定との違いです。

自由度はウェルチ-サタスウェイトの近似式で計算します。

$$ \nu = \frac{\left(\dfrac{s_1^2}{n_1} + \dfrac{s_2^2}{n_2}\right)^2}{\dfrac{\left(\dfrac{s_1^2}{n_1}\right)^2}{n_1 – 1} + \dfrac{\left(\dfrac{s_2^2}{n_2}\right)^2}{n_2 – 1}} $$

この自由度は一般に整数にはなりません。

具体例: 2つの教育法の成績比較

教育法 A を受けた8名と教育法 B を受けた10名のテスト成績を比較します。

教育法 A ($n_1 = 8$): $\{78, 85, 90, 72, 88, 82, 76, 95\}$

教育法 B ($n_2 = 10$): $\{70, 65, 80, 68, 75, 72, 78, 60, 74, 66\}$

各群の統計量を計算します。

$$ \bar{X}_1 = \frac{78 + 85 + 90 + 72 + 88 + 82 + 76 + 95}{8} = \frac{666}{8} = 83.25 $$

$$ \bar{X}_2 = \frac{70 + 65 + 80 + 68 + 75 + 72 + 78 + 60 + 74 + 66}{10} = \frac{708}{10} = 70.80 $$

$$ s_1^2 = \frac{1}{7}\sum_{i=1}^{8}(X_i – 83.25)^2 \approx 56.79 $$

$$ s_2^2 = \frac{1}{9}\sum_{i=1}^{10}(Y_i – 70.80)^2 \approx 38.18 $$

ウェルチの t 統計量を計算します。

$$ t = \frac{83.25 – 70.80}{\sqrt{\dfrac{56.79}{8} + \dfrac{38.18}{10}}} = \frac{12.45}{\sqrt{7.099 + 3.818}} = \frac{12.45}{\sqrt{10.917}} $$

$$ t = \frac{12.45}{3.304} \approx 3.768 $$

ウェルチ-サタスウェイトの自由度は

$$ \nu = \frac{(7.099 + 3.818)^2}{\dfrac{7.099^2}{7} + \dfrac{3.818^2}{9}} = \frac{10.917^2}{\dfrac{50.40}{7} + \dfrac{14.58}{9}} = \frac{119.18}{7.199 + 1.620} = \frac{119.18}{8.819} \approx 13.51 $$

自由度約 13.5、$\alpha = 0.05$ の両側検定の臨界値は約 2.16 です。$|t| = 3.768 > 2.16$ なので、帰無仮説を棄却します。教育法 A と B の間には統計的に有意な成績の差があると結論づけられます。

対応あり t 検定

問題設定

同一の被験者に対して2つの条件(たとえば投薬前と投薬後)を測定した場合、データは独立ではなく 対応(paired) があります。このとき、対応あり t 検定を使います。

差のt検定としての定式化

$n$ 人の被験者について、条件1での測定値を $X_i$、条件2での測定値を $Y_i$ とし、その差を

$$ D_i = X_i – Y_i \quad (i = 1, 2, \dots, n) $$

と定義します。対応あり t 検定は、この差 $D_i$ に対する 1標本 t 検定 に帰着します。

$$ H_0: \mu_D = 0 \quad \text{(差の母平均はゼロ)} $$

$$ H_1: \mu_D \neq 0 \quad \text{(差の母平均はゼロでない)} $$

差の標本平均と不偏分散を計算します。

$$ \bar{D} = \frac{1}{n} \sum_{i=1}^{n} D_i $$

$$ s_D^2 = \frac{1}{n-1} \sum_{i=1}^{n} (D_i – \bar{D})^2 $$

t 統計量は

$$ t = \frac{\bar{D}}{s_D / \sqrt{n}} $$

であり、帰無仮説のもとで自由度 $n – 1$ の t 分布に従います。

$$ t \sim t(n – 1) $$

対応なし vs 対応ありの違い

対応あり t 検定が強力な理由は、個人差を除去できる からです。対応なし t 検定では、被験者間の個人差がノイズとなりますが、対応あり t 検定では差 $D_i$ を取ることで個人差がキャンセルされます。その結果、$s_D$ が小さくなり、t 統計量が大きくなりやすく(つまり検出力が高く)なります。

具体例: 投薬前後の血圧変化

6名の被験者について、投薬前後の収縮期血圧(mmHg)を測定しました。

被験者 投薬前 $X_i$ 投薬後 $Y_i$ 差 $D_i = X_i – Y_i$
1 142 138 4
2 155 148 7
3 130 129 1
4 148 140 8
5 136 132 4
6 160 150 10

差の統計量を計算します。

$$ \bar{D} = \frac{4 + 7 + 1 + 8 + 4 + 10}{6} = \frac{34}{6} \approx 5.667 $$

$$ s_D^2 = \frac{1}{5}\left[(4 – 5.667)^2 + (7 – 5.667)^2 + (1 – 5.667)^2 + (8 – 5.667)^2 + (4 – 5.667)^2 + (10 – 5.667)^2\right] $$

$$ = \frac{1}{5}\left[2.779 + 1.779 + 21.779 + 5.445 + 2.779 + 18.779\right] = \frac{53.340}{5} = 10.668 $$

$$ s_D = \sqrt{10.668} \approx 3.266 $$

t 統計量を計算します。

$$ t = \frac{5.667}{3.266 / \sqrt{6}} = \frac{5.667}{1.334} \approx 4.249 $$

自由度 $\nu = 6 – 1 = 5$、$\alpha = 0.05$ の両側検定の臨界値は $t_{0.025, 5} \approx 2.571$ です。

$$ |t| = 4.249 > 2.571 $$

帰無仮説を棄却します。投薬により血圧が統計的に有意に低下したと結論づけられます。

t 検定の前提条件

t 検定を正しく適用するためには、いくつかの前提条件を確認する必要があります。

1. 正規性

母集団が正規分布に従う(または十分近い分布である)ことが前提です。ただし、中心極限定理により、サンプルサイズが大きい場合(一般に $n \geq 30$ 程度)には正規性の仮定が多少崩れても t 検定は頑健に機能します。

正規性の確認方法: – シャピロ-ウィルク検定scipy.stats.shapiro) – Q-Qプロットによる視覚的確認

2. 独立性

各観測値が互いに独立であることが必要です。対応あり t 検定では、異なる被験者間の独立性が求められます(同一被験者内の2条件は対応で処理するため独立でなくてよい)。

3. 等分散性(対応なし2標本の場合)

Student の t 検定では2群の分散が等しいことを仮定します。等分散性の確認にはレーベン検定(scipy.stats.levene)が使えます。等分散性に疑問がある場合は、ウェルチの t 検定を使用すれば安全 です。

前提条件が満たされない場合

正規性が明らかに成り立たない場合は、ノンパラメトリック検定(ウィルコクソンの符号順位検定、マン-ホイットニーの U 検定など)を検討してください。

Python での実装

3種類の t 検定

import numpy as np
from scipy import stats

# =============================================
# 1. 1標本 t 検定
# =============================================
print("=" * 55)
print("1. 1標本 t 検定: 部品の平均重量は 50.0 g か?")
print("=" * 55)

data = np.array([51.2, 49.8, 50.5, 51.0, 50.3, 50.7, 49.5, 51.1, 50.9, 50.0])
mu_0 = 50.0
alpha = 0.05

# scipy.stats.ttest_1samp で1標本t検定を実行
t_stat, p_value = stats.ttest_1samp(data, mu_0)

print(f"標本平均: {data.mean():.2f}")
print(f"標本標準偏差: {data.std(ddof=1):.4f}")
print(f"標本サイズ: {len(data)}")
print(f"t統計量: {t_stat:.4f}")
print(f"p値: {p_value:.6f}")
if p_value < alpha:
    print(f"判定: p値 ({p_value:.6f}) < α ({alpha}) → H₀を棄却")
else:
    print(f"判定: p値 ({p_value:.6f}) ≥ α ({alpha}) → H₀を棄却しない")

# =============================================
# 2. 対応なし2標本 t 検定(ウェルチ)
# =============================================
print()
print("=" * 55)
print("2. 対応なし2標本 t 検定: 教育法 A vs B")
print("=" * 55)

group_a = np.array([78, 85, 90, 72, 88, 82, 76, 95])
group_b = np.array([70, 65, 80, 68, 75, 72, 78, 60, 74, 66])

# ウェルチの t 検定(equal_var=False)
t_stat, p_value = stats.ttest_ind(group_a, group_b, equal_var=False)

print(f"群 A: 平均 = {group_a.mean():.2f}, 標準偏差 = {group_a.std(ddof=1):.2f}, n = {len(group_a)}")
print(f"群 B: 平均 = {group_b.mean():.2f}, 標準偏差 = {group_b.std(ddof=1):.2f}, n = {len(group_b)}")
print(f"t統計量: {t_stat:.4f}")
print(f"p値: {p_value:.6f}")
if p_value < alpha:
    print(f"判定: p値 ({p_value:.6f}) < α ({alpha}) → H₀を棄却")
else:
    print(f"判定: p値 ({p_value:.6f}) ≥ α ({alpha}) → H₀を棄却しない")

# 等分散を仮定した場合(参考)
t_stat_eq, p_value_eq = stats.ttest_ind(group_a, group_b, equal_var=True)
print(f"\n(参考)等分散仮定: t = {t_stat_eq:.4f}, p = {p_value_eq:.6f}")

# レーベン検定で等分散性を確認
lev_stat, lev_p = stats.levene(group_a, group_b)
print(f"レーベン検定: F = {lev_stat:.4f}, p = {lev_p:.4f}")

# =============================================
# 3. 対応あり t 検定
# =============================================
print()
print("=" * 55)
print("3. 対応あり t 検定: 投薬前後の血圧変化")
print("=" * 55)

before = np.array([142, 155, 130, 148, 136, 160])
after = np.array([138, 148, 129, 140, 132, 150])

# scipy.stats.ttest_rel で対応ありt検定を実行
t_stat, p_value = stats.ttest_rel(before, after)

diff = before - after
print(f"差 D = {diff}")
print(f"差の平均: {diff.mean():.3f}")
print(f"差の標準偏差: {diff.std(ddof=1):.3f}")
print(f"t統計量: {t_stat:.4f}")
print(f"p値: {p_value:.6f}")
if p_value < alpha:
    print(f"判定: p値 ({p_value:.6f}) < α ({alpha}) → H₀を棄却")
else:
    print(f"判定: p値 ({p_value:.6f}) ≥ α ({alpha}) → H₀を棄却しない")

t 分布と正規分布の比較の可視化

import numpy as np
import matplotlib.pyplot as plt
from scipy import stats

x = np.linspace(-5, 5, 1000)

fig, ax = plt.subplots(figsize=(10, 6))

# 標準正規分布
ax.plot(x, stats.norm.pdf(x), "k-", linewidth=2.5, label="$N(0, 1)$")

# 自由度を変えた t 分布
for nu, color in [(1, "red"), (3, "orange"), (5, "green"), (10, "blue"), (30, "purple")]:
    ax.plot(x, stats.t.pdf(x, df=nu), linewidth=1.5, color=color,
            label=f"$t(\\nu={nu})$")

ax.set_xlabel("$t$", fontsize=14)
ax.set_ylabel("Probability density", fontsize=14)
ax.set_title("t-distribution vs Normal distribution", fontsize=15)
ax.legend(fontsize=11)
ax.grid(True, alpha=0.3)
ax.set_xlim(-5, 5)
ax.set_ylim(0, 0.45)

plt.tight_layout()
plt.savefig("t_distribution_comparison.png", dpi=150, bbox_inches="tight")
plt.show()

効果量(Cohen’s d)

p値はサンプルサイズに強く依存するため、統計的に有意であっても 実質的に意味のある差 とは限りません。効果の大きさを標準化して測る指標が 効果量(effect size) です。代表的な指標として Cohen’s d があります。

1標本の Cohen’s d

$$ d = \frac{\bar{X} – \mu_0}{s} $$

対応なし2標本の Cohen’s d

$$ d = \frac{\bar{X}_1 – \bar{X}_2}{s_p} $$

ここで $s_p$ はプールされた標準偏差です。

$$ s_p = \sqrt{\frac{(n_1 – 1)\,s_1^2 + (n_2 – 1)\,s_2^2}{n_1 + n_2 – 2}} $$

対応ありの Cohen’s d

$$ d = \frac{\bar{D}}{s_D} $$

Cohen’s d の解釈の目安

$|d|$ 効果の大きさ
0.2 小(small)
0.5 中(medium)
0.8 大(large)

Python での計算

import numpy as np

def cohens_d_one_sample(data, mu_0):
    """1標本の Cohen's d"""
    return (np.mean(data) - mu_0) / np.std(data, ddof=1)

def cohens_d_independent(group1, group2):
    """対応なし2標本の Cohen's d(プールされた標準偏差)"""
    n1, n2 = len(group1), len(group2)
    s1, s2 = np.std(group1, ddof=1), np.std(group2, ddof=1)
    s_pooled = np.sqrt(((n1 - 1) * s1**2 + (n2 - 1) * s2**2) / (n1 + n2 - 2))
    return (np.mean(group1) - np.mean(group2)) / s_pooled

def cohens_d_paired(before, after):
    """対応ありの Cohen's d"""
    diff = before - after
    return np.mean(diff) / np.std(diff, ddof=1)

# --- 1標本 ---
data = np.array([51.2, 49.8, 50.5, 51.0, 50.3, 50.7, 49.5, 51.1, 50.9, 50.0])
d1 = cohens_d_one_sample(data, 50.0)
print(f"1標本 Cohen's d = {d1:.4f} → 効果量: {'大' if abs(d1) >= 0.8 else '中' if abs(d1) >= 0.5 else '小'}")

# --- 対応なし2標本 ---
group_a = np.array([78, 85, 90, 72, 88, 82, 76, 95])
group_b = np.array([70, 65, 80, 68, 75, 72, 78, 60, 74, 66])
d2 = cohens_d_independent(group_a, group_b)
print(f"対応なし2標本 Cohen's d = {d2:.4f} → 効果量: {'大' if abs(d2) >= 0.8 else '中' if abs(d2) >= 0.5 else '小'}")

# --- 対応あり ---
before = np.array([142, 155, 130, 148, 136, 160])
after = np.array([138, 148, 129, 140, 132, 150])
d3 = cohens_d_paired(before, after)
print(f"対応あり Cohen's d = {d3:.4f} → 効果量: {'大' if abs(d3) >= 0.8 else '中' if abs(d3) >= 0.5 else '小'}")

まとめ

本記事では、t 検定の3つの種類について、理論的な導出から Python 実装まで解説しました。

  • t 分布 は、母分散が未知のときに標本分散で置き換えることで生じる不確実性を反映した分布であり、自由度が大きくなると正規分布に近づきます。
  • 1標本 t 検定 は、$t = (\bar{X} – \mu_0) / (s / \sqrt{n})$ で母平均が基準値と等しいかを検定します。
  • 対応なし2標本 t 検定 は、2つの独立な群の平均差を検定します。等分散を仮定する Student の t 検定と、仮定しないウェルチの t 検定があり、実務上はウェルチの t 検定を推奨します。
  • 対応あり t 検定 は、同一被験者の2条件の差 $D_i$ に対する1標本 t 検定に帰着し、個人差を除去できるため検出力が高くなります。
  • t 検定の前提条件として、正規性独立性等分散性(2標本の場合)を確認する必要があります。
  • p値だけでなく 効果量(Cohen’s d) も併せて報告することで、結果の実質的な意味を評価できます。

次のステップとして、カテゴリデータの検定や3群以上の平均の比較に進んでみてください。

  • $\chi^2$(カイ二乗)検定: カテゴリデータの独立性や適合度を検定
  • F 検定 / 分散分析(ANOVA): 3群以上の平均の差を検定