見出し画像

Pythonで多重比較検定


(1)はじめに

Pythonで多重比較検定を行ないます。多重比較検定の前にクラスカル・ウォリス検定を行ない、p<0.05を確認します。

(2)全体コード

import pandas as pd
from scipy import stats

df = pd.read_csv("iris.csv")
df.head()

 #クラスカル・ウォリス検定 s,p = stats.kruskal(df["sepal.length"], df["sepal.width"], df["petal.length"])
print(p)

#多重比較検定のためのライブラリ追加
import scikit_posthocs as sp

#多重比較のためにデータを整理
data = pd.DataFrame({'A': df["sepal.length"],
                     'B': df["sepal.width"],
                     'C': df["petal.length"]
                     })
data = data.melt(var_name='groups', value_name='values')

#多重比較検定(Steel-Dwass)
dscf = sp.posthoc_dscf(data, val_col='values', group_col='groups')
print(dscf)

(3)解説

(3-1)クラスカル・ウォリス検定

いつものアイリスデータから適当に3つの項目を抽出していますが、分析内容に意味はありません。多重比較検定を行なう前にクラスカル・ウォリス検定(ざっくりと、ノンパラメトリックの分散分析です)を行ない、そもそも3群に差があるのかを確認します。↓ここです。

 #クラスカル・ウォリス検定 
s,p = stats.kruskal(df["sepal.length"], df["sepal.width"], df["petal.length"])
print(p)

(3-2)Steel-Dwass法

クラスカル・ウォリス検定で有意差が認められたため、Steel-Dwass法による多重比較検定を行ないます。↓ここです。

#多重比較検定のためのライブラリ追加
import scikit_posthocs as sp

#多重比較のためにデータを整理
data = pd.DataFrame({'A': df["sepal.length"],
                     'B': df["sepal.width"],
                     'C': df["petal.length"]
                     })
data = data.melt(var_name='groups', value_name='values')

#多重比較検定(Steel-Dwass)
dscf = sp.posthoc_dscf(data, val_col='values', group_col='groups')
print(dscf)

結果、以下のようなものが出力されます。

$$
\begin{array}{|l|c|c|c|}
\hline
\text{ } & \text{A} & \text{B} & \text{C} \\
\hline \text{A} & 1.000 & 0.001 & 0.001 \\
\hline \text{B} & 0.001 & 1.000 & 0.001 \\
\hline \text{A} & 0.001 & 0.001 & 1.000 \\
\hline \end{array}
$$