Fisher 精确检验 4 x 3 表,计数低?

机器算法验证 r 分类数据 渔民精确测试
2022-03-28 21:50:55

我正在考虑对以下列联表应用 Fisher 精确检验:

  Answer          Category-1  Category-2
  A-1             2           15
  A-2             0           17
  A-3             0           27
  A-4             2           15

但是,我不确定这是否正确,原因有两个: 1. 一些计数为零。2. 通常,Fisher Exact Test 用于 2 x 2 表,不确定这是否是限制。

另外,我正在使用 R 命令执行测试fisher.test

2个回答
  1. 观察到零点对于 Fisher 精确检验来说不是问题——对于卡方检验来说也不是问题(不清楚为什么你认为这对精确检验来说会是一个困难;如果你能澄清您的担忧,可能会有额外的解释/澄清)。对于某些实现来说,整行或整列的零可能是一个问题,尽管如果出现它很容易处理(例如,通过与相邻的行或列组合 - 或者等效地,通过完全消除它 - 无论哪种方式我认为结果应该与在这种情况下包含它相同)。

    对您来说一个潜在的问题(不是测试本身的问题,但在某些情况下可能会引起您的担忧)是低计数的整列或行在某些情况下可能导致难以获得小的 p 值(可达到的最低值) p 值可能大于一些常见的显着性水平选择)。对于较大的表格,这往往不是问题(我相信它不会对您的问题中的表格造成问题,除非您需要非常低的显着性水平)

  2. 该测试以一种相当自然的方式扩展到个表,使用可能性(在 null 下)作为对表格进行排序的标准(实际上,可能性是测试统计量;较低的可能性 = “更极端”的关系计算 p 值)。表上的 Fisher 精确检验有时被称为 Fisher-Freeman-Halton 检验 [1]。r×cr×c

    实际上,您提到的 R 函数的帮助清楚地表明它适用于表,并提供了与案例相关的几个参考。r×cr×c

[1] Freeman, GH 和 Halton, JH (1951)。
“关于对偶然性、拟合优度和其他重要问题的准确处理的说明。”
生物计量学,38,141-149

原则上,Fisher 精确检验可用于具有任何条目的任何大小的表。唯一的问题是它在计算上是否可行,当您使用具有大值的大型表时,这是一个问题。在这种情况下,fisher.test函数 inR可以轻松处理您正在使用的矩阵,并且执行的系统时间(在我的 PC 上)是如此之小,它甚至不会注册为非零时间。

#Input data and perform Fisher's exact test
x <- matrix(c(2, 15, 0, 17, 0, 27, 2, 15), byrow = TRUE, nrow = 4, ncol = 2);
fisher.test(x);

    Fisher's Exact Test for Count Data

data:  x
p-value = 0.1434
alternative hypothesis: two.sided

#Check system time for test
system.time(fisher.test(x));

 user  system elapsed 
    0       0       0