データから母集団のパラメータを推定する方法には、点推定 と 区間推定 の2つがあります。点推定は1つの値(たとえば標本平均 $\bar{X} = 52.3$)で母パラメータを推定する方法ですが、「その推定値がどれくらい信頼できるか」は点推定だけではわかりません。
そこで登場するのが 区間推定 です。区間推定では「母平均は $[50.1,\, 54.5]$ の範囲にある」というように、推定値に幅を持たせることで推定の不確実性を定量的に表現します。この区間を 信頼区間(confidence interval) と呼びます。
信頼区間は統計的検定と並ぶ統計的推論の柱です。検定が「差があるか否か」を二値的に判定するのに対し、信頼区間は「パラメータがどの範囲にありそうか」を示します。p値だけでなく信頼区間を報告することが、現代の統計実務では強く推奨されています。
本記事の内容
- 信頼区間の定義と正しい解釈(よくある誤解も)
- 母平均の信頼区間の導出(母分散既知:$z$ 区間、母分散未知:$t$ 区間)
- 母比率の信頼区間(正規近似)
- 必要な標本サイズの決定
- 具体的な計算例と Python 実装
前提知識
この記事を読む前に、以下の記事を読んでおくと理解が深まります。
点推定と区間推定
母集団のパラメータ(たとえば母平均 $\mu$)を推定する方法には、大きく分けて2つあります。
点推定(point estimation) は、パラメータの値を1つの数値で推定する方法です。たとえば標本平均 $\bar{X}$ で母平均 $\mu$ を推定します。しかし、点推定値はサンプルごとに変動するため、それだけでは推定の精度がわかりません。
区間推定(interval estimation) は、パラメータが含まれると考えられる区間を提示する方法です。「母平均 $\mu$ は $[a,\, b]$ の範囲にある」という形で報告します。この区間が信頼区間です。
信頼区間の定義と正しい解釈
数学的定義
母集団から大きさ $n$ の標本 $X_1, X_2, \dots, X_n$ を取り出し、未知の母パラメータ $\theta$ を推定する状況を考えます。標本から計算される2つの統計量 $L$ と $U$($L < U$)を用いて構成した区間 $[L,\, U]$ が、信頼係数(confidence level) $1 – \alpha$ の信頼区間であるとは、次の条件を満たすことをいいます。
$$ P(L \leq \theta \leq U) = 1 – \alpha $$
ここで $L$ と $U$ は標本に基づく確率変数であり、$\theta$ は未知の定数です。一般的に使われる信頼係数は $1 – \alpha = 0.95$(95% 信頼区間)です。
信頼区間の正しい解釈
信頼区間は頻度論的な概念であり、その解釈には注意が必要です。
正しい解釈: 同じ母集団から同じサイズの標本を繰り返し取り出して、そのたびに $100(1-\alpha)$% 信頼区間を構成するという手続きを多数回繰り返したとき、構成された区間のうち $100(1-\alpha)$% が真のパラメータ $\theta$ を含む。
つまり、95% 信頼区間を100回作れば、そのうち約95回は真の値を含み、約5回は含まないということです。95% という確率は 特定の1つの区間 についてではなく、区間を構成する手続き についての確率です。
よくある誤解
以下は信頼区間に関するよくある誤解です。
誤解1: 「母平均が $[L,\, U]$ に含まれる確率が 95% である」
母平均 $\mu$ は未知ですが固定された定数です。確率変数ではないため、「含まれる確率」という表現は厳密には正しくありません。確率変数なのは区間の端点 $L$ と $U$ の方です。固定された定数が区間に「含まれる確率」は 0 か 1 のどちらかです。
誤解2: 「データの 95% が信頼区間に入る」
信頼区間は個々のデータの範囲ではなく、母パラメータの推定区間です。データの散らばりを表すのは予測区間(prediction interval)です。
誤解3: 「信頼区間が狭いほど推定が正確である」
信頼係数を下げれば信頼区間は狭くなりますが、真の値を含む確率も下がります。同じ信頼係数のもとで区間が狭いなら、推定精度が高いといえます。
母平均の信頼区間(母分散既知):$z$ 区間
設定
母集団が正規分布 $N(\mu,\, \sigma^2)$ に従い、母分散 $\sigma^2$ が既知 の場合を考えます。大きさ $n$ の無作為標本 $X_1, X_2, \dots, X_n$ から母平均 $\mu$ の信頼区間を構成します。
標本平均の分布
標本平均 $\bar{X}$ は次のように定義されます。
$$ \bar{X} = \frac{1}{n} \sum_{i=1}^{n} X_i $$
$X_i \sim N(\mu,\, \sigma^2)$ が互いに独立なとき、$\bar{X}$ の分布は
$$ \bar{X} \sim N\!\left(\mu,\, \frac{\sigma^2}{n}\right) $$
となります。これを標準化すると
$$ Z = \frac{\bar{X} – \mu}{\sigma / \sqrt{n}} \sim N(0,\, 1) $$
が得られます。$Z$ は標準正規分布に従います。
信頼区間の導出
信頼係数 $1 – \alpha$ の信頼区間を導出します。標準正規分布の上側 $\alpha/2$ 点を $z_{\alpha/2}$ とすると
$$ P\!\left(-z_{\alpha/2} \leq Z \leq z_{\alpha/2}\right) = 1 – \alpha $$
が成り立ちます。ここに $Z = \dfrac{\bar{X} – \mu}{\sigma / \sqrt{n}}$ を代入します。
$$ P\!\left(-z_{\alpha/2} \leq \frac{\bar{X} – \mu}{\sigma / \sqrt{n}} \leq z_{\alpha/2}\right) = 1 – \alpha $$
不等式の各辺に $\sigma / \sqrt{n}$ を掛けます。
$$ P\!\left(-z_{\alpha/2} \cdot \frac{\sigma}{\sqrt{n}} \leq \bar{X} – \mu \leq z_{\alpha/2} \cdot \frac{\sigma}{\sqrt{n}}\right) = 1 – \alpha $$
各辺から $\bar{X}$ を引き、$-1$ を掛けて不等号の向きを反転させます。
$$ P\!\left(\bar{X} – z_{\alpha/2} \cdot \frac{\sigma}{\sqrt{n}} \leq \mu \leq \bar{X} + z_{\alpha/2} \cdot \frac{\sigma}{\sqrt{n}}\right) = 1 – \alpha $$
したがって、母平均 $\mu$ の $100(1-\alpha)$% 信頼区間(z 区間)は次のとおりです。
$$ \left[\bar{X} – z_{\alpha/2} \cdot \frac{\sigma}{\sqrt{n}},\quad \bar{X} + z_{\alpha/2} \cdot \frac{\sigma}{\sqrt{n}}\right] $$
$\alpha = 0.05$ のとき $z_{0.025} = 1.96$ なので、95% 信頼区間は
$$ \bar{X} \pm 1.96 \cdot \frac{\sigma}{\sqrt{n}} $$
と書けます。
母平均の信頼区間(母分散未知):$t$ 区間
設定
実際の問題では、母分散 $\sigma^2$ が未知であることがほとんどです。この場合、$\sigma$ を標本標準偏差 $S$ で置き換えます。
不偏分散と $t$ 統計量
不偏分散 $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}} $$
は、$\bar{X}$ と $S^2$ が独立であるという正規分布の性質(コクランの定理)から、自由度 $n – 1$ の $t$ 分布 に従います。
$$ T \sim t(n – 1) $$
$t$ 分布は標準正規分布よりも裾が重く(分散が大きく)、$\sigma$ を $S$ で置き換えたことによる追加の不確実性を反映しています。$n$ が大きくなると $t$ 分布は標準正規分布に近づきます。
信頼区間の導出
自由度 $n – 1$ の $t$ 分布の上側 $\alpha/2$ 点を $t_{\alpha/2,\, n-1}$ とすると
$$ P\!\left(-t_{\alpha/2,\, n-1} \leq T \leq t_{\alpha/2,\, n-1}\right) = 1 – \alpha $$
$z$ 区間の場合と同様に $\mu$ について解きます。$T$ の定義を代入すると
$$ P\!\left(-t_{\alpha/2,\, n-1} \leq \frac{\bar{X} – \mu}{S / \sqrt{n}} \leq t_{\alpha/2,\, n-1}\right) = 1 – \alpha $$
各辺に $S / \sqrt{n}$ を掛けます。
$$ P\!\left(-t_{\alpha/2,\, n-1} \cdot \frac{S}{\sqrt{n}} \leq \bar{X} – \mu \leq t_{\alpha/2,\, n-1} \cdot \frac{S}{\sqrt{n}}\right) = 1 – \alpha $$
各辺から $\bar{X}$ を引き、$-1$ を掛けて不等号を反転させます。
$$ P\!\left(\bar{X} – t_{\alpha/2,\, n-1} \cdot \frac{S}{\sqrt{n}} \leq \mu \leq \bar{X} + t_{\alpha/2,\, n-1} \cdot \frac{S}{\sqrt{n}}\right) = 1 – \alpha $$
したがって、母分散未知の場合の母平均 $\mu$ の $100(1-\alpha)$% 信頼区間(t 区間)は次のとおりです。
$$ \left[\bar{X} – t_{\alpha/2,\, n-1} \cdot \frac{S}{\sqrt{n}},\quad \bar{X} + t_{\alpha/2,\, n-1} \cdot \frac{S}{\sqrt{n}}\right] $$
$z$ 区間との違い
$z$ 区間との違いは次の2点です。
- $\sigma$ の代わりに標本標準偏差 $S$ を使う
- $z_{\alpha/2}$ の代わりに $t_{\alpha/2,\, n-1}$ を使う(裾が重い分だけ区間が広がる)
$n$ が十分大きい場合(目安として $n \geq 30$ 程度)、$t$ 分布は標準正規分布にほぼ一致するため、$z$ 区間と $t$ 区間の差は小さくなります。
母比率の信頼区間(正規近似)
設定
母集団において、ある属性を持つ個体の割合(母比率)を $p$ とします。大きさ $n$ の標本から属性を持つ個体の数を $X$ とすると
$$ X \sim B(n,\, p) $$
です。標本比率 $\hat{p}$ は
$$ \hat{p} = \frac{X}{n} $$
で定義されます。
導出
$n$ が十分大きいとき、中心極限定理により $\hat{p}$ は近似的に正規分布に従います。
$$ \hat{p} \approx N\!\left(p,\, \frac{p(1-p)}{n}\right) $$
標準化すると
$$ Z = \frac{\hat{p} – p}{\sqrt{p(1-p) / n}} \approx N(0,\, 1) $$
$z$ 区間と同様の変形を行いたいところですが、分母にも未知パラメータ $p$ が含まれてしまいます。実用上は $p$ を $\hat{p}$ で置き換えた ワルド(Wald)信頼区間 がよく使われます。
$$ P\!\left(-z_{\alpha/2} \leq \frac{\hat{p} – p}{\sqrt{\hat{p}(1-\hat{p}) / n}} \leq z_{\alpha/2}\right) \approx 1 – \alpha $$
$p$ について解くと、母比率 $p$ の $100(1-\alpha)$% 信頼区間(ワルド信頼区間)は
$$ \left[\hat{p} – z_{\alpha/2}\sqrt{\frac{\hat{p}(1-\hat{p})}{n}},\quad \hat{p} + z_{\alpha/2}\sqrt{\frac{\hat{p}(1-\hat{p})}{n}}\right] $$
となります。この近似は $n\hat{p} \geq 5$ かつ $n(1 – \hat{p}) \geq 5$ のとき精度が良いとされています。
標本サイズの決定
母平均の場合($\sigma$ 既知)
信頼区間の幅は $2 z_{\alpha/2} \cdot \sigma / \sqrt{n}$ です。信頼区間の幅の半分、すなわち 許容誤差(margin of error) を $E$ とおくと
$$ E = z_{\alpha/2} \cdot \frac{\sigma}{\sqrt{n}} $$
この式を $n$ について解きます。
$$ \sqrt{n} = \frac{z_{\alpha/2} \cdot \sigma}{E} $$
両辺を2乗すると
$$ n = \left(\frac{z_{\alpha/2} \cdot \sigma}{E}\right)^2 $$
が得られます。計算結果が整数でない場合は 切り上げ ます。
たとえば、95% 信頼区間で許容誤差 $E = 2$、$\sigma = 10$ のとき
$$ n = \left(\frac{1.96 \times 10}{2}\right)^2 = \left(\frac{19.6}{2}\right)^2 = 9.8^2 = 96.04 $$
となるので、切り上げて $n = 97$ 以上の標本が必要です。
母比率の場合
同様に、母比率の信頼区間の許容誤差を $E$ とすると
$$ E = z_{\alpha/2} \sqrt{\frac{p(1-p)}{n}} $$
$n$ について解くと
$$ n = \left(\frac{z_{\alpha/2}}{E}\right)^2 p(1-p) $$
ここで $p$ は未知なので、事前の予想値を使うか、最も保守的な $p = 0.5$($p(1-p)$ が最大になる値)を用います。
$$ n = \left(\frac{z_{\alpha/2}}{E}\right)^2 \times 0.25 $$
$p = 0.5$, $\alpha = 0.05$, $E = 0.03$(3%ポイント)のとき
$$ n = \left(\frac{1.96}{0.03}\right)^2 \times 0.25 = 65.333^2 \times 0.25 = 4268.44 \times 0.25 = 1067.1 $$
切り上げて $n = 1068$ 以上が必要です。選挙の世論調査などで「約1000人に調査」というのは、この計算に基づいています。
具体的な計算例
例1: 母平均の $z$ 区間
ある工場で製造されるボルトの長さは正規分布に従い、母標準偏差 $\sigma = 0.5\,\text{mm}$ が既知です。$n = 25$ 本を測定したところ、標本平均は $\bar{x} = 50.2\,\text{mm}$ でした。95% 信頼区間を求めます。
$$ \bar{x} \pm z_{0.025} \cdot \frac{\sigma}{\sqrt{n}} = 50.2 \pm 1.96 \times \frac{0.5}{\sqrt{25}} $$
標準誤差を計算します。
$$ \frac{0.5}{\sqrt{25}} = \frac{0.5}{5} = 0.1 $$
信頼区間は
$$ 50.2 \pm 1.96 \times 0.1 = 50.2 \pm 0.196 = [50.004,\, 50.396] $$
母平均は $[50.004,\, 50.396]\,\text{mm}$ の範囲にあると推定されます。
例2: 母平均の $t$ 区間
ある大学のプログラミング講座で、受講者 $n = 10$ 名のテスト得点が以下の通りでした(母分散は未知)。
$$ 78,\, 85,\, 92,\, 88,\, 76,\, 95,\, 83,\, 79,\, 91,\, 87 $$
標本平均を計算します。
$$ \bar{x} = \frac{78 + 85 + 92 + 88 + 76 + 95 + 83 + 79 + 91 + 87}{10} = \frac{854}{10} = 85.4 $$
不偏分散を計算します。各偏差の2乗を求めます。
$$ \begin{align} (78 – 85.4)^2 &= (-7.4)^2 = 54.76 \\ (85 – 85.4)^2 &= (-0.4)^2 = 0.16 \\ (92 – 85.4)^2 &= (6.6)^2 = 43.56 \\ (88 – 85.4)^2 &= (2.6)^2 = 6.76 \\ (76 – 85.4)^2 &= (-9.4)^2 = 88.36 \\ (95 – 85.4)^2 &= (9.6)^2 = 92.16 \\ (83 – 85.4)^2 &= (-2.4)^2 = 5.76 \\ (79 – 85.4)^2 &= (-6.4)^2 = 40.96 \\ (91 – 85.4)^2 &= (5.6)^2 = 31.36 \\ (87 – 85.4)^2 &= (1.6)^2 = 2.56 \end{align} $$
$$ S^2 = \frac{54.76 + 0.16 + 43.56 + 6.76 + 88.36 + 92.16 + 5.76 + 40.96 + 31.36 + 2.56}{9} = \frac{366.40}{9} = 40.711 $$
$$ S = \sqrt{40.711} \approx 6.381 $$
自由度 $n – 1 = 9$ の $t$ 分布で $t_{0.025}(9) = 2.262$ です。95% 信頼区間は
$$ \bar{x} \pm t_{0.025}(9) \cdot \frac{S}{\sqrt{n}} = 85.4 \pm 2.262 \times \frac{6.381}{\sqrt{10}} $$
標準誤差を計算します。
$$ \frac{6.381}{\sqrt{10}} = \frac{6.381}{3.162} \approx 2.018 $$
$$ 85.4 \pm 2.262 \times 2.018 = 85.4 \pm 4.565 = [80.84,\, 89.96] $$
母平均の得点は $[80.84,\, 89.96]$ 点の範囲にあると推定されます。
例3: 母比率の信頼区間
世論調査で $n = 400$ 人に質問したところ、$220$ 人が「賛成」と回答しました。母比率 $p$ の 95% 信頼区間を求めます。
標本比率は
$$ \hat{p} = \frac{220}{400} = 0.55 $$
近似の妥当性を確認します。$n\hat{p} = 220 \geq 5$ かつ $n(1-\hat{p}) = 180 \geq 5$ なので正規近似は妥当です。
標準誤差を計算します。
$$ \sqrt{\frac{\hat{p}(1-\hat{p})}{n}} = \sqrt{\frac{0.55 \times 0.45}{400}} = \sqrt{\frac{0.2475}{400}} = \sqrt{0.00061875} \approx 0.02487 $$
95% 信頼区間は
$$ 0.55 \pm 1.96 \times 0.02487 = 0.55 \pm 0.04875 = [0.501,\, 0.599] $$
母比率の 95% 信頼区間は $[0.501,\, 0.599]$ です。区間の下限が 0.5 を超えているため、「過半数が賛成している」と言える根拠があります。
Python での実装
手計算との比較
import numpy as np
from scipy import stats
# ==============================================
# 例1: 母平均の z 区間(母分散既知)
# ==============================================
print("=" * 55)
print("例1: 母平均の z 区間(母分散既知)")
print("=" * 55)
x_bar = 50.2 # 標本平均
sigma = 0.5 # 母標準偏差(既知)
n = 25 # 標本サイズ
alpha = 0.05 # 有意水準
# 臨界値
z_crit = stats.norm.ppf(1 - alpha / 2)
print(f"z_{{α/2}} = {z_crit:.4f}")
# 標準誤差
se = sigma / np.sqrt(n)
print(f"標準誤差 = {se:.4f}")
# 信頼区間
ci_lower = x_bar - z_crit * se
ci_upper = x_bar + z_crit * se
print(f"95% 信頼区間: [{ci_lower:.4f}, {ci_upper:.4f}]")
# scipy.stats.norm.interval で検算
ci_scipy = stats.norm.interval(1 - alpha, loc=x_bar, scale=se)
print(f"scipy検算: [{ci_scipy[0]:.4f}, {ci_scipy[1]:.4f}]")
import numpy as np
from scipy import stats
# ==============================================
# 例2: 母平均の t 区間(母分散未知)
# ==============================================
print("=" * 55)
print("例2: 母平均の t 区間(母分散未知)")
print("=" * 55)
data = np.array([78, 85, 92, 88, 76, 95, 83, 79, 91, 87])
n = len(data)
x_bar = np.mean(data)
s = np.std(data, ddof=1) # 不偏標準偏差(ddof=1)
alpha = 0.05
# t 分布の臨界値(自由度 n-1)
t_crit = stats.t.ppf(1 - alpha / 2, df=n - 1)
print(f"標本平均: {x_bar:.2f}")
print(f"標本標準偏差: {s:.4f}")
print(f"t_{{α/2, {n-1}}} = {t_crit:.4f}")
# 標準誤差
se = s / np.sqrt(n)
print(f"標準誤差 = {se:.4f}")
# 信頼区間
ci_lower = x_bar - t_crit * se
ci_upper = x_bar + t_crit * se
print(f"95% 信頼区間: [{ci_lower:.4f}, {ci_upper:.4f}]")
# scipy.stats.t.interval で検算
ci_scipy = stats.t.interval(1 - alpha, df=n - 1, loc=x_bar, scale=se)
print(f"scipy検算: [{ci_scipy[0]:.4f}, {ci_scipy[1]:.4f}]")
import numpy as np
from scipy import stats
# ==============================================
# 例3: 母比率の信頼区間(ワルド信頼区間)
# ==============================================
print("=" * 55)
print("例3: 母比率のワルド信頼区間")
print("=" * 55)
x_count = 220 # 賛成の人数
n = 400 # 調査人数
alpha = 0.05
p_hat = x_count / n
# 臨界値
z_crit = stats.norm.ppf(1 - alpha / 2)
# 標準誤差
se = np.sqrt(p_hat * (1 - p_hat) / n)
print(f"標本比率 = {p_hat:.4f}")
print(f"標準誤差 = {se:.5f}")
# ワルド信頼区間
ci_lower = p_hat - z_crit * se
ci_upper = p_hat + z_crit * se
print(f"95% 信頼区間: [{ci_lower:.4f}, {ci_upper:.4f}]")
# scipy の binomtest による正確信頼区間との比較
result = stats.binomtest(x_count, n, alternative='two-sided')
ci_exact = result.proportion_ci(confidence_level=0.95)
print(f"\nbinomtest による正確信頼区間:")
print(f"95% 信頼区間: [{ci_exact.low:.4f}, {ci_exact.high:.4f}]")
必要標本サイズの計算
import numpy as np
from scipy import stats
def sample_size_mean(sigma, E, alpha=0.05):
"""母平均の信頼区間に必要な標本サイズ(σ既知)"""
z = stats.norm.ppf(1 - alpha / 2)
n = (z * sigma / E) ** 2
return int(np.ceil(n))
def sample_size_proportion(E, p=0.5, alpha=0.05):
"""母比率の信頼区間に必要な標本サイズ"""
z = stats.norm.ppf(1 - alpha / 2)
n = (z / E) ** 2 * p * (1 - p)
return int(np.ceil(n))
# 母平均: σ=10, 誤差限界E=2, 95%信頼区間
n_mean = sample_size_mean(sigma=10, E=2)
print(f"母平均の必要標本サイズ (σ=10, E=2): n = {n_mean}")
# 母比率: 誤差限界E=0.03, 95%信頼区間
n_prop = sample_size_proportion(E=0.03)
print(f"母比率の必要標本サイズ (E=0.03, p=0.5): n = {n_prop}")
# 誤差の限界と必要標本サイズの関係
print()
print("誤差の限界と必要標本サイズ(母比率, p=0.5, 95%信頼区間)")
print("-" * 35)
for E in [0.10, 0.05, 0.03, 0.02, 0.01]:
n_req = sample_size_proportion(E=E)
print(f" E = {E:.2f} → n = {n_req:>5}")
信頼区間の意味のシミュレーション
95% 信頼区間を繰り返し構成したとき、約95%が真の母平均を含むことをシミュレーションで確認します。
import numpy as np
import matplotlib.pyplot as plt
from scipy import stats
np.random.seed(42)
# --- パラメータ ---
mu_true = 50 # 真の母平均
sigma = 10 # 母標準偏差
n = 25 # 標本サイズ
alpha = 0.05 # 有意水準
n_simulations = 50 # シミュレーション回数
z_crit = stats.norm.ppf(1 - alpha / 2)
# --- シミュレーション ---
contains_mu = []
ci_lowers = []
ci_uppers = []
x_bars = []
for i in range(n_simulations):
sample = np.random.normal(mu_true, sigma, n)
x_bar = sample.mean()
se = sigma / np.sqrt(n)
ci_lower = x_bar - z_crit * se
ci_upper = x_bar + z_crit * se
x_bars.append(x_bar)
ci_lowers.append(ci_lower)
ci_uppers.append(ci_upper)
contains_mu.append(ci_lower <= mu_true <= ci_upper)
# --- 可視化 ---
fig, ax = plt.subplots(figsize=(10, 10))
for i in range(n_simulations):
color = "steelblue" if contains_mu[i] else "red"
ax.plot([ci_lowers[i], ci_uppers[i]], [i, i], color=color, linewidth=1.5)
ax.plot(x_bars[i], i, "o", color=color, markersize=3)
ax.axvline(mu_true, color="black", linestyle="--", linewidth=1.5,
label=f"True $\\mu = {mu_true}$")
coverage = sum(contains_mu) / n_simulations * 100
ax.set_xlabel("Value", fontsize=13)
ax.set_ylabel("Simulation index", fontsize=13)
ax.set_title(
f"95% Confidence Intervals ({n_simulations} simulations)\n"
f"Coverage: {coverage:.0f}% "
f"(blue: contains $\\mu$, red: does not)",
fontsize=13
)
ax.legend(fontsize=12)
ax.grid(True, alpha=0.3)
plt.tight_layout()
plt.savefig("confidence_interval_simulation.png", dpi=150, bbox_inches="tight")
plt.show()
print(f"真の母平均を含む区間の割合: {coverage:.1f}%")
上記のコードを実行すると、50本の信頼区間が描画されます。青い区間は真の母平均 $\mu = 50$ を含み、赤い区間は含みません。理論どおり、おおよそ 95% の区間が真値を含むことが確認できます。これが信頼区間の「95%」の意味です。
信頼区間と仮説検定の対応の可視化
import numpy as np
import matplotlib.pyplot as plt
from scipy import stats
# --- データ ---
x_bar = 85.4
s = 6.381
n = 10
df = n - 1
alpha = 0.05
t_crit = stats.t.ppf(1 - alpha / 2, df)
se = s / np.sqrt(n)
ci_lower = x_bar - t_crit * se
ci_upper = x_bar + t_crit * se
# --- 検定する帰無仮説の値 ---
mu0_values = [78, 82, 88, 92]
fig, ax = plt.subplots(figsize=(10, 4))
# 信頼区間の描画
ax.plot([ci_lower, ci_upper], [0, 0], "b-", linewidth=4,
label=f"95% CI: [{ci_lower:.2f}, {ci_upper:.2f}]")
ax.plot(x_bar, 0, "bo", markersize=10)
# 各 μ0 に対する検定結果
for mu0 in mu0_values:
in_ci = ci_lower <= mu0 <= ci_upper
color = "green" if in_ci else "red"
marker = "^" if in_ci else "x"
label_text = f"$\\mu_0 = {mu0}$: {'not rejected' if in_ci else 'rejected'}"
ax.plot(mu0, 0, marker, color=color, markersize=12, markeredgewidth=2,
label=label_text)
ax.set_xlabel("$\\mu$", fontsize=13)
ax.set_yticks([])
ax.set_title(
"Duality of Confidence Interval and Hypothesis Test\n"
f"($\\bar{{x}} = {x_bar}$, $s = {s}$, $n = {n}$, $\\alpha = {alpha}$)",
fontsize=13
)
ax.legend(fontsize=11, loc="upper left")
ax.grid(True, alpha=0.3, axis="x")
plt.tight_layout()
plt.savefig("ci_hypothesis_test_duality.png", dpi=150, bbox_inches="tight")
plt.show()
この図では、95% 信頼区間の範囲内にある $\mu_0 = 82,\, 88$ は帰無仮説が棄却されず(緑の三角)、区間外にある $\mu_0 = 78,\, 92$ は棄却される(赤のバツ)ことが確認できます。
信頼区間と仮説検定の関係
信頼区間と仮説検定には、密接な 双対性(duality) があります。
帰無仮説 $H_0: \mu = \mu_0$ を有意水準 $\alpha$ で両側検定することは、信頼係数 $1 – \alpha$ の信頼区間に $\mu_0$ が含まれるかどうかを調べることと 等価 です。
$$ \text{$H_0$ を棄却} \iff \mu_0 \notin \left[\bar{X} – z_{\alpha/2} \cdot \frac{\sigma}{\sqrt{n}},\quad \bar{X} + z_{\alpha/2} \cdot \frac{\sigma}{\sqrt{n}}\right] $$
$$ \text{$H_0$ を棄却しない} \iff \mu_0 \in \left[\bar{X} – z_{\alpha/2} \cdot \frac{\sigma}{\sqrt{n}},\quad \bar{X} + z_{\alpha/2} \cdot \frac{\sigma}{\sqrt{n}}\right] $$
導出
検定で $H_0$ を棄却する条件は
$$ \left|\frac{\bar{X} – \mu_0}{\sigma / \sqrt{n}}\right| > z_{\alpha/2} $$
これを変形すると
$$ |\bar{X} – \mu_0| > z_{\alpha/2} \cdot \frac{\sigma}{\sqrt{n}} $$
すなわち
$$ \mu_0 < \bar{X} - z_{\alpha/2} \cdot \frac{\sigma}{\sqrt{n}} \quad \text{または} \quad \mu_0 > \bar{X} + z_{\alpha/2} \cdot \frac{\sigma}{\sqrt{n}} $$
これは $\mu_0$ が信頼区間の外にあることを意味します。逆に、$H_0$ を棄却しない条件は $\mu_0$ が信頼区間の内にあることと一致します。
つまり、信頼区間は「棄却されない $\mu_0$ の値の集合」と解釈できます。信頼区間は検定の結果だけでなく、推定の精度(区間の幅)や効果の方向性も同時に示せるため、p値だけを報告するよりも情報量が多いといえます。
まとめ
本記事では、信頼区間の定義、構成方法、正しい解釈について解説しました。
- 信頼区間 は、母集団パラメータが含まれると考えられる区間であり、推定の不確実さを定量化します。
- 正しい解釈: 「手続きを繰り返したとき、95% の区間が真値を含む」のであり、「特定の区間が 95% の確率で真値を含む」のではありません。
- $\sigma$ 既知の $z$ 区間: $\bar{X} \pm z_{\alpha/2} \cdot \sigma / \sqrt{n}$ で構成します。
- $\sigma$ 未知の $t$ 区間: $\bar{X} \pm t_{\alpha/2,\, n-1} \cdot S / \sqrt{n}$ で構成し、$t$ 分布の裾の重さにより $z$ 区間より幅が広くなります。
- 母比率の信頼区間: ワルド信頼区間 $\hat{p} \pm z_{\alpha/2}\sqrt{\hat{p}(1 – \hat{p})/n}$ で構成します。
- 必要標本サイズ は、許容する誤差の限界から逆算して求められます。
- 信頼区間と仮説検定は 双対関係 にあり、$\mu_0$ が信頼区間に含まれるかどうかが検定の棄却判定と一致します。
次のステップとして、以下の記事も参考にしてください。