「この新薬は本当に効果があるのか」「製造ラインの品質は基準を満たしているか」「広告を変えたら売上は上がったのか」。ビジネスや科学の現場では、データに基づいて意思決定を行う場面が数多くある。
統計的仮説検定は、このような問いに対して客観的な判断基準を与える手法である。1920年代にロナルド・フィッシャーが「有意性検定」の概念を確立し、その後イェジー・ネイマンとエゴン・ピアソンが対立仮説や検出力といった概念を導入して、現代の統計的仮説検定の枠組みが完成した。
本記事では、仮説検定の基本的な考え方から、P値の解釈、検定の過誤、検出力、サンプルサイズ設計まで体系的に解説する。正規分布や区間推定の知識があると理解しやすい。
統計的仮説検定の考え方
統計的仮説検定(statistical hypothesis testing)は、データを用いて仮説を検証する手法である。その考え方は数学の背理法に似ている。
数学的背理法との類似
数学的背理法では、証明したい命題を否定して矛盾を導くことで、元の命題が正しいことを示す。統計的仮説検定も同様の論理構造を持つが、「矛盾」の代わりに「極めて稀な事象」を用いる点が異なる。
数学的背理法では論理的な矛盾が生じれば仮定が誤りだと断言できる。しかし統計的仮説検定では「稀な事象」を矛盾の代わりに用いるため、判断を誤る可能性が常に存在する。この誤りを定量的に扱うのが仮説検定の特徴である。
帰無仮説と対立仮説
統計的仮説検定では、2つの仮説を設定する。
帰無仮説(H₀)
帰無仮説(null hypothesis)H_0 は、「無に帰する仮説」という意味で、否定したい仮説である。「効果がない」「差がない」「変化がない」といった主張を表す。
帰無仮説は通常、等号を含む形(\mu = \mu_0)で設定される。これは、等号のもとでは検定統計量の分布が明確に定まるためである。
対立仮説(H₁)
対立仮説(alternative hypothesis)H_1 は、研究者が主張したい仮説である。「効果がある」「差がある」「変化がある」といった主張を表す。
対立仮説は研究の目的に応じて設定する。不等号の向きによって両側検定と片側検定が区別される。
仮説設定の考え方
仮説検定では、帰無仮説 H_0 を棄却して対立仮説 H_1 を支持することが目標である。帰無仮説のもとで極めて稀なデータが観測された場合、「帰無仮説は正しくない」と判断して棄却する。
研究で示したいことを対立仮説に設定する。例えば「新薬の効果を示したい」なら、H₀:「効果なし」vs H₁:「効果あり」と設定する。データによってH₀を棄却できれば、H₁(効果あり)を主張できる。
仮説の設定例
母平均 \mu がある値 \mu_0 と異なるかを検証する場合、仮説は次のように設定する。
ある製品の平均重量が規格値50gと異なるかを検証する場合
帰無仮説が棄却されれば「平均重量は規格値50gと異なる」と結論付けられる。
検定統計量と棄却域
帰無仮説のもとで「稀かどうか」を判断するために、検定統計量(test statistic)を用いる。
検定統計量の導出
母集団が正規分布 N(\mu, \sigma^2) に従い、母分散 \sigma^2 が既知の場合を考える。標本 X_1, \ldots, X_n の標本平均 \bar{X} は N\left(\mu, \dfrac{\sigma^2}{n}\right) に従う。
帰無仮説 H_0: \mu = \mu_0 のもとでは、標準化した統計量
は標準正規分布 N(0, 1) に従う。この Z_0 が検定統計量である。
有意水準と棄却域
有意水準(significance level)\alpha は、帰無仮説が正しいときに誤って棄却してしまう確率の上限である。言い換えると「どれくらい稀なら偶然ではないと判断するか」の基準である。
慣例的に \alpha = 0.05(5%)や \alpha = 0.01(1%)がよく用いられる。有意水準5%とは「帰無仮説が正しい場合でも、5%の確率で誤って棄却してしまうことを許容する」という意味である。
有意水準はデータを見る前に決める必要がある。医療など誤りの影響が大きい分野ではより厳しい基準(α=0.01や0.001)が用いられることがある。
棄却域(rejection region)とは、帰無仮説を棄却する検定統計量の範囲である。有意水準5%の両側検定では、標準正規分布の上側2.5%点が z_{0.025} = 1.96 なので、|Z_0| \ge 1.96 のとき帰無仮説を棄却する。
棄却される境界の値 \pm 1.96 を棄却限界値または臨界値(critical value)という。
両側検定と片側検定
対立仮説の形によって、検定は両側検定と片側検定に分かれる。どちらを使うかは、研究の目的によって決まる。
両側検定
両側検定は、「差があるかどうか」を検証する場合に用いる。正の方向でも負の方向でも差があれば検出する。対立仮説は H_1: \mu \neq \mu_0 の形をとる。
「新しい製造方法で製品の重量が変化したかどうか」を調べたい場合。重くなっても軽くなっても問題なので、両方向の変化を検出したい。
片側検定
片側検定は、「特定の方向に差があるかどうか」を検証する場合に用いる。右片側検定と左片側検定がある。
「新薬が既存薬より効果が高いかどうか」を調べたい場合。効果が高い方向のみに関心があるので、右片側検定を使う。
検定の種類と棄却域
| 種類 | 対立仮説 | 棄却域(α=0.05) |
|---|---|---|
| 両側検定 | H_1: \mu \neq \mu_0 | |Z_0| \ge 1.96 |
| 右片側検定 | H_1: \mu > \mu_0 | Z_0 \ge 1.645 |
| 左片側検定 | H_1: \mu < \mu_0 | Z_0 \le -1.645 |
片側検定では、検定統計量が大きい方向(または小さい方向)のみを検証する。そのため、同じ有意水準でも棄却限界値が異なる。「増加したかどうか」「基準を超えたかどうか」など、方向が明確な場合に片側検定を用いる。
P値
P値とは何か
P値(P-value)とは、「帰無仮説が正しいと仮定したとき、観測されたデータと同じか、それより極端なデータが得られる確率」である。
わかりやすく言えば、P値は「今回の結果がどれくらい珍しいか」を確率で表したものである。P値が小さいほど、帰無仮説のもとでは起こりにくい結果が観測されたことを意味する。
P値の計算方法
検定統計量 z_0 が観測されたとき、P値は検定の種類によって異なる。
| 検定の種類 | P値の計算式 | 意味 |
|---|---|---|
| 両側検定 | 2 \times P(Z \ge |z_0|) | 観測値より外側に出る確率(両端合計) |
| 右片側検定 | P(Z \ge z_0) | 観測値以上になる確率 |
| 左片側検定 | P(Z \le z_0) | 観測値以下になる確率 |
具体例で理解するP値
両側検定で z_0 = 2.3 が観測されたとする。このとき、P値は以下のように計算される。
この結果は「帰無仮説が正しければ、今回のような極端な結果が出る確率は約2.1%しかない」ことを意味する。有意水準5%で検定を行う場合、P値=0.0214 < α=0.05 なので帰無仮説は棄却される。
P値による判定方法
P値を有意水準αと比較して判定を行う。
- P値 ≤ α のとき → 帰無仮説を棄却する(統計的に有意)
- P値 > α のとき → 帰無仮説を棄却しない(有意でない)
P値は観測データから計算される値であり、事前に設定する有意水準αとは異なる概念である。有意水準αは研究開始前に決めておく基準値、P値は実際のデータから得られる結果である。
P値の正しい解釈
P値の解釈には注意が必要である。以下は誤った解釈の例である。
- 誤り:「P値=0.02 は帰無仮説が正しい確率が2%」
- 正しい:「帰無仮説が正しいと仮定したとき、今回のような極端な結果が得られる確率が2%」
P値は帰無仮説の確率を直接表すものではない。また、P値が小さいことは効果が大きいことを意味しない。サンプルサイズが大きければ、小さな効果でもP値は小さくなる。
検定の過誤
統計的仮説検定では、確率的な判断を行うため誤りが生じる可能性がある。検定における判断の結果は、以下の4つのパターンに分類される。
| H₀を棄却 | H₀を棄却しない | |
|---|---|---|
| H₀が真 | 第一種の過誤(α) | 正しい判断 |
| H₁が真 | 正しい判断(検出力) | 第二種の過誤(β) |
第一種の過誤(偽陽性)
第一種の過誤(Type I error)とは、帰無仮説が真であるのに誤って棄却してしまう誤りである。
わかりやすく言えば、「本当は効果がないのに、効果があると判断してしまう」誤りである。医学の分野では偽陽性(false positive)とも呼ばれる。
新薬の臨床試験で、実際には既存薬と効果に差がないのに、「新薬の方が効果がある」と結論付けてしまうケース。この誤りにより、効果のない薬が市場に出てしまう可能性がある。
第一種の過誤が起こる確率は \alpha(有意水準)で制御される。\alpha = 0.05 と設定すれば、帰無仮説が正しいときに誤って棄却する確率は5%以下となる。
第二種の過誤(偽陰性)
第二種の過誤(Type II error)とは、対立仮説が真であるのに帰無仮説を棄却できない誤りである。
わかりやすく言えば、「本当は効果があるのに、効果がないと判断してしまう」誤りである。医学の分野では偽陰性(false negative)とも呼ばれる。
新薬の臨床試験で、実際には新薬の方が効果があるのに、「効果に差がない」と結論付けてしまうケース。この誤りにより、有効な薬が世に出る機会を逃してしまう。
第二種の過誤が起こる確率は \beta で表される。\beta は有意水準のように事前に設定するものではなく、効果の大きさやサンプルサイズに依存する。
第一種の過誤と第二種の過誤はトレードオフの関係にある。有意水準αを小さくすると第一種の過誤は減るが、第二種の過誤(β)は増える。両方の過誤を同時に減らすには、サンプルサイズを大きくする必要がある。
検出力
検出力とは何か
検出力(power)とは、対立仮説が真のときに正しく帰無仮説を棄却する確率であり、1 - \beta で表される。
わかりやすく言えば、検出力とは「本当に効果があるとき、それを正しく検出できる確率」である。検出力が0.8(80%)であれば、真の効果がある場合に80%の確率でそれを検出できることを意味する。
検出力0.8の検定を行った場合:もし新薬に本当に効果があるなら、80%の確率で「効果がある」と正しく判定できる。逆に言えば、20%の確率で効果を見逃してしまう(第二種の過誤)。
検出力に影響する要因
検出力は以下の4つの要因に影響される。
| 要因 | 検出力への影響 | 解説 |
|---|---|---|
| 効果の大きさ | 大きいほど↑ | 真の効果が大きければ検出しやすい |
| サンプルサイズ | 大きいほど↑ | データが多いほど検出しやすい |
| 有意水準α | 大きいほど↑ | ただし第一種の過誤も増える |
| 母集団の分散 | 小さいほど↑ | ばらつきが小さいほど検出しやすい |
一般に検出力は0.8(80%)以上が望ましいとされる。検出力が低すぎると、効果があっても検出できない可能性が高くなり、研究が無駄になるリスクがある。
サンプルサイズ設計
なぜサンプルサイズ設計が必要か
研究や実験を計画する際、必要なサンプルサイズを事前に計算することをサンプルサイズ設計(sample size determination)という。
サンプルサイズが小さすぎると、本当に効果があっても検出できない(検出力不足)。逆に大きすぎると、時間やコストの無駄になる。適切なサンプルサイズを事前に決めることで、効率的かつ信頼性の高い研究が可能になる。
新薬の臨床試験で、被験者数が少なすぎると効果を見逃す可能性がある。一方、必要以上に多くの被験者を集めることは倫理的・経済的に問題がある。事前にサンプルサイズを計算することで、適切な被験者数を決定できる。
計算式の導出
母平均の検定(母分散 \sigma^2 既知)で、有意水準 \alpha の両側検定を考える。帰無仮説 H_0: \mu = \mu_0 に対し、対立仮説として \mu = \mu_1 のときに検出力 1 - \beta を達成したい。
必要サンプルサイズを求めるには、「有意水準α」と「検出力1−β」の2つの条件を同時に満たす必要がある。
公式の考え方
有意水準αの両側検定では、帰無仮説H₀のもとで検定統計量が棄却域に入る確率がαとなる。このとき、棄却限界値は \mu_0 + z_{\alpha/2} \cdot \dfrac{\sigma}{\sqrt{n}} である。
一方、対立仮説H₁(真の平均が\mu_1)のもとで、検出力1−βを達成するには、検定統計量が棄却域に入る確率が1−βでなければならない。
これら2つの条件を組み合わせると、次の関係式が得られる。
左辺はH₀のもとでの棄却限界値、右辺はH₁のもとで検出力1−βを達成する点を表す。この式を整理すると
これを n について解くと、必要サンプルサイズの公式が得られる。
ただし \Delta = \dfrac{\mu_1 - \mu_0}{\sigma}(エフェクトサイズ)
- z_{\alpha/2}:有意水準αに対応する値(α=0.05なら1.96)
- z_{\beta}:第二種の過誤βに対応する値(β=0.20なら0.84)
- \mu_1 - \mu_0:検出したい効果の大きさ
- \sigma:母集団の標準偏差
エフェクトサイズとは
エフェクトサイズ(effect size)\Delta は、効果の大きさを標準偏差で割って標準化した指標である。単位に依存しないため、異なる研究間での比較が可能となる。
| エフェクトサイズ | 効果の大きさ | 必要サンプルサイズの目安 |
|---|---|---|
| 0.2 | 小さい | 約400(各群) |
| 0.5 | 中程度 | 約64(各群) |
| 0.8 | 大きい | 約26(各群) |
※上記は有意水準5%、検出力80%の場合の目安である。
計算例
有意水準5%(z_{0.025} = 1.96)、検出力80%(z_{0.20} = 0.84)、エフェクトサイズ0.5のときの必要サンプルサイズを求める。
したがって、n = 32 以上が必要となる(サンプルサイズは整数に切り上げる)。
練習問題
H_0: \mu = 500 vs H_1: \mu \neq 500
検定統計量:
|Z_0| = 1.6 < 1.96 なので帰無仮説を棄却できない。
結論:有意水準5%で、平均重量が500gと異なるとはいえない。
標準正規分布で P(Z \ge 2.5) = 0.0062
両側P値 = 2 \times 0.0062 = 0.0124
P値 = 0.0124 < 0.05 なので、帰無仮説は棄却される。
したがって、n = 66 以上が必要。
まとめ
| 用語 | 説明 |
|---|---|
| 帰無仮説 H₀ | 棄却したい仮説(差がない、効果がないなど) |
| 対立仮説 H₁ | 主張したい仮説(差がある、効果があるなど) |
| 有意水準 α | 第一種の過誤の確率の上限(通常5%や1%) |
| P値 | 観測データ以上に極端な結果が得られる確率 |
| 第一種の過誤 | H₀が真なのに棄却する誤り(確率α) |
| 第二種の過誤 | H₁が真なのにH₀を棄却できない誤り(確率β) |
| 検出力 | H₁が真のときにH₀を棄却できる確率(1-β) |
| エフェクトサイズ | 効果の大きさを標準偏差で標準化した値 |
Python実装
SciPyを使った仮説検定とサンプルサイズ設計の実装例を示す。
import numpy as np
from scipy import stats
# === 1. Z検定(母分散既知)===
print("=== Z検定 ===")
x_bar = 508 # 標本平均
mu0 = 500 # 帰無仮説の母平均
sigma = 20 # 母標準偏差(既知)
n = 16 # サンプルサイズ
alpha = 0.05 # 有意水準
# 検定統計量
z0 = (x_bar - mu0) / (sigma / np.sqrt(n))
print(f"検定統計量 Z0 = {z0:.4f}")
# 両側P値
p_value = 2 * (1 - stats.norm.cdf(abs(z0)))
print(f"P値 = {p_value:.4f}")
# 判定
z_crit = stats.norm.ppf(1 - alpha/2)
print(f"棄却限界値 = ±{z_crit:.4f}")
if abs(z0) >= z_crit:
print("結果: 帰無仮説を棄却")
else:
print("結果: 帰無仮説を棄却できない")
print()
# === 2. 検出力の計算 ===
print("=== 検出力の計算 ===")
mu1 = 510 # 対立仮説の母平均
# 標準誤差
se = sigma / np.sqrt(n)
# 棄却限界値(実際の値)
c_upper = mu0 + z_crit * se
c_lower = mu0 - z_crit * se
# 検出力 = P(棄却 | μ=μ1)
power_upper = 1 - stats.norm.cdf(c_upper, mu1, se)
power_lower = stats.norm.cdf(c_lower, mu1, se)
power = power_upper + power_lower
print(f"μ0={mu0}, μ1={mu1}, σ={sigma}, n={n}")
print(f"検出力 = {power:.4f}")
print()
# === 3. サンプルサイズ設計 ===
print("=== サンプルサイズ設計 ===")
effect_size = 0.5 # エフェクトサイズ
target_power = 0.80 # 目標検出力
z_alpha2 = stats.norm.ppf(1 - alpha/2)
z_beta = stats.norm.ppf(target_power)
n_required = ((z_alpha2 + z_beta) / effect_size) ** 2
print(f"有意水準 = {alpha}")
print(f"目標検出力 = {target_power}")
print(f"エフェクトサイズ = {effect_size}")
print(f"必要サンプルサイズ = {np.ceil(n_required):.0f}")
print()
# === 4. 検出力曲線 ===
print("=== 検出力曲線(サンプルサイズと検出力の関係)===")
n_values = [10, 20, 30, 50, 100]
delta = 0.5 # エフェクトサイズ
for n_val in n_values:
# 非心度
ncp = delta * np.sqrt(n_val)
# 検出力(両側)
power_val = 1 - stats.norm.cdf(z_crit - ncp) + stats.norm.cdf(-z_crit - ncp)
print(f"n = {n_val:3d}: 検出力 = {power_val:.4f}")
サンプルサイズが大きくなるほど検出力が上がることが確認できる。エフェクトサイズ0.5で検出力80%を達成するには、約32のサンプルが必要である。