統計的検定(statistical testing)とは、母集団に対する仮説を標本データに基づいて検証し、統計的に有意な結論を得るための手法です。「効果があるかないか」「差があるか」といった問いに対して、確率論に基づく客観的な判断を下す枠組みを提供します。
本記事では、統計的検定の基本的な考え方から具体的な手順、そしてPythonでの実装までを解説します。
本記事の内容
- 統計的検定の目的と基本概念
- 帰無仮説と対立仮説
- 検定の手順
- 第1種の過誤と第2種の過誤
- 具体例とPythonでの実装
統計的検定とは
母集団と標本
統計学では、知りたい対象の全体を母集団、そこから取り出した一部のデータを標本と呼びます。
例えば、「ある新薬は既存薬より効果があるか?」という問いに答えるために、全患者に試すことはできないので、一部の患者(標本)に投与して結果を観察し、母集団全体について結論を導きます。
検定の考え方
統計的検定は、「仮説を立て、データがその仮説と矛盾するかを確率的に判断する」手法です。
直感的には、「偶然では説明しにくいほどの差や効果が観測されたなら、それは本当に意味のある差である」と結論づけます。
帰無仮説と対立仮説
帰無仮説 $H_0$
帰無仮説(null hypothesis)は、「差がない」「効果がない」という消極的な仮説です。検定では、この仮説が正しいと仮定してデータを評価します。
対立仮説 $H_1$
対立仮説(alternative hypothesis)は、帰無仮説に対立する仮説であり、「差がある」「効果がある」という主張です。
具体例
新薬Aの効果を検証する場合:
- $H_0$: 新薬Aの効果は既存薬と同じ($\mu_A = \mu_0$)
- $H_1$: 新薬Aの効果は既存薬と異なる($\mu_A \neq \mu_0$)
検定の手順
ステップ1: 仮説の設定
帰無仮説 $H_0$ と対立仮説 $H_1$ を明確に設定します。
ステップ2: 有意水準の決定
有意水準 $\alpha$ を決めます。通常 $\alpha = 0.05$(5%)が使われます。これは「帰無仮説が正しいのに誤って棄却してしまう確率」の上限です。
ステップ3: 検定統計量の計算
標本データから検定統計量を計算します。例えば、母平均の検定(分散既知)では、
$$ Z = \frac{\bar{X} – \mu_0}{\sigma / \sqrt{n}} $$
帰無仮説 $H_0: \mu = \mu_0$ のもとで、$Z \sim \mathcal{N}(0, 1)$ に従います。
ステップ4: p値の計算
p値(p-value)は、帰無仮説が正しいと仮定したとき、観測されたデータ以上に極端な値が得られる確率です。
両側検定の場合:
$$ p = 2 \cdot P(Z > |z_{\text{obs}}|) $$
ステップ5: 判定
- $p \leq \alpha$ ならば $H_0$ を棄却(統計的に有意)
- $p > \alpha$ ならば $H_0$ を棄却しない(有意でない)
第1種の過誤と第2種の過誤
検定には2種類の誤りが存在します。
| $H_0$ が真 | $H_0$ が偽 | |
|---|---|---|
| $H_0$ を棄却 | 第1種の過誤($\alpha$) | 正しい判断(検出力) |
| $H_0$ を棄却しない | 正しい判断 | 第2種の過誤($\beta$) |
- 第1種の過誤(偽陽性): 実際には差がないのに「差がある」と判断する。確率は $\alpha$
- 第2種の過誤(偽陰性): 実際には差があるのに「差がない」と判断する。確率は $\beta$
- 検出力(power): $1 – \beta$。本当に差があるときにそれを検出できる確率
$\alpha$ と $\beta$ のトレードオフ
$\alpha$ を小さくすると第1種の過誤は減りますが、第2種の過誤が増えます。標本サイズ $n$ を大きくすることで、両方の過誤を同時に減らすことができます。
片側検定と両側検定
両側検定
$H_1: \mu \neq \mu_0$ のように、差の方向を指定しない場合。
棄却域: $|Z| > z_{\alpha/2}$
片側検定
$H_1: \mu > \mu_0$ のように、差の方向を指定する場合。
棄却域: $Z > z_\alpha$(右片側)
Pythonでの実装
統計的検定をPythonで実装し、p値と検出力の関係を可視化します。
import numpy as np
import matplotlib.pyplot as plt
from scipy import stats
np.random.seed(42)
# 例: 母平均の検定(1標本z検定)
# H0: mu = 50, H1: mu != 50
mu_0 = 50
sigma = 10
n = 30
alpha = 0.05
# 標本データの生成(真の母平均 = 53)
true_mu = 53
sample = np.random.normal(true_mu, sigma, n)
x_bar = np.mean(sample)
# 検定統計量の計算
z_stat = (x_bar - mu_0) / (sigma / np.sqrt(n))
p_value = 2 * (1 - stats.norm.cdf(abs(z_stat)))
print("=== 1標本z検定 ===")
print(f"標本平均: {x_bar:.2f}")
print(f"帰無仮説: mu = {mu_0}")
print(f"検定統計量 Z: {z_stat:.4f}")
print(f"p値: {p_value:.4f}")
print(f"有意水準 alpha: {alpha}")
print(f"判定: {'H0を棄却(有意)' if p_value <= alpha else 'H0を棄却しない'}")
# 可視化
fig, axes = plt.subplots(1, 2, figsize=(14, 5))
# 左: 検定統計量と棄却域
x = np.linspace(-4, 4, 500)
y = stats.norm.pdf(x)
z_crit = stats.norm.ppf(1 - alpha/2)
axes[0].plot(x, y, 'b-', linewidth=2, label='$N(0, 1)$')
axes[0].fill_between(x[x <= -z_crit], y[x <= -z_crit], alpha=0.3, color='red',
label=f'Rejection region ($\\alpha$={alpha})')
axes[0].fill_between(x[x >= z_crit], y[x >= z_crit], alpha=0.3, color='red')
axes[0].axvline(z_stat, color='green', linewidth=2, linestyle='--',
label=f'Z statistic = {z_stat:.2f}')
axes[0].set_xlabel('Z')
axes[0].set_ylabel('Density')
axes[0].set_title('Two-sided Z-test')
axes[0].legend(fontsize=9)
axes[0].grid(True, alpha=0.3)
# 右: 検出力と標本サイズの関係
n_values = np.arange(5, 201)
effect_sizes = [1, 2, 3, 5] # mu - mu_0
for delta in effect_sizes:
powers = []
for n_val in n_values:
# 非心パラメータ
noncentrality = delta / (sigma / np.sqrt(n_val))
# 検出力 = P(|Z| > z_crit | H1が真)
power = 1 - (stats.norm.cdf(z_crit - noncentrality) -
stats.norm.cdf(-z_crit - noncentrality))
powers.append(power)
axes[1].plot(n_values, powers, linewidth=2, label=f'$\\delta$ = {delta}')
axes[1].axhline(0.8, color='k', linestyle='--', alpha=0.5, label='Power = 0.8')
axes[1].set_xlabel('Sample size n')
axes[1].set_ylabel('Power ($1 - \\beta$)')
axes[1].set_title('Power vs Sample Size')
axes[1].legend(fontsize=9)
axes[1].grid(True, alpha=0.3)
plt.tight_layout()
plt.show()
左のグラフでは、帰無仮説のもとでの標準正規分布と棄却域、検定統計量の位置を示しています。右のグラフでは、効果量と標本サイズに応じた検出力の変化を可視化しています。効果量が大きいほど、また標本サイズが大きいほど、検出力が高くなることがわかります。
まとめ
本記事では、統計的検定の基本概念と手順について解説しました。
- 統計的検定は、帰無仮説を標本データに基づいて棄却するか判断する手法である
- p値は帰無仮説のもとで観測データ以上に極端な結果が得られる確率であり、有意水準と比較して判定する
- 第1種の過誤(偽陽性)と第2種の過誤(偽陰性)のトレードオフを理解することが重要
- 検出力は標本サイズと効果量に依存し、適切な標本サイズ設計が検定の信頼性を左右する