PR

実践!Pythonでt検定|2標本(対応ありなし)を例題つきで


t検定はあるデータ間に差があるかどうかを統計的に判断できる有力なツールですが、手計算では少し複雑で面倒ですよね。でも、Pythonを使えばt検定がとっても簡単です!この記事では、2標本のt検定(対応あり・なし)まで、Pythonでのt検定の方法をわかりやすく解説します。

Pythonを使ったt検定のコード概要

Pythonでt検定を行う場合は、scipy.statsモジュールを使用して実行できます。t検定を行うときの基本的なコードの流れはこのようになります。

コードの基本的な流れ

  1. データを変数に格納
  2. 有意水準を決定
  3. 専用の関数を使ってt検定を実行
  4. t統計量とp値を出力
  5. 判定(統計的に有意かどうか判断)
  6. 2標本のt検定(対応あり):scipy.stats.ttest_rel
  7. 2標本のt検定(対応なし):scipy.stats.ttest_ind

1. 2標本対応ありのt検定(Paired t-test)

2標本対応ありのt検定は、同じ対象に対して行われた前後の測定値など、対応のある2つのサンプル群に対して使用されます。scipy.stats.ttest_rel関数を使用します。

import scipy.stats as stats

# 対応のある2つのサンプル群
before = [2, 3, 4, 5, 6]
after = [3, 4, 5, 6, 7]

# 有意水準
alpha = 0.05

# t検定を実行
t_statistic, p_value = stats.ttest_rel(before, after)

print("t統計量:", t_statistic)
print("p値:", p_value)

# 判定
if p_value < alpha:
    print("帰無仮説を棄却(統計的に有意)")
else:
    print("帰無仮説を採択(統計的に有意ではない)")

2. 2標本対応なしのt検定(Independent t-test)

2標本対応なしのt検定は、互いに独立した2つのサンプル群間で平均値に差があるかどうかをテストします。scipy.stats.ttest_ind関数を使用します。

import scipy.stats as stats

# 独立した2つのサンプル群
group1 = [20, 21, 22, 23, 24]
group2 = [30, 31, 32, 33, 34]

# 有意水準
alpha = 0.05

# t検定を実行
t_statistic, p_value = stats.ttest_ind(group1, group2)

print("t統計量:", t_statistic)
print("p値:", p_value)

# 判定
if p_value < alpha:
    print("帰無仮説を棄却(統計的に有意)")
else:
    print("帰無仮説を採択(統計的に有意ではない)")

Pythonを使ったt検定で片側検定をする場合

Pythonのscipy.statsライブラリを使用してt検定をする場合、注意したいのはデフォルトで両側検定のp値を出力する点です。

Pythonのscipy.statsをつかって片側検定をする場合は、このp値を2で割ることで対応できます。このとき、特定の方向性(正か負)にもとづいて適切に解釈する必要があります。

例えば、「対応のあるt検定」で片側検定を行う場合は以下のように書くことができます。

import scipy.stats as stats

# 対応のある2つのサンプル群
before = [2, 3, 4, 5, 6]
after = [3, 4, 5, 6, 7]

# 有意水準
alpha = 0.05

# t検定を実行
t_statistic, p_value = stats.ttest_rel(before, after)

print("t統計量:", t_statistic)
print("両側検定のp値:", p_value)

# 片側検定
if t_statistic > 0:
    p_value_one_sided = p_value / 2
else:
    p_value_one_sided = 1 - p_value / 2
print("片側検定のp値:", p_value_one_sided)

データをcsvファイルからインポートする場合

サンプルデータをファイルからインポートするには、Pythonのpandasライブラリを使用してデータを読み込む方法が便利です。

「対応のあるt検定」を行うためのコードを以下のように変更します。「sample_data.csv」というファイルから「data」という列名を持ったデータをインポートする場合です。

import pandas as pd
import scipy.stats as stats

# 有意水準
alpha = 0.05

# CSVファイルからデータを読み込む
df = pd.read_csv('sample_data.csv')

# "data"という列名を持ったデータを抽出
before = df['before'].dropna().tolist()
after = df['after'].dropna().tolist()

# t検定を実行
t_statistic, p_value = stats.ttest_rel(before, after)

print("t統計量:", t_statistic)
print("p値:", p_value)

# 判定
if p_value < alpha:
    print("帰無仮説を棄却(統計的に有意)")
else:
    print("帰無仮説を採択(統計的に有意ではない)")

scipy.statsとstatsmodelsどっちがt検定に適している?

statsmodelsはscipy.statsと同じくPythonで統計分析を行うためのライブラリです。statsmodelsは複雑な統計計算を行うときに使用し、t検定のような比較的単純な統計計算はscipy.statsが適しています。

タイトルとURLをコピーしました