Pythonと多重検定法

こんにちは
暑くなってきましたね。

今回は多重比較法で用いる補正アルゴリズムについて説明します。
多重比較法は統計的仮説検定のP値を補正する際に用いるアルゴリズムです。
昨今では、デジタルマーケティングのA/Bテストなどでも使用されています。
多重比較法はさまざまな算出方法がありますが、今回はBonferroni法とHolm法について記載します。

Bonferroni法

Bonferroni法は、多重比較法の中でも最もシンプルで直感的な方法です。以下のように有意水準${ \alpha} $を補正します。

$$
\alpha_{\text{new}} = \frac{\alpha}{m}

$$

  • $${\alpha}$$は全体の有意水準(例えば、0.05)

  • $${m}$$は検定の数

  • $${\alpha_{\text{new}}}$$は個々の検定の新しい有意水準

# P値の補正(Bonferroni法)
import statsmodels.stats.multitest as smm

# P値の補正("Bonferroni法)
p_values = [0.005, 0.006, 0.007, 0.008, 0.009, 0.01]
corrected_p_values = smm.multipletests(p_values, alpha=0.05, method='bonferroni')

print("元のP値:", p_values)
print("Bonferroni補正後で検定した際に棄却したかどうか:", corrected_p_values[0])
print("Bonferroni補正後のP値:", corrected_p_values[1])

# 元のP値: [0.005, 0.006, 0.007, 0.008, 0.009, 0.01]
# Bonferroni補正後で検定した際に棄却したかどうか: [ True  True  True  True False False]
# Bonferroni補正後のP値: [0.03  0.036 0.042 0.048 0.054 0.06 ]

Holm法

Bonferroni法は計算アルゴリズムが容易ですが、保守的な手法であります。
Holm法は、Bonferroni法よりも検定の数が多い場合においてより高いを持つ多重比較法です。Holm法では、以下の手順でP値を補正します:

P値を小さい順に並べ、それぞれのP値に対してBonferroni補正を施します。しかし、最小のP値から順に、そのP値が補正後の有意水準以下であれば、そのP値とそれより大きいP値すべてを有意とします。具体的な数式は以下の通りです。

$$
\alpha_{\text{new},i} = \frac{\alpha}{m-i+1}
$$

ここで、

  • $${i}$$はP値の順位(最小のP値から順に1, 2, ..., $${m}$$)

  • $${\alpha_{\text{new},i}}$$は順位${i}$のP値の新しい有意水準

import statsmodels.stats.multitest as smm

# P値の補正(Holm法)
p_values = [0.005, 0.006, 0.007, 0.008, 0.009, 0.01]
corrected_p_values = smm.multipletests(p_values, alpha=0.05, method='holm')

print("元のP値:", p_values)
print("Holm補正後で検定した際に棄却したかどうか:", corrected_p_values[0])
print("Holm補正後のP値:", corrected_p_values[1])

# 元のP値: [0.005, 0.006, 0.007, 0.008, 0.009, 0.01]
# Holm補正後で検定した際に棄却したかどうか: [ True  True  True  True  True  True]
# Holm補正後のP値: [0.03 0.03 0.03 0.03 0.03 0.03]

この記事が気に入ったらサポートをしてみませんか?