突然ですが、皆さん。
ランチ、どれが一番好きですか?
え?カレー?
分かります。でも、うどんの日も捨てがたいですよね。
こんな風に同じ人が、何度か違うものを評価する場面って、結構あります。
統計の世界では、こういう「同じ人が繰り返し評価したデータ」を扱うときに便利な検定があります。
今回は、そんな時に便利なFriedman検定(フリードマン検定)について解説してきます!!
Friedman検定って、何?
簡単に言うと、
「同じ人が3つ以上の条件で評価をしたとき、それらに有意な差があるか知りたい」
というときに使う検定です。
たとえば…
ある病院で、3種類のランチ(カレー、うどん、サルミアッキ)を1週間ずつ提供。
看護師10人が、それぞれ味を評価(5点満点)しました。
さて、看護師たちはどれが一番好きだったのか?
その「全体の傾向」を知りたい!
でも…評価は同じ人が3回してるから、普通の分散分析(ANOVA)じゃダメなんです。
個人差を考慮しないといけません。
そこに現れるのが、
統計界のヒーロー、Friedmanさん!
Friedman検定って、どんな時におすすめ?
- 「人数は少ないけど、何度も測ったデータがある」
- 「それぞれの人の好み(ばらつき)も考慮したい」
- 「正規分布とか難しいことは避けたい(ノンパラがいい)」
実はFriedman検定、ノンパラメトリック検定なので、
データの分布にうるさくない。気さくなやつなんです。
以前ご紹介したWilcoxon検定の3群バージョン、つまり兄貴分ってことです。
例えば、保健師さん達は「保健指導をした人の指導前・指導後1ヶ月・指導後3ヶ月の体重を比較したい!」という時等に使えます。
Friedman検定ってどうやるの?
今回のサンプルデータは、とある病院の社員食堂のメニューです。
5段階で評価しています。5が高評価、1が低評価です。
| 評価者 | カレー | うどん | サルミアッキ丼 |
| A | 5 | 3 | 1 |
| B | 4 | 5 | 1 |
| C | 4 | 4 | 2 |
| D | 5 | 3 | 1 |
| E | 3 | 4 | 1 |
| F | 4 | 3 | 2 |
| G | 5 | 2 | 1 |
| H | 4 | 4 | 1 |
| I | 5 | 3 | 1 |
| J | 4 | 4 | 1 |
明らかに低評価のメニューがありますが、お気になさらず。
このようにExcelでまとめます。
ただし、この先の手順をExcelでやろうとすると、手間がかかってしょうがないんです…(涙)
手順が気になった方は「Friedman検定 Excel やり方」等と調べてみてください。
今回は、今までおまけコーナーにしか出てこなかったPython君に調べてもらいます。
(Pythonについて勉強したことがはい方は、コードの部分はスルーしてもOKです。どのような結果になったかだけ見届けてください。)
import pandas as pd
from scipy.stats import friedmanchisquare
# Excelファイルを読み込む
df = pd.read_excel("ファイルのパス名")
# 各メニューの評価スコアを列ごとに取得
curry = df["カレー"]
udon = df["うどん"]
salmiakki = df["サルミアッキ丼"]
# Friedman検定の実行(scipyの関数は列ごとに渡す)
stat, p = friedmanchisquare(curry, udon, salmiakki)
# 結果の表示
print("Friedman検定の結果")
print(f"検定統計量(χ²): {stat:.4f}")
print(f"p値: {p:.4f}")
# 判定の例(有意水準5%)
if p < 0.05:
print("⇒ 少なくとも1つのメニューに有意な差があります。")
else:
print("⇒ 有意な差は認められません。")
出力:
Friedman検定の結果
検定統計量(χ²): 16.7027
p値: 0.0002
少なくとも1つのメニューに有意な差があります
p値が0.0002で、有意水準0.05を下回っています。
つまり、どれかのメニューが他のメニューより人気か、不評だったということがわかるのです。
注意事項!!
1. 「同じ人が3回以上評価している」ことが前提です
Friedman検定は、「同じ人が何度も測ったデータ」にしか使えません。
例:体重の介入前・後・3ヶ月後など
→「別々の人が3つの方法を試した」では使えません。Kruskal-Wallis検定の出番です。
2. 評価のスケールは「順位」が前提
Friedman検定はノンパラメトリック検定なので、**「順位に変換して検定」**します。
つまり、今回の例だと、
「カレーが5点、うどんが4点、サルミアッキ丼が1点」と評価した人のデータは
「カレー1位、うどん2位、サルミアッキ丼3位」として扱われます。
→ スコアの差(何点違うか)は検定に使われません。
3.全体の「傾向」を見る検定なので、どれが違ったかはわかりません
Friedman検定が出してくれるのは、「少なくとも1つの条件が他と違う可能性がある」かどうかだけです。
→「カレーが他より好まれていた」、「サルミアッキ丼が嫌われた」とまではこの検定だけでは言えません!
そんなときは、多重比較を使います。
4. サンプル数が少なすぎると検出力が弱いです
Friedman検定はノンパラなので分布に強い反面、
nが少ない(例:5人以下)と有意差が出にくくなります。
→「効果がない」んじゃなくて、「判断できない」だけの可能性もあります。
5. Excelでの実装はやや面倒です(RかPythonがおすすめ)
手で順位をつけて、合計して、式を当てはめて……やれなくはないけど、めっちゃ地味で手間がかかります。
今回Excelの手順を省略したのはそのためです…
→ やるならRかPython、SPSS等に頼りましょう。
6. 時系列で比較するのであれば、順番を並べてください
今回はメニューを比べただけなのでOKですが、
保健指導後の体重を比べていく等、時系列で比較するのであれば元データの列を時系列に並び替えてください。
| 対象者 | 指導前 | 指導後1ヶ月 | 指導後6ヶ月 |
| A | 83.6 | 82.3 | 82 |
| B | 96.1 | 85.5 | 83.3 |
そうすれば自分で後で見返しやすいですし、後に検定をする場合に情報が整理しやすくなります。
まとめ
簡単に言うと、Friedman検定は、同じ人が繰り返し評価したときに使う検定です。
ノンパラなので、ちょっとぐらい分布がズレててもOKという寛容な性格を持っています。
ただし、Excelで分析すると面倒なので、PythonやR、SPSS等でやるとラクです。
ちょっと複雑な検定ですが、ぜひ試してくださいね。
ではでは、次の統計ネタでお会いしましょう!!
私、ツシマが最も苦手な食べ物の一つはサルミアッキです。
「世界一まずい飴」と言われています。
北欧の国々ではよく食べられているようですが、皆さんの舌が日本国内の料理に慣れているのであれば食べるのはオススメしません。
タイヤみたいな味がします。
それでも試してみたいのであれば止めはしませんが、自己責任でお願いします…
