サンプルサイズの決め方8章 対応がある場合の母平均の差の検定
はじめに
このブログ記事では、永田靖著『サンプルサイズの決め方』(朝倉書店)の8章を参考に対応がある場合の母平均の差の検定、検出力の計算方法、適切なサンプルサイズの設計方法について解説します。これら統計学の基本的な概念をPythonを用いて実装しながら確認していきます。
対応がある場合の母平均の差の検定
対応がある場合の母平均の差の検定をする手順は書籍では以下のように紹介されています。
対応のあるデータ対
ここで、
この差
-
手順1 仮説の設定
- 帰無仮説
H_0: \mu_1 = \mu_2 - 対立仮説:
- (1)
(両側検定)H_1: \mu_1 \neq \mu_2 - (2)
(右片側検定)H_1: \mu_1 > \mu_2 - (3)
(左片側検定)H_1: \mu_1 < \mu_2
- (1)
- 帰無仮説
-
手順2 有意水準の設定
有意水準 の設定 (通常は\alpha とする)\alpha = 0.05 -
手順3 棄却域の設定
- 対立仮説(1)の場合:
R: |t_0| \geq t(\phi, \alpha) - 対立仮説(2)の場合:
R: t_0 \geq t(\phi, 2\alpha) - 対立仮説(3)の場合:
R: t_0 \leq -t(\phi, 2\alpha)
- 対立仮説(1)の場合:
ここで、
-
手順4 検定統計量の計算
- データ対の差
を求め、検定統計量d_1, d_2, \cdots, d_n の値を計算:t_0 t_0 = \frac{\bar{d}}{\sqrt{V_d/n}} \bar{d} = \frac{1}{n} \sum_{i=1}^n d_i V_d = \frac{S_d}{n-1} = \frac{\sum(d_i - \bar{d})^2}{n-1} = \frac{\sum d_i^2 - (\sum d_i)^2/n}{n-1} \phi = n-1
- データ対の差
-
手順5 判定
計算された が手順3で設定した棄却域t_0 にあれば、有意と判定し、帰無仮説R を棄却する。H_0
この検定手順に則って検定を行う関数をpythonで実装しました。
import numpy as np
from scipy import stats
def paired_t_test(x1, x2, alpha=0.05, test_type='two-sided'):
"""
パラメータ:
x1, x2 : array
対応のあるデータセット
alpha : float, optional
有意水準 (デフォルト: 0.05)
test_type : {'two-sided', 'greater', 'less'}, optional
検定の種類 (デフォルト: 'two-sided')
Returns:
t_statistic : float
検定統計量 t0 の値
reject_null : bool
帰無仮説を棄却するかどうか
"""
d = np.array(x1) - np.array(x2)
n = len(d)
d_bar = np.round(np.mean(d), 2)
v_d = np.round(np.sum((d - d_bar)**2) / (n - 1), 4)
t_statistic = np.round(d_bar / np.sqrt(v_d / n), 4)
df = n - 1
# 棄却域の計算
if test_type == 'two-sided':
critical_value = stats.t.ppf(1 - alpha/2, df)
reject_null = abs(t_statistic) >= critical_value
elif test_type == 'greater':
critical_value = stats.t.ppf(1 - alpha, df)
reject_null = t_statistic >= critical_value
elif test_type == 'less':
critical_value = stats.t.ppf(alpha, df)
reject_null = t_statistic <= critical_value
else:
raise ValueError("test_type must be 'two-sided', 'greater' or 'less'")
return t_statistic, reject_null
# 問題 8.1
x1_8_1 = [6.2, 4.8, 7.3, 5.5, 6.5, 4.9, 6.8, 7.9, 6.6, 7.3]
x2_8_1 = [5.3, 6.2, 5.9, 7.3, 8.4, 7.3, 6.9, 7.6, 8.5, 8.1]
t_stat_8_1, reject_8_1 = paired_t_test(x1_8_1, x2_8_1, alpha=0.05, test_type='two-sided')
print("問題 8.1 の結果:")
print(f"t統計量: {t_stat_8_1}")
print(f"帰無仮説を棄却するか: {reject_8_1}")
問題 8.1 の結果:
t統計量: -1.84
帰無仮説を棄却するか: False
# 問題 8.2
x1_8_2 = [10.8, 11.2, 9.7, 9.9, 12.0, 9.6, 10.5, 10.7, 10.1]
x2_8_2 = [10.2, 10.1, 9.9, 8.2, 10.2, 9.4, 10.4, 10.0, 10.5]
t_stat_8_2, reject_8_2 = paired_t_test(x1_8_2, x2_8_2, alpha=0.05, test_type='greater')
print("\n問題 8.2 の結果:")
print(f"t統計量: {t_stat_8_2}")
print(f"帰無仮説を棄却するか: {reject_8_2}")
問題 8.2 の結果:
t統計量: 2.3632
帰無仮説を棄却するか: True
# 問題 8.3
x1_8_3 = [19, 19, 21, 19, 22, 19, 20, 21]
x2_8_3 = [21, 22, 16, 22, 25, 18, 24, 23]
t_stat_8_3, reject_8_3 = paired_t_test(x1_8_3, x2_8_3, alpha=0.05, test_type='less')
print("\n問題 8.3 の結果:")
print(f"t統計量: {t_stat_8_3}")
print(f"帰無仮説を棄却するか: {reject_8_3}")
問題 8.3 の結果:
t統計量: -1.3129
帰無仮説を棄却するか: False
検出力・サンプルサイズの計算
5章で紹介した方法と同じであるため、あらためて紹介はしません。こちらを参考にしてください。
最後に
本ブログでは、永田靖著『サンプルサイズの決め方』の第8章「対応がある場合の母平均の差の検定」の内容を、Pythonを用いて実践的に解説しました。このブログにて『サンプルサイズの決め方』に関するブログシリーズは終了とします。このブログを通してサンプルサイズの設計に関して知見が深まり、実務や研究に活きると幸いです。
Discussion