array(1) { [0]=> string(3) "1,2" }
我无法理解为什么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
函数无法测试像m2这样的表的差异。有没有任何方法可以获得数据帧的p值,如m1和第三列零?
答案 0 :(得分:1)
您可以使用Fisher的精确测试:
fisher.test(m1)$p.value
[1] 0.4647059
答案 1 :(得分:1)
正如Marco所说,Fisher's exact test会给你一个p值,但即使χ 2 -test确实给你一个值,你仍然应该使用Fisher's。 χ 2 -test给出近似值,仅适用于大型数据集
至于你得到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