例題:
「13 人の学生について,自動車運転免許を持っているかどうかを調査した結果が,表 4 のようにまとめられた。男女で免許保有率に差があるかどうか検定しなさい。」
| あり | なし | 合計 | |
|---|---|---|---|
| 男子 | 4 | 2 | 6 |
| 女子 | 1 | 6 | 7 |
| 合計 | 5 | 8 | 13 |
R による解析:
> tbl4 <- matrix(c(4, 2, 1, 6), ncol=2, byrow=T)
> tbl4
[,1] [,2]
[1,] 4 2
[2,] 1 6
> chisq.test(tbl4, correct=F) # 連続性の補正をしない場合
Pearson's Chi-squared test
data: tbl4
X-squared = 3.7452, df = 1, p-value = 0.05296
Warning message:
Chi-squared approximation may be incorrect in: chisq.test(tbl4, correct = F)
> chisq.test(tbl4) # 連続性の補正をする場合
Pearson's Chi-squared test with Yates' continuity correction
data: tbl4
X-squared = 1.8591, df = 1, p-value = 0.1727
Warning message:
Chi-squared approximation may be incorrect in: chisq.test(tbl4)
注意
4 つの桝目の数値を a,b,c,d,および,n = a + b + c + d としたとき,abs(a * d - b * c) - n / 2 が負の値になるときに,R の chisq.test は誤った答えを表示してしまう。
abs(a*d-b*c)-n/2 が負の値になるときには,補正カイ二乗値は無条件に 0 にしなければならない(手法の解説ページを参照のこと)。
| あり | なし | 合計 | |
|---|---|---|---|
| 男子 | 10 | 15 | 25 |
| 女子 | 11 | 16 | 27 |
| 合計 | 21 | 31 | 52 |
R での計算結果
> tbl5 <- matrix(c(10, 15, 11, 16), ncol=2, byrow=TRUE)
> tbl5
[,1] [,2]
[1,] 10 15
[2,] 11 16
> chisq.test(tbl5)
Pearson's Chi-squared test with Yates' continuity correction
data: tbl5
X-squared = 0.0522, df = 1, p-value = 0.8193
この結果は,間違いである。
abs(10*16-15*11)-52/2 = -21 である。これは,修正される前の数値より,修正すべき数値が大きいという例外が生じているのである。意味的に考えれば,このようなときには修正後の値は 0 とすべきである。そのようにすればカイ二乗値は 0 になり,P 値は 1 になるのである。
対処法は R の chisq.test 関数の中の
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)
という部分を
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)
のように変更すればよい。