メインコンテンツへスキップ
  1. ブログ投稿/

統計 - 独立標本t検定

この投稿は、統計学で使用される独立標本 t検定について説明するために書かれました。

今回もPythonライブラリScipyを利用して独立標本t検定を行います。

独立標本t検定 #

独立標本t検定は、2つの独立した標本間の平均の差が統計的に有意かどうかを検定する統計分析技術です。これは、2つのグループ間の平均差が偶然に起こったものなのか、それとも実際に存在するものなのかを判断するために使用されます。

独立標本 t検定の主要なステップは次のとおりです。

1. 仮説の設定 #

H₀ : 𝜇₁  = 𝜇₂ → 帰無仮説 2つのグループの平均は同じである。
H₁ : 𝜇₁  ≠ 𝜇₂ → 対立仮説 2つのグループの平均は異なる。

2. 正規性の検定 #

2つのグループの標本数が30未満の場合、正規性の検定が必要です。

2つのグループの標本数が30以上の場合、中心極限定理により正規性が満たされると仮定します。

  • Scipyでの正規性検定はShapiro-Wilk検定を通じて確認可能です。

3. 等分散性の検定 #

2つのグループのデータ数が同じ場合、分散は等しいと仮定します。

2つのグループのデータ数が異なる場合、分散が等しいかどうかを確認するために等分散性の検定を行うことができます。

  • Scipyでの等分散性検定はLevene検定を通じて確認可能です。

4. 独立標本 t統計量の計算 #

2つのグループの平均と標準偏差を使用して独立標本 t統計量を計算します。

5. 決定/結論 #

計算されたt統計量が臨界値を超えた場合、帰無仮説を棄却し対立仮説を採用します。

そうでない場合は、帰無仮説を棄却しません。

統計的に有意な差がある場合、2つのグループ間に平均の差が存在すると結論付けます。

独立標本t検定は、2つのグループ間の平均の差を比較するのに有用であり、実験群と対照群間の差を調査したり、2つの条件間の効果を確認するなどの状況で適用できます。

PythonライブラリScipyの利用方法 #

次に、PythonのScipyライブラリを利用して独立標本 t検定を行います。

今回扱うデータには、人文系の学生が多いAクラスでは筋力トレーニングをする学生が急増し、Aはもし筋力トレーニングが集中力を向上させる効果があるなら、自分のクラスと通常から筋力トレーニングをしている体育系の学生が多いBクラスとの間に集中力テストの平均に差が出ないかと考え、Bクラスにも集中力テストを受けさせた結果です。

AとBのクラスの集中力に有意な差があるかどうかを独立標本 t検定を通じて調べたいと思います。

仮説は以下の通りです。

帰無仮説 : AとBのクラスの平均は同じである。

対立仮説 : AとBのクラスの平均は同じではない。

有意水準は0.05に設定します。

まず、データを読み込みましょう。

>>> import pandas as pd
>>> from scipy import stats
>>> df = pd.read_csv("./data/ch11_training_ind.csv")
>>> df.head()
A B
0 47 49
1 50 52
2 37 54
3 60 48
4 39 51

次に、正規性検定を行います。

>>> a = stats.shapiro(df['A'])
>>> b = stats.shapiro(df['B'])
>>> print(a, b)
ShapiroResult(statistic=0.9685943722724915, pvalue=0.7249553203582764) 
ShapiroResult(statistic=0.9730021357536316, pvalue=0.8165789842605591)

結果は、どちらもp値が0.05より大きいので正規性が満たされています。

次に、このデータはデータの個数が同じなので等分散と仮定しますが、各グループのデータ数が異なる場合は分散が等しいかを検定する必要があるため、Levene検定を通じて以下のように確認できます。

>>> stats.levene(df['A'], df['B'])
LeveneResult(statistic=2.061573118077718, pvalue=0.15923550057222613)

p値が0.159なので帰無仮説(2つのグループの分散に差がない)が採用されます。

次に、Scipyライブラリ内の ttest_indを使用してt統計量とp値を求めます。

>>> t, p = stats.ttest_ind(df['A'], df['B'], equal_var=False) # equal_var=False: Welchの方法
>>> t, p
(-1.760815724652471, 0.08695731107259362)

p値が有意水準0.05より大きいため、帰無仮説(AとBのクラスの平均が同じである)が採用されました。したがって、AのクラスとBのクラスの間には平均スコアに有意な差があるとは言えません。