Latest update on 2024年3月25日 (月) at 14:16:30.
6:25起床。テレビ体操。プラ容器包装を回収場所に出してから名谷キャンパスへ出勤。移動中はスマホにコピーしたハイレゾ版『UNLOCK!』を聴いていたが、やはり「ちょ待って!」だな。
今日も溜まっている仕事をする。講義予定をアップロードしたりとか。学生とのアポが合間に入ってくる。
物品発注などもしていたら、あっという間に18:00になり、国際保健医療学会西日本地方会の世話人会のオンライン会議に参加。すっかり忘れていたが、来年度は4年に1度の近畿地方担当なのだった。5月までには決めねばならない。
会議後も事務仕事をしていたら、あっという間に22:00を過ぎた。23:00近くに帰途に就き、帰宅後に冷凍チャーハンを電子レンジ加熱して食べたので太りそうだが仕方がない。
対応のある多群間のノンパラメトリックな比較のためのFriedmanの検定後の多重比較の結果が、EZRとSPSSとjamoviで食い違うのは何故かという問い合わせメールをもらったので調べてみた。
以下メールの返事を貼り付けて若干改変。
(返信第1弾)
jamoviは、https://bookdown.org/sbtseiji/jamovi_complete_guide/sec-ANOVA-friedman.htmlに書かれている通り、Friedmanの後の対比較ではbonferroni補正なしのDurbin-Conover法を使っています。
このDurbin-Conover法というのは検定の多重性の調整をしていません。内部的にはPMCMRplusというパッケージに含まれている、frdAllPairsConoverTest()という関数を使っているようで、 この関数自体にはオプションでp.adj="bon"を指定できる のですが、jamoviではそこをいじれない実装になっています。
もっとも、Bonferroniの補正という手法は、対比較で出てきたp値に比較回数を掛けるだけなので、5群間の2群ずつの総当たり比較なら10回の比較がされているので、得られたp値を10倍すれば良いわけです。
(データを使った検証部分は省略)
EZRが何故合わないかですが、EZRは対比較にWilcoxonの 符号順位検定を使っています(とメッセージにでてきます)。EZRでは正規近似でp値を出しているので、同順位の値が含まれていると、タイがあるため、正確な p 値を計算することができませんという警告が出ます。
ここで表示されているp値は、wilcox.test(..., paired=TRUE)で得られるp値の10倍になっています。同順位があっても正確なp値が欲しい場合は、exactRankTestsパッケージのwilcox.exact()関数を使えばOKです(もちろん個々のp値は10倍する必要があります)。
(注)SPSSがpost hocの検定で何を使っているのかは気力が尽きたので、ここでいったん返信した。
(返信第2弾)
結局、タイがあるため正確なp値を計算できないための違いではなく(実際、wilcox.test()とwilcox.exact()の差はわずかなものです)、3つのソフトではFriedmanの検定は同じだけれどもペアワイズの比較(対比較)をするためのpost hoc検定の方法が違うため、違う結果になるのは当然だというのが適切だと思います。
その後の調べで、SPSSにおけるFriedmanのpost hoc検定はDunn-Bonferroniであることがわかりました(https://www.ibm.com/support/pages/source-post-hoc-tests-friedman-nonparametric-tests参照)。
Dunn-BonferroniはRでもできて、dunn.test()というパッケージで可能です。https://cran.r-project.org/web/packages/dunn.test/index.htmlや、そこからリンクされているhttps://cran.r-project.org/web/packages/dunn.test/dunn.test.pdfを見れば、たぶん使い方はわかると思います。日本語のブログで使い方を説明している記事もありました(https://note.com/eiko_dokusho/n/naac00eaec2ba)。
ただ、Dunn-Bonferroniはクラスカル=ウォリス検定のpost hoc検定として使われることも多く、対応のある検定になっているのかどうかが良くわかりません。
jamoviが採用しているのは、Durbin-Conoverです。先のメールにも書きましたが、内部的にはPMCMRplusパッケージのfrdAllPairsConoverTest()という関数を使っています。jamoviで出てくるp値は検定の多重性の補正がされていないので、5群間のすべての2群ずつの対比較なら10回の比較がされているので、Bonferroni補正ならp値をすべて10倍することになります。ConoverはFriedmanのpost hocでしか使われない検定なので、適用の適切性からいえば最善でしょう(https://stats.stackexchange.com/questions/603451/post-hoc-tests-after-friedman-testでは、ウィルコクソンの符号順位検定やDunnの検定をBonferroni補正するのはFriedmanのpost hoc検定としては適切でないのでConoverにしろ、と書かれています)。Conoverの考え方や式はhttps://real-statistics.com/anova-repeated-measures/friedman-test/friedman-test-post-hoc-analysis/の説明がわかりやすいと思いました。難しいですが。
EZRでは、2群ずつウィルコクソンの符号順位検定を実行して、Bonferroni補正の場合は得られたp値をすべて比較回数倍(5群間の場合なら10倍)していますが、この方法を使っている場合もよくあります。ウィルコクソンの符号順位検定ならば対応のある検定であることは間違いないので、その点を重視するなら、Friedmanのpost hocとしてはDunn-Bonferroniより良いと思います。
https://www.datanovia.com/en/lessons/friedman-test-in-r/は、この方法を説明しています。考え方としてはとてもシンプルです。
▼前【1585】(積み残し仕事(2024年3月20日) ) ▲次【1587】(今日も事務仕事(2024年3月22日) ) ●Top