【R言語】独立な2群のt検定(ウェルチのt検定)の基本手順とサンプルコード
t検定は、独立した2つのグループの平均値に、統計的に意味のある差(有意差)があるかどうかを検証するための基本的な統計手法です。例えば、「男性と女性の身長の比較」など、お互いに影響を及ぼさない2つの母集団の平均を比べたいときに用いられます。
0. t検定の前提条件について(正規分布の仮定)
t検定を行う上での理論上の前提として、「比較する2つのグループのデータがそれぞれ正規分布に従っていること」という条件(正規性の仮定)があります。
実際のデータ分析においては以下のポイントを押さえておきましょう。
- 中心極限定理による頑健性(ロバスト性): サンプルサイズが十分にある場合(各群30〜50以上が目安)、データが多少正規分布から外れていてもt検定の結果は信頼できます。
- サンプルサイズが非常に少ない場合: データ数が少なく、かつ正規分布から大きくかけ離れている場合は、ノンパラメトリック検定であるマン・ホッケーのU検定(
wilcox.test())の利用を検討します。
今回は、あらかじめ rnorm() 関数を使って「正規分布に従うデータ」を生成して検証を行います。
1. サンプルデータの作成(rnorm関数について)
【 手順 】 手元に実データがない場合でも、Rの rnorm() 関数を使えばテスト用のデータ(正規乱数)を簡単に作ることができます。
→ rnorm(n, mean, sd) は、正規分布に従う乱数を発生させる関数(random normal distribution)です。個数・平均値・標準偏差を指定してシミュレーションデータを作成します。
【 サンプルコード 】
# 1. 再現性のための乱数シードの設定
set.seed(123)
# 2. rnorm() を使って男性と女性のダミーデータを生成
male_height <- rnorm(n = 50, mean = 171.5, sd = 5.8)
female_height <- rnorm(n = 50, mean = 158.0, sd = 5.2)
# 3. データフレームへの統合
df <- data.frame(
gender = factor(rep(c("Male", "Female"), each = 50)),
height = c(male_height, female_height)
)
# データの先頭6行を確認
head(df)
【 実行結果 】
gender height
1 Male 168.2492
2 Male 170.1650
3 Male 180.5405
4 Male 171.9089
5 Male 172.2499
6 Male 181.4474
1 Male 168.2492
2 Male 170.1650
3 Male 180.5405
4 Male 171.9089
5 Male 172.2499
6 Male 181.4474
2. t検定の実行手順
【 手順 】 検定を行う前に記述統計量を確認し、その後 t.test() 関数で検定を実行します。
【 サンプルコード 】
# Step 1: 性別ごとの平均値と標準偏差を算出
aggregate(height ~ gender, data = df, FUN = function(x) c(mean = mean(x), sd = sd(x)))
# Step 2: 2標本t検定の実行(ウェルチのt検定がデフォルト)
res <- t.test(height ~ gender, data = df)
# 検定結果のコンソール出力
print(res)
【 実行結果 】
# Step 1 の結果
gender height.mean height.sd
1 Female 158.761323 4.708325
2 Male 171.699541 5.370046
# Step 2 の結果(print(res))
Welch Two Sample t-test
data: height by gender
t = -12.81, df = 96.353, p-value < 2.2e-16
alternative hypothesis: true difference in means between group Female and group Male is not equal to 0
95 percent confidence interval:
-14.94297 -10.93346
sample estimates:
mean in group Female mean in group Male
158.7613 171.6995
gender height.mean height.sd
1 Female 158.761323 4.708325
2 Male 171.699541 5.370046
# Step 2 の結果(print(res))
Welch Two Sample t-test
data: height by gender
t = -12.81, df = 96.353, p-value < 2.2e-16
alternative hypothesis: true difference in means between group Female and group Male is not equal to 0
95 percent confidence interval:
-14.94297 -10.93346
sample estimates:
mean in group Female mean in group Male
158.7613 171.6995
3. 結果の見方とまとめ
【 ポイント 】
[ t検定結果の読み方 ]
1.p-value(p値)
→
2.95%信頼区間
→ 平均値の差(女性 - 男性)が約 -14.94cm から -10.93cm の範囲にあると推定されます。
3.サンプル平均
→ 女性は約158.76cm、男性は約171.70cmであることが確認できます。
1.p-value(p値)
→
p-value < 2.2e-16(ほぼ0)のため、有意水準0.05未満となり「男女の平均身長には統計的に有意な差がある」と結論づけられます。2.95%信頼区間
→ 平均値の差(女性 - 男性)が約 -14.94cm から -10.93cm の範囲にあると推定されます。
3.サンプル平均
→ 女性は約158.76cm、男性は約171.70cmであることが確認できます。
4. まとめ
Rの rnorm() と t.test() を使えば、手元にデータがなくても簡単に統計検定のシミュレーションが行えます。データの比較を行う際は、ぜひこの手順を試してみてください。
PR