Studentのt検定とWelchのt検定の違いと使い分け|Pythonコード付

Studentのt検定とWelchのt検定の違いと使い分け|Pythonコード付

はじめに

データ分析や統計解析を行う際、平均値の差を検定する方法として「Studentのt検定」と「Welchのt検定」がよく使われます。しかし、どちらを使うべきか迷うことはありませんか?この記事では、これらの検定の違いや使い分け方について、Pythonコードを交えながらわかりやすく解説します。

1. Studentのt検定とは?

Studentのt検定は、2つのグループの平均値に差があるかどうかを検定する方法です。次の条件で使用します。

  • 正規分布が前提
  • 等分散が前提(両群の分散が等しい)

実生活での例

ある学校で、同じクラスの男子と女子の数学テストの平均点に差があるかを知りたいときに使います。

2. Welchのt検定とは?

Welchのt検定は、Studentのt検定の改良版で、次のような特徴があります。

  • 正規分布が前提
  • 等分散が不要(分散が異なっていてもOK)

実生活での例

異なる学校の生徒2グループのテスト結果を比較する場合、学校ごとに成績のばらつきが違うかもしれません。そんなときにWelchのt検定が適しています。

3. 両者の違いと使い分け

比較項目Studentのt検定Welchのt検定
分散の仮定等分散が必要等分散が不要
標本サイズの影響同程度が望ましい異なっても問題なし
頑健性(ロバスト性)低い高い
使用シーン同一条件のグループ比較条件が異なるグループ比較

使い分けのポイント

  • 分散が等しいと判断できるなら→Studentのt検定
  • 分散が異なる、または分からないなら→Welchのt検定

4. Pythonでの実装方法

Pythonのライブラリscipy.statsを使えば、簡単に両検定を実行できます。

4-1. データ準備

import numpy as np
from scipy import stats

# グループAとBのデータ
group_a = np.random.normal(loc=70, scale=10, size=30)  # 平均70, 標準偏差10
group_b = np.random.normal(loc=75, scale=15, size=30)  # 平均75, 標準偏差15

4-2. Studentのt検定

# Studentのt検定(等分散を仮定)
t_stat, p_value = stats.ttest_ind(group_a, group_b, equal_var=True)
print(f"Studentのt検定結果: t値={t_stat:.3f}, p値={p_value:.3f}")
Studentのt検定結果: t値=-1.326, p値=0.190

4-3. Welchのt検定

# Welchのt検定(等分散を仮定しない)
t_stat_welch, p_value_welch = stats.ttest_ind(group_a, group_b, equal_var=False)
print(f"Welchのt検定結果: t値={t_stat_welch:.3f}, p値={p_value_welch:.3f}")
Welchのt検定結果: t値=-1.326, p値=0.191

5. 結局どちらを使うべきか?

判断基準

  1. 分散が等しいか?
    • 等しいStudentのt検定
    • 異なる or 不明Welchのt検定
  2. 標本サイズが均等か?
    • 均等Studentのt検定
    • 不均等Welchのt検定

おすすめ

基本的にはWelchのt検定を使うのが安全です。実際のデータでは、分散が等しいかどうかが明らかなケースは多くないためです。等分散性を確かめる検定手法もありますが、最初からWelchのt検定の方がより柔軟で早いです。

6. まとめ

  • Studentのt検定は、等分散が前提のグループ比較に適しています。
  • Welchのt検定は、分散が異なる場合や分からない場合でも使える柔軟な方法です。
  • Pythonでは、scipy.stats.ttest_ind()を使えば、どちらの検定も簡単に実施できます。
  • 迷ったらWelchのt検定が無難!