CochranのQ検定の話

以前投稿した、https://stat-consul.blogspot.com/2024/03/friedman.html とも少し関連しているが、 対応のある3群以上の2値データの比較の話で相談に乗ったのでメモ。

 jamoviを使っている院生からの相談に関連して。2時点間でMcNemarの検定をするような、0/1のカテゴリ変数の割合の変化がランダムではない一方向への変化なのかを、3時点以上で検定する方法としてはCochranのQ検定を使うのが普通だが、jamoviでは特別なメニューが用意されていないので、Friedmanの検定をすればCochranのQ検定と同じp値が得られる、という記述を見つけたので、確かめてみる。Rのパッケージとしては、RVAideMemoireパッケージに入っているcochran.qtest()関数が便利なので(DescToolsパッケージのCochranQTest()関数もほぼ同様である)、そのexample()の例で試してみると、

response <- c(0,1,1,0,0,1,0,1,1,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,0,1,1,0,0,1)

fact <- gl(3,1,30,labels=LETTERS[1:3])

block <- gl(10,3,labels=letters[1:10])

library(RVAideMemoire)

cochran.qtest(response ~ fact | block)


とすれば、Q = 10.8889, df = 2, p-value = 0.00432というCochranのQ検定の結果、A、B、Cそれぞれにおける1の割合、AとB、BとC、CとAという対比較をfdr法で検定の多重性を調整した結果のp値が示される。反復測定デザインとしては、blockが個人、factが測定日に当たると考えれば良い。このデータをデータフレームddにしてタブ区切りテキスト形式でファイル出力するには、

dd <- data.frame(response=response, fact=fact, block=block)

write.table(dd, "cochran.txt", row.names=FALSE, sep="\t")


とすれば、Rの作業フォルダにcochran.txtというファイルができる。これは縦長形式なので、EZRやjamoviで分析するには横長形式に変換する必要がある。最も簡単なのは、EZRであればddというデータフレームにファイルを読み込んだ後で、

library(car)

ddw <- reshape(dd, direction="wide", idvar="block", timevar="fact")


として横長形式のddwに変換し、ddwをアクティブデータセットにしてから、統計解析>名義変数の解析>対応のある3群以上の比率の比較(Cochran Q検定)と進んで、時点を示す3つの変数を選んでOKをクリックするという方法である。X-squared = 10.889, df = 2, p-value = 0.00432と同じ結果が得られる。ノンパラメトリック検定>対応のある3群以上の間の比較(Friedman検定)でも、同じp値が得られる。jamoviでも、横三本線のメニューの「開く」からブラウズしてデータを読み込んだ後、jReshapeモジュールのLong to wideから、Rows to columnsとしてresponse、indexing variableとしてfact、ID variableとしてblockを指定し、Reshapeというボタンをクリックすると、横長形式への変換が行われ、新しいjamoviのウィンドウとして自動的に開くので、その後で、分散分析>反復測定分散分析(ノンパラメトリック)と進んで3つの変数を選ぶと、表示されるp値は0.004である(同じ0.00432だが、丸められて0.004までしか表示されない)。なお、RVAdeMemoireパッケージのcochran.qtest()関数ではfdr法で検定の多重性を調整した対比較結果が表示されるが、jamoviではダービン・コノバー法が可能である(逆にfdrやholmの結果を得るメニューはない)。記述統計にチェックを入れれば、平均値として1の割合を計算させることもできる。

 

コメント

このブログの人気の投稿

統計教育サンプルデータ作成プロジェクト

差がゼロという帰無仮説以外の仮説の下でのp値の計算

対応のある多群間のノンパラメトリックな比較のためのFriedmanの検定後の対比較について