信州大学の鈴木先生から,R のプログラムが修正されているようだとの情報を頂きました。 さかのぼって調べてみたところ,R-2.15.1 から変更があったようです。この変更により,chisq.test(matrix(11:14, 2)) のカイ二乗値は 0 と出力されるようになりました。
> grep YATES ./R-2.15.0/src/library/stats/R/chisq.test.R YATES <- 0.5 > grep YATES ./R-2.15.1/src/library/stats/R/chisq.test.R YATES <- min(0.5, abs(x-E)) # ここで(こっそりと?)細工しましたね以下,何を問題としていたかが分かるように,残しておく。
当初,RjpWikiの「何でも掲示板」へ書いたのだが,迷惑になりそうなので,こちらの方へ引き取ることにした。
11 | 12 |
13 | 14 |
> chisq.test(matrix(11:14, 2)) Pearson's Chi-squared test with Yates' continuity correction data: matrix(11:14, 2) X-squared = 0.0683, df = 1, p-value = 0.7939正しい答えは
X-squared = 0, df = 1, p-value = 1と思われる。プログラムの修正は以下のようにでもなるだろうか。
# if (correct && nrow(x) == 2 && ncol(x) == 2) { # YATES <- 0.5 # METHOD <- paste(METHOD, "with Yates' continuity correction") # } # else YATES <- 0 # STATISTIC <- sum((abs(x - E) - YATES)^2/E) ## replace begin if (correct && nrow(x) == 2 && ncol(x) == 2) { STATISTIC <- if (abs(x[1,1]*x[2,2]-x[1,2]*x[2,1]) < sum(x)/2) 0 else sum((abs(x - E) - 0.5)^2/E) METHOD <- paste(METHOD, "with Yates' continuity correction") } else STATISTIC <- sum((abs(x - E))^2/E) ## replace endしかし,R のメンテナンスをしている人たちは,「Yates の原典に従っているのだから,これで良いのだ」と言う。「イエーツの補正(連続性の修正)を取り上げたどのような文献・資料でも,そのような取り扱いはない」と言う。
> prop.test(matrix(11:14, 2)) 2-sample test for equality of proportions with continuity correction data: matrix(11:14, 2) X-squared = 0, df = 1, p-value = 1 以下略
さらに,「SPSS も,このような場合にはカイ二乗値として 0,対応する P 値として 1 を返すんだけど?」と言う指摘は,はなから無視のようで。
イエーツの補正(連続性の修正)は,しない方が良いという議論の方が優勢なようなのと,このような違いは実質上たいした違いではないというのは議論するつもりはない。
ChiSq.=0, P-value=1 派 R(prop.test), SPSS, SAS, StatView, HALWIN ChiSq.≠0, P-value≠1 派 R(chisq.test), S-PLUS(chisq.test), STATISTICA イエーツの修正なんかやらない派 JMP, STATA
★ S-PLUS の prop.test のヘルプの correct の説明は R より詳しい。
correct:
logical flag: if TRUE, Yates' continuity correction will be applied, but only under certain conditions. When there is only one group, the continuity correction may not exceed in magnitude the difference between the sample proportion x/n and the hypothesized true probability of success. When there are two groups, and p is NULL, then the continuity correction may not exceed in magnitude the difference between the sample proportions. When there are more than two groups, the continuity correction is never used. See Section DETAILS for an algebraic definition of the continuity correction.
つまり,S-PLUS では,上記のような状況が発生した場合,イエーツの補正はしない。たとえ,引数で指定されてもやらない。
11 | 12 |
13 | 14 |
R における取り扱いは以下のようである。
イエーツの補正 | χ2値 | P 値 | |
---|---|---|---|
chisq.test | あり | 0.0683 | 0.7939 |
なし | 5e-04 | 0.9819 | |
prop.test | あり | 0 | 1 |
なし | 5e-04 | 0.9819 |
★ スネデカー,コクラン「統計的方法 原書第6版」,岩波書店は古い本だが権威はあるだろう。204ページに「ときどき尋ねられる問題は,|r-np| が 1/2 よりも小さいときにも χ2 に 1/2 補正を適用すべきか否かということである。...そのような場合の答は χ2 の補正値をゼロとすることである。... χ2 = 0。
★ 繁桝,柳井,森編著「Q&Aで知る統計データ解析 DOs and DON'Ts」サイエンス社には「abs(ad-bc)-n/2 がマイナスになったら0にせよ(46ページ)」と書いてある。
★ SPSS が使用しているアルゴリズムについては,ダウンロードできる。そこには,ばっちり SPSS が採用しているアルゴリズムが書いてあった。
fij: Sum of cell weights for cases in cell i j cj: the jth column subtotal ri: the ith row subtotal W: the grand total
5 5 ChiSq = 20*( abs(5*5-5*5) - 20/2 ) ^ 2 / (10*10*10*10) = 0.2 5 5 abs(5*5-5*5) - 20/2 = 0 - 10 = -10 4 6 ChiSq = 20*( abs(4*4-6*6) - 20/2 ) ^ 2 / (10*10*10*10) = 0.2 6 4 abs(4*4-6*6) - 20/2 = 20 -10 = 10