Python の 2 サンプル T 検定

Migel Hewage Nimesha 2024年2月15日
  1. Python での 2 サンプル T 検定
  2. まとめ
Python の 2 サンプル T 検定

世界中のほとんどのプログラマーは、プログラミングに Python 言語を使用しています。 Python は、インタープリター型の高水準プログラミング言語として非常に人気があります。

ほとんどのプログラマーはオブジェクト指向プログラミングで Python を使用しているため、Web 開発、データ視覚化、人工知能や機械学習などの分野、バックエンド開発、およびスクリプト言語として Python を使用しています。

Python が提供する 1つの機能は、2 サンプル t 検定を実行できることです。 この記事では、2 サンプル t 検定とは何か、および Python を使用してそれを実行する方法について説明します。

Python での 2 サンプル T 検定

2 サンプル t 検定は、2つのデータ グループの 2つの未知の母平均が等しいかどうかを判断するために実行できる検定の一種です。 独立標本の t 検定とも呼ばれます。

あるグループが別のデータ グループに関係していてはなりません。

2 標本 t 検定を実行する前に、データ グループに関する 3つの仮定を考慮する必要があります。

  1. テストに使用する 2つのデータ グループは独立しています。
  2. 均一性の仮定: ここでは、2つのデータ グループの分散が同じであると仮定します。
  3. 最後の仮定は、データ グループ内のデータ分布が異なるかどうかです。

これらの仮定を使用して、2 サンプル t 検定を実行できます。

2 標本 t 検定の結果を分析するとき、2つの仮説を立てることができます。

  1. H0 - dataGroup1 母集団平均 = dataGroup2 母集団平均. 帰無仮説とも呼ばれます。
  2. HA - dataGroup1 母集団平均 != dataGroup2 母集団平均.

このテストを実行するには、主に 3つの方法があります。

  1. scipy の使用
  2. pingouin の使用
  3. statsmodels の使用

SciPy ライブラリを使用する

Scientific Python ライブラリとしても知られる SciPy は、科学的および数学的な問題を解決するオープンソースの Python ライブラリです。 SciPy ライブラリ内のデータを操作および視覚化するために、いくつかの高レベルの Python コマンドを使用できます。

SciPy ライブラリにはいくつかのサブパッケージがあります。 それらのいくつかは次のとおりです。

  1. scipy.stats - 統計と乱数に使用できます。
  2. scipy.io - ファイルの入出力に使用できます。
  3. scipy.linalg - 線形代数演算に使用できます。
  4. scipy.signal - 信号処理に使用できます。

2 サンプル t 検定を実行するには、この SciPy ライブラリを使用できます。

2 サンプル t 検定の構文は次のとおりです。

ttest_ind(dataGroup1, dataGroup2, equal_var=True / False)

ここで、ttest_ind は、テストを実行する scipy.stats サブパッケージによって提供される関数です。 その中には、作成したデータ グループである dataGroup1dataGroup2 があります。

equal_vartrue に等しい場合、2 標本 t 検定は母分散が等しいと見なして実行されます。 false の場合、母分散が等しくないことを考慮してウェルチの t 検定が行われます。

デフォルトでは、equal_vartrue です。

データ グループの分散が等しいことを確認する

テストを実行する前に、データ グループの分散が同じかどうかを確認する必要があります。 大きなデータ グループと小さなデータ グループの比率が 4:1 未満の場合、両方のデータ グループの分散が等しいと言えます。

それを確認するには、以下の構文を使用できます。

np.var(dataGroup1), np.var(dataGroup2)

例を使用して t 検定を実行してみましょう。

2つのサンプル データ グループがあり、各グループに特定の科目の 10 人の生徒の採点が含まれているとします。 2つのグループの生徒が同じ教科の平均点を持っていることを明確にする必要があります。

最初のステップとして、pip コマンドを使用して SciPy および NumPy ライブラリをインストールする必要があります。

$ pip install scipy
$ pip install numpy

次に、scipy.stats サブライブラリと NumPy を環境にインポートする必要があります。 前述のように、scipy.stats はテストの実行に役立ち、NumPy はデータ グループの作成に役立ちます。

これら 2つのモジュールを次のようにインポートできます。

import scipy.stats as stats
import numpy as np

次に、次のように、いくつかのデータを使用して 2つのグループを作成できます。

dataGroup1 = np.array([17, 16, 14, 19, 20, 21, 15, 13, 14, 12])
dataGroup2 = np.array([19, 19, 14, 17, 22, 24, 16, 18, 15, 13])

まず、次のように、データ グループの分散が等しいことを確認できます。

print(np.var(dataGroup1), np.var(dataGroup2))

コードを実行すると、下の画像に示すような出力が得られます。

等価性のチェック

ご覧のとおり、比率は 10.809/8.49 で、4:1 未満です。 したがって、データ グループの分散は等しいと言えます。

それでは、テストを実行しましょう。

print(stats.ttest_ind(dataGroup1, dataGroup2, equal_var=True))

出力:

stats

ここで取得した p-value0.2889 で、alpha 値の 0.05 よりも大きい値です。 したがって、2つのグループの生徒の平均点に違いはないと言えます。これが帰無仮説です (前述の 2つの仮説によると)。

完全なコード:

# Importing the libraries
import scipy.stats as stats
import numpy as np

# Defining the data groups
dataGroup1 = np.array([17, 16, 14, 19, 20, 21, 15, 13, 14, 12])
dataGroup2 = np.array([19, 19, 14, 17, 22, 24, 16, 18, 15, 13])

# Check the equality of the variances of the data groups
print(np.var(dataGroup1), np.var(dataGroup2))

# Executing the test
print(stats.ttest_ind(dataGroup1, dataGroup2, equal_var=True))

pingouin ライブラリを使用する

2 サンプル t 検定を実行する別の方法は、pingouin パッケージを使用することです。 これは、統計機能を備えた NumPypandas に基づくオープン ソース パッケージです。

pingouin を使用するには、pip コマンドを使用してインストールする必要があります。

$ pip install pingouin

次に、以下の構文を使用して t 検定を実行できます。

ttest(dataGroup1, dataGroup2, correction=True / False)

ここで、ttest 関数は pingouin パッケージによって提供されます。 dataGroup1dataGroup2 は、テストするグループです。

修正 の場合、テストは均一性の仮定を考慮して実行されます。 の場合は、前述のように、均一性の仮定を考慮せずにウェルチの t 検定を実行します。

前の例を使って t 検定を実行してみましょう。 まず、NumPypingouin パッケージをインポートできます。

import pingouin as pg
import numpy as np

次に、データ グループを定義します。

dataGroup1 = np.array([17, 16, 14, 19, 20, 21, 15, 13, 14, 12])
dataGroup2 = np.array([19, 19, 14, 17, 22, 24, 16, 18, 15, 13])

これでテストを実行できます。

print(pg.ttest(dataGroup1, dataGroup2, correction=True))

出力:

pingouin

ご覧のとおり、p-value として 0.2891 があり、0.05 である alpha 値よりも大きくなっています。 これにより、2つのグループの平均点に統計的な差がないと判断されます。

完全なコード:

# Importing the libraries
import pingouin as pg
import numpy as np

# Defining the data groups
dataGroup1 = np.array([17, 16, 14, 19, 20, 21, 15, 13, 14, 12])
dataGroup2 = np.array([19, 19, 14, 17, 22, 24, 16, 18, 15, 13])

# Executing the test
print(pg.ttest(dataGroup1, dataGroup2, correction=True))

statsmodels モジュールを使用する

StatsmodelsSciPyNumPyMatplotlib に基づいて構築された Python モジュールです。 統計テストと推定を実行するための関数とクラスをユーザーに提供します。

statsmodels モジュールを使用して、2 サンプル t 検定を実行することもできます。 これを使用するには、pip コマンドを使用してモジュールをインストールする必要があります。

$ pip install statsmodels

以下の構文を使用して、t 検定を実行できます。

ttest_ind(dataGroup1, dataGroup2)

ttest_ind はテストを実行するために使用する関数であり、dataGroup1dataGroup2 はテストに使用するグループです。

前の例を使用してテストしてみましょう。

まず、statsmodels から ttest_ind 関数をインポートする必要があります。 次に、numpy ライブラリをインポートできます。

from statsmodels.stats.weightstats import ttest_ind
import numpy as np

これで、前に行ったようにデータ グループを定義できます。

dataGroup1 = np.array([17, 16, 14, 19, 20, 21, 15, 13, 14, 12])
dataGroup2 = np.array([19, 19, 14, 17, 22, 24, 16, 18, 15, 13])

次に、以下のテストを実行できます。

print(ttest_ind(dataGroup1, dataGroup2))

出力:

statsmodels

ご覧のとおり、p-value として 0.2889 を受け取りましたが、これは alpha 値よりも大きくなっています。 したがって、学生グループの平均点は、統計的に他と差がないと言えます。

完全なコード:

# Importing libraries
from statsmodels.stats.weightstats import ttest_ind
import numpy as np

# Definig the data groups
dataGroup1 = np.array([17, 16, 14, 19, 20, 21, 15, 13, 14, 12])
dataGroup2 = np.array([19, 19, 14, 17, 22, 24, 16, 18, 15, 13])

# Executing the test
print(ttest_ind(dataGroup1, dataGroup2))

まとめ

この記事では、2 サンプル t 検定とは何か、Python でそれを実行する方法について説明しました。 学んだように、テストを行う主な方法は 3つあります。SciPypingouin、および statsmodels を使用します。

これら 3つの方法では、テストを行うために異なるライブラリと関数が必要です。

概念を理解するために例を取り上げ、それをすべての方法に適用しました。 次に、仮説と仮定を使用して結果を分析しました。

Migel Hewage Nimesha avatar Migel Hewage Nimesha avatar

Nimesha is a Full-stack Software Engineer for more than five years, he loves technology, as technology has the power to solve our many problems within just a minute. He have been contributing to various projects over the last 5+ years and working with almost all the so-called 03 tiers(DB, M-Tier, and Client). Recently, he has started working with DevOps technologies such as Azure administration, Kubernetes, Terraform automation, and Bash scripting as well.