【第2回】scipyを用いた対応のない3群以上の平均値の差の検定
はじめに
データ分析や統計解析をしていると3群間以上で差があるのかないのかを明確にしたいケースが多いと思います。その際に使用するのが3群間以上の平均値の差の検定です。検定では有意水準0.05を下回るかを確認して、3群間以上の平均値に有意な差があるのかを明らかにします。この時、対応があるかないかということを気にかけなければなりません。対応があるというのは、比較する3群以上の要素が同一であることを言います。例えば、ある学級クラスの1学期、2学期、3学期の中間テストの平均点数を比較することです。一方で、対応がないというのは、比較する3群が別の要素であることを言います。例えば、ある学級クラスA、B、Cの平均点数を比較することです。
Pythonで3群間以上の平均値の差の検定を行うには、Scipyと呼ばれるライブラリを使用します。SciPyは、プログラミング数学、科学、工学のための数値解析ソフトウェアです。
本記事ではscipyを用いた対応のない3群の平均値の差の検定について紹介します。
1. 対応のない3群以上の平均値の差の検定の流れ
対応のない3群以上の平均値の差の検定の流れは下図です。この流れに従ってプログラムを記載していきます。
2. 各検定の概要
2.1 Shapiro-Wilk(シャピロ・ウィルク)検定:正規性検定
Shapiro-Wilk(シャピロ・ウィルク)検定は正規性検定であり、データが正規分布に従っているかを検定します。シャピロ・ウィルク検定ではscipy.stats.shapiroを使用します。返り値のs,pはそれぞれ検定統計量とp値です。p値が0.05以上であれば正規性があります。
2.2 Bartlett(バーレット)検定:等分散性検定
Bartlett(バーレット)検定は等分散性検定であり、3つの群の分散が等しいかを検定します。バーレット検定はscipy.stats.bartlettを使用します。返り値のs,pはそれぞれ検定統計量とp値です。p値が0.05以上であれば等分散性があります。
2.3 一元配置分散分析:ANOVA
一元配置分散分析で3群間のどれかの組み合わせで有意差があるかを検定します。一元配置分散分析はscipy.stats.f_onewayを使用します。返り値のs,pはそれぞれ検定統計量とp値です。p値が0.05よりも小さければ3群間のどれかの組み合わせで有意差があります。
2.4 Tukey(テューキー)の検定:多重比較
Tukey(テューキー)の検定は多重比較によりどの群間で有意差があるかを確認します。テューキーの検定はstatsmodels.stats.multicomp.pairwise_tukeyhsdを使用します。
以下のようにデータを加工してから求めます。
上記の出力例が以下です。p-adjの値が0.05よりも小さい組み合わせが有意な差が見られた組み合わせです。以下の場合はgroup_Aとgroup_Cの組み合わせで 有意な差が見られました。
2.5 Kruskal-Wallis(クラスカル・ウォリス)検定
Kruskal-Wallis(クラスカル・ウォリス)検定は3群間のどれかの組み合わせで有意差があるかを検定します。クラスカル・ウォリス検定はscipy.stats.kruskalを使用します。返り値のs,pはそれぞれ検定統計量とp値です。p値が0.05よりも小さければ3群間のどれかの組み合わせで有意差があります。
2.6 Steel-Dwass(スティール・ドゥワス)検定:多重比較
Steel-Dwass(スティール・ドゥワス)検定は多重比較によりどの群間で有意差があるかを確認します。スティール・ドゥワス検定はscikit_posthocs.posthoc_dscfを使用します。以下のようにデータを加工してから求めます。
上記の出力結果が以下です。各組み合わせの値が0.05よりも小さい組み合わせが有意な差が見られた組み合わせです。以下の場合はgroup_Aとgroup_B、group_Aとgroup_C、group_Bとgroup_Cの組み合わせで 有意な差が見られました。
3. 対応のない3群の平均値の差の検定
これまでの対応のない3群の平均値の差の検定の流れを1つのプログラムにまとめます。まとめたものが以下になります。ここでは国土交通省気象庁の「過去の気象データ・ダウンロード」から浜松、倉敷、富良野の2021/12/1~2022/2/28の気温データを取得して対応のない2群の平均値の差の検定を行いました。使用したデータはこちらのリポジトリに保管しています。
オススメ書籍
Pythonによるあたらしいデータ分析の教科書
Python3エンジニア認定データ分析試験の教科書にもなっている書籍で、データ分析に必要なPythonの基礎手法を身に付けることができます。具体的には、numpyとpandasを用いたデータの前処理、matplotlibを用いたデータのグラフ化、scikit-learnを用いた機械学習の基礎記述方法を身に付けることができます。これ一つで基礎はバッチリで、実務でも十分活用できると思います。個人的には見やすい書籍でした。
データサイエンス教本 Pythonで学ぶ統計分析・パターン認識・深層学習・信号処理・時系列データ分析
こちらの書籍は初心者から少し記述できるようになった人、かつ数学的な理論と一緒にPythonの記述方法を理解したい方にオススメです。統計分析、パターン認識、深層学習、信号処理、時系列データといった幅広く実務で使用する手法を学びたい方にもオススメです。
東京大学のデータサイエンティスト育成講座 ~Pythonで手を動かして学ぶデ―タ分析~
こちらの基礎を抑えながら実務で必要なPython記述法を学べる書籍です。基礎を一つ一つ抑えるというよりも実務で活用できるように必要な知識を身に付けられると感じました。これ一冊あれば十分かなと思いました。
スキル修得&転職
近年、DXの進展に伴うデジタル人材の需要の高まりに追いついていない状況が続いていると経済産業省がホームページで記載している通り、DX人材、IT人材が不足しているのが現状です。さらにコンピュータの性能向上やAI技術の発展により、よりDX人材、IT人材の需要が高まってきます。さらには、今後の長期間安定して職がある業種とも考えられます。
以下の求人では、IT業界の転職や、IT未経験だけどIT人材を志望する就活を支援してくれます。無料で会員登録もできるので、まずは登録だけでもして様子を見てみてはいかがでしょうか?
▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼
▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲
おわりに
本記事ではscipyを用いた対応のない3群の平均値の差の検定について紹介しました。統計解析を実施する方はよく使うと思いますので、それぞれ細かく理解を進めましょう。