我如何从 chisq.test() 函数中得到 p.value?
how may I get a p.value from chisq.test() function?
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 这样的 table 的差异。有没有什么方法可以为第三列零的数据框(如 m1)获取 p 值?
您可以使用 Fisher 精确检验:
fisher.test(m1)$p.value
[1] 0.4647059
正如 Marco 所展示的,Fisher's exact test 会给你一个 p 值,但即使 χ2-test 确实给了你一个你仍然应该使用的值费舍尔的。 χ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
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 这样的 table 的差异。有没有什么方法可以为第三列零的数据框(如 m1)获取 p 值?
您可以使用 Fisher 精确检验:
fisher.test(m1)$p.value
[1] 0.4647059
正如 Marco 所展示的,Fisher's exact test 会给你一个 p 值,但即使 χ2-test 确实给了你一个你仍然应该使用的值费舍尔的。 χ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