恐怕你的问题更复杂。卡方检验的假设是每个单元格的预期频率大于 5。在您的示例中,您试图选择列联表的每个单元格的计数,即观察到的频率。预期频率(在零假设下)是根据此处的基本示例所示的行和列总数计算得出的。
按照您的示例,假设的列联表可能如下所示:
ACS <- c(32, 10, 7, 24, 50, 7, 24, 14)
AMA <- c(0, 4, 2, 6, 10, 3, 11, 1)
ARC <- c(6, 10, 12, 3, 12, 23, 10, 2)
tab <- rbind(ACS, AMA, ARC)
如果您筛选观察到的计数等于或小于 5,您将删除 AMA 和 ARC:
apply(tab,1, function(x) any(x<=5))
ACS AMA ARC
FALSE TRUE TRUE
这在概念上是错误的,因为如上所述,预期频率取决于整个数据。获取 exp。数:
chisq.test(tab, correct=F)$expected
[,1] [,2] [,3] [,4] [,5] [,6] [,7]
ACS 22.558304 14.247350 12.466431 19.590106 42.742049 19.590106 26.713781
AMA 4.968198 3.137809 2.745583 4.314488 9.413428 4.314488 5.883392
ARC 10.473498 6.614841 5.787986 9.095406 19.844523 9.095406 12.402827
[,8]
ACS 10.091873
AMA 2.222615
ARC 4.685512
Warning message:
In chisq.test(tab, correct = F): Chi-squared approximation may be incorrect
卡方检验发出警告消息,因为确实有一些带有 exp 的单元格。计数小于 5。但是,如果仅删除 AMA,则表的动态(行和列总计)会更改,并且所有 exp。计数高于 5:
chisq.test(tab[-2,], correct=F)$expected
[,1] [,2] [,3] [,4] [,5] [,6] [,7]
ACS 25.95122 13.658537 12.97561 18.439024 42.34146 20.487805 23.21951
ARC 12.04878 6.341463 6.02439 8.560976 19.65854 9.512195 10.78049
[,8]
ACS 10.926829
ARC 5.073171
因此,如果您同时删除 AMA 和 ARC,您将丢失重要信息。
您可以尝试运行Fisher 精确检验(请参阅下面的说明):
fisher.test(tab,simulate.p.value=TRUE,B=10000)
总结:
- 单个观察到的频率不能很好地指示预期频率。观察到的频率可能低于 5,但该小区的预期频率将高于 5。
- 在大型列联表中,最多可以有 20% 的 exp。频率低于 5,但结果是失去统计功效,因此测试可能无法检测到真正的效果。即使在那种情况下,exp。频率不应低于 1。
- 低 exp 的替代测试。频率是 Fisher 的精确检验。卡方检验统计量近似于卡方分布。如果样本量很大,这个近似值会变得更准确,因此需要 exp。频率 > 5。即使样本量很小,Fisher 精确检验也会计算卡方统计量的精确概率,但它可能计算量更大。不幸的是,对于大于 2x2 的列联表,您可能需要模拟 p 值,这有其自身的局限性(这里没有空间讨论它,但它是一个很好的研究主题)。选择大量重复进行模拟 (B),并对其进行调整以查看您的解决方案的稳健性。