Как я могу получить значение 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