Как я могу получить значение p.value из функции chisq.test()?

m1 <- data.frame(a=1, b=2, d=0)
chisq.test(m)$p.value
# 0.3678794

m2 <- data.frame(a=c(1,2,0), b=c(2,12,0), d=c(0,0,0))
chisq.test(m2)$p.value
# NaN

Я не могу понять, почему chisq.test() Функция не может проверить разницу таблицы, такой как m2. Есть ли способ получить значение a p для фрейма данных, как m1 с третьим столбцом нулей?

2 ответа

Решение

Как продемонстрировал Марко, точный тест Фишера даст вам значение p, но даже если тест χ 2 дал вам значение, вы все равно должны были использовать критерий Фишера. Тест 2 дает приблизительный результат и подходит только для больших наборов данных.
Что касается того, почему вы получаете NaN, lukeA является правильным, хотя вы могли бы заявить то же самое, сказав, что тест не будет работать, если какая-либо строка или столбец имеет нулевую сумму или имеет нулевые предельные значения.

m2 <- data.frame(a=c(1, 2, 0), b=c(2, 12, 0), d=c(0, 0, 0))
chisq.test(m2, simulate.p.value=TRUE)$p.value

# Warning messages:
# 1: In chisq.test(m2, simulate.p.value = TRUE) :
# cannot compute simulated p-value with zero marginals

Чтобы продемонстрировать разницу между приблизительным и точным значением p

m3 <- data.frame(a=c(1, 2, 0), b=c(2, 12, 0), d=c(0, 0, 1))

chisq.test(m3, simulate.p.value=TRUE)$p.value
# 0.05147

fisher.test(m3)$p.value
# 0.06324

Вы можете использовать точный тест Фишера:

 fisher.test(m1)$p.value

[1] 0.4647059

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