Python で nemenyi 事後テストを実行する方法
フリードマン検定は、反復測定 ANOVA に代わるノンパラメトリックな検定です。各グループに同じ被験者が含まれる 3 つ以上のグループの平均値の間に統計的に有意な差があるかどうかを判断するために使用されます。
フリードマン検定の p 値が統計的に有意な場合は、ネメニ事後検定を実行して、どのグループが異なっているかを正確に判断できます。
次のステップバイステップの例は、Python で Nemenyi テストを実行する方法を示しています。
ステップ 1: データを作成する
研究者が、3 つの異なる薬に対する患者の反応時間が等しいかどうかを知りたいとします。これをテストするために、彼は 3 つの薬のそれぞれに対する 10 人の異なる患者の反応時間 (秒単位) を測定しました。
3 つの薬剤それぞれに対する各患者の応答時間を含む、次の 3 つのテーブルを作成できます。
group1 = [4, 6, 3, 4, 3, 2, 2, 7, 6, 5] group2 = [5, 6, 8, 7, 7, 8, 4, 6, 4, 5] group3 = [2, 2, 5, 3, 2, 2, 1, 4, 3, 2]
ステップ 2: フリードマン テストを実行する
次に、scipy.stats ライブラリのfriedmanchisquare() 関数を使用してフリードマン テストを実行します。
from scipy import stats #perform Friedman Test stats. friedmanchisquare (group1, group2, group3) FriedmanchisquareResult(statistic=13.3513513, pvalue=0.00126122012)
フリードマン検定では、次の帰無仮説と対立仮説が使用されます。
帰無仮説 (H 0 ):各母集団の平均は等しい。
対立仮説: (Ha):少なくとも 1 つの母集団平均が他の平均とは異なります。
この例では、検定統計量は13.35135で、対応する p 値は0.00126です。この p 値は 0.05 未満であるため、平均応答時間は 3 つの薬剤すべてで同じであるという帰無仮説を棄却できます。
言い換えれば、使用される薬剤の種類によって反応時間に統計的に有意な差が生じると結論付けるのに十分な証拠があるということです。
ステップ 3: Nemenyi テストを実行する
次に、Nemenyi 事後テストを実行して、どのグループが異なる平均値を持っているかを正確に判断できます。
これを行うには、scikit-posthocs ライブラリをインストールする必要があります。
pip install scikit-posthocs
次に、 posthoc_nemenyi_friedman()関数を使用して Nemenyi 事後テストを実行します。
import scikit_posthocs as sp
import numpy as np
#combine three groups into one array
data = np. array ([group1, group2, group3])
#perform Nemenyi post-hoc test
sp. posthoc_nemenyi_friedman ( data.T )
0 1 2
0 1.000000 0.437407 0.065303
1 0.437407 1.000000 0.001533
2 0.065303 0.001533 1.000000
注:事後テストを正しく実行するには、numpy 配列 (data.T) を転置する必要がありました。
Nemeyi の事後検定は、平均値の各ペア比較の p 値を返します。結果から、次の p 値がわかります。
- グループ 1 と比較したグループ 0 の P 値: 0.4374
- グループ 2 と比較したグループ 0 の P 値: 0.0653
- グループ 2 と比較したグループ 1 の P 値: 0.0015
α = 0.05 では、統計的に有意に異なる平均を持つ 2 つのグループのみがグループ 1 とグループ 2 です。
注: Nemenyi のテストでは、グループ番号が 1、2、3 から 0、1、2 に変換されました。したがって、元のデータで大きく異なるグループはグループ 2 と 3 です。