Yatesの補正について
院生の相談に乗っていて気付いたが、chisq.test()やprop.test()は、2行2列でないと、correct=TRUEをつけてもYatesの連続性の修正をしてくれない。強引にやらせる方法としては、例えば Hitchcock, David B. (2009). Yates and Contingency Tables: 75 Years Later. Retrieved 4/8/2015 from: University of South Carolina に書かれている式を使うと、 chisqY.test <- function(.X) { .EX <- outer(rowSums(.X), colSums(.X))/sum(.X) # same as chisq.test(.X)$expected X2Y <- sum((abs(.X-.EX)-0.5)^2/.EX) DF <- (NROW(.X)-1)*(NCOL(.X)-1) # same as chisq.test(.X)$parameter list(chisq.Yates=X2Y, df= DF, p.value=1-pchisq(X2Y, DF)) } と関数定義してから、chisqY.test()を使えば、行数か列数、あるいはその両方が3以上でも、強引にYatesの補正をしてくれる。 なお、当初は内部で期待度数と自由度を得るためにchisq.test()を呼び出すとき、期待度数が5より小さいセルがセル数の20%以上あると警告メッセージが表示されたので、chisq.test()を呼ばない形に書き換えた。 また、chisq.test()やprop.test()のYatesの補正では、0.5ではなく、min(0.5, abs(.X - .EX)を補正項としているので、2行2列の場合でも結果は必ずしも一致しない点にも注意。 けれども、前掲Hitchcock (2009)にあるように、そういう場合は素直にfisher.test()を使えば良いので、無理にYatesの補正をするのは筋が良くない。そもそも、Yatesの補正をすべきかどうかについては論戦が繰り広げられ...