![見出し画像](https://assets.st-note.com/production/uploads/images/139015703/rectangle_large_type_2_15836f701fc06591d6f16dfe3781e3d8.png?width=800)
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}
$$