カイ2乗検定

t検定の使い分けは、「比べるデータが割合(カテゴリカルデータ)か、平均値(数値データ)か」

カイ2乗検定(比率・有無を比べる)
割合や度数(「あり/なし」「生存/死亡」「改善/不変/悪化」などのカテゴリデータ
・新薬A群とプラセボ群で、「副作用が出た人の割合」に差があるか?
・治療法によって、「治癒・未治癒」の比率が変わるか

t検定(平均値を比べる)
連続量(血圧、体重、胆管の太さ、検査値などの数値データ)の2群間の平均値の差
・降圧薬を飲んだ前後で、「平均血圧(mmHg)」に差があるか?(対応のあるt検定)
・A病院とB病院の患者の「平均入院日数」に差があるか?(対応のないt検定)

フィッシャーの正確確率検定(Fisher’s exact test)
超幾何分布などを用いて、すべての組み合わせの確率を直接(正確に)計算してp値を求める。
サンプル数が少ない場合や、期待度数が5未満のセルが含まれる場合に適しており、サンプル数が少なくても正確なp値が得られる。
サンプル数が多い場合は実質不可能で、どちらを使っても結果(p値)はほぼ変わらないため、一般的にカイ二乗検定。

Fisher’s exact test

import scipy.stats as stats

# 2x2の分割表データ
# [[セル1, セル2], [セル3, セル4]]
table = [[8, 2], [1, 5]]

# フィッシャーの正確確率検定の実行
odds_ratio, p_value = stats.fisher_exact(table)

print(f"オッズ比: {odds_ratio}")
print(f"p値: {p_value}")

2×2の分割表専用です。
サンプルサイズが小さい(期待度数が5未満のセルがある)場合に、カイ二乗検定の代わりに用いられます。
デフォルトでは両側検定が行われます。
片側検定を行いたい場合は alternative=’greater’ や alternative=’less’ 引数を指定できます。

chi-squared test

カテゴリデータのクロス集計表(分割表)を二次元配列(リスト)として用意し、関数に渡します。

import scipy.stats as stats

# 観測度数(クロス集計表のデータ)の例
# 行:性別(男性、女性)、列:購入の有無(購入した、購入しなかった)
observed = [[30, 20], [15, 35]]

# カイ二乗検定の実行
chi2, p, dof, expected = stats.chi2_contingency(observed)

print(f"カイ二乗統計量: {chi2:.4f}")
print(f"p値: {p:.4f}")
print(f"自由度: {dof}")
print(f"期待度数:\n {expected}")

p値が0.05未満(有意水準5%)の場合:「2つの変数間には統計的に有意な関連(差)がある」と判断します