我如何从chisq.test()函数中获得p.value?

时间:2017-04-16 10:20:47

标签: r chi-squared

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和第三列零?

2 个答案:

答案 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