R неправильно вычисляет статистику хи-квадрат для таблиц 2x2 с низким числом ячеек?

Я только что заметил, что для таблиц 2 x 2, где ячейки имеют низкие частоты, даже с поправкой Йейтса, R кажется, неправильно вычисляет статистику chi^2.

mat <- matrix(c(3, 2, 14, 10), ncol = 2)
chi <- stats::chisq.test(mat)
## Warning message:
## In stats::chisq.test(mat) : Chi-squared approximation may be incorrect

# from the function
chi$statistic
##    X-squared 
## 1.626059e-31 

# as it should be (with Yates correction)
sum((abs(chi$observed - chi$expected) - 0.5)^2 / chi$expected)
## [1] 0.1851001

Правильно ли я думаю, что R вычисляет это неправильно, и что второй метод, дающий.185, является более точным? Или небольшое количество клеток означает, что все ставки сняты?

Обновить:

Кажется, он работает нормально без исправления преемственности Йейтса:

chi <- stats::chisq.test(mat, correct = FALSE)
## Warning message:
## In stats::chisq.test(mat, correct = FALSE) :
##   Chi-squared approximation may be incorrect

chi$statistic
##   X-squared 
## 0.004738562 

sum((abs(chi$observed - chi$expected))^2 / chi$expected)
## [1] 0.004738562

1 ответ

Решение

Файл справки / состояния man-страницы

one half is subtracted from all |O - E| differences; however,
the correction will not be bigger than the differences themselves.

Различия в вашем примере меньше 0.5:

> chi$observed - chi$expected
            [,1]        [,2]
[1,]  0.06896552 -0.06896552
[2,] -0.06896552  0.06896552

Так что, по крайней мере, это похоже на документированное поведение.

Примечание: если вы сомневаетесь, вы можете использовать значения p, найденные при моделировании

> chi <- stats::chisq.test(mat, simulate.p.value=TRUE, B=1e6)
> chi

    Pearson's Chi-squared test with simulated p-value (based on 1e+06 replicates)

data:  mat
X-squared = 0.0047386, df = NA, p-value = 1

Который в этом случае находит хи-квадрат где-то посередине и избавляется от предупреждения. Или использовать fisher.test...

Другие вопросы по тегам