事后χ2χ2用 R 测试

机器算法验证 r 卡方检验 事后
2022-03-25 05:43:45

这是一个非常简单的问题,但我找不到任何好的、清晰、准确的答案:我正在寻找一种方法来对 chi测试执行事后测试。2

我有 2 个变量: var1 : good/fair/poor 和 var2: a/b/c

这是列联表:

      a   b  c
good 120  70 13
fair 230 130 26
poor  84  83 18

与 R :

mat <- matrix(c(120,230,84,70,130,83,13,26,18),3)
dimnames(mat) <- list(c("good","fair","poor"),c("a","b","c"))
mat

我执行χ2

chisq.test(mat)

我得到 p = 0.022,所以 var1 和 var2 之间存在关系......但是哪一个?我该如何处理?(贡献分析?,成对道具测试?)

3个回答

我喜欢这个问题,因为人们经常进行综合测试,然后不会就正在发生的事情提出更具体的问题。

如果目标是比较“处理”a、b 和 c,我建议汇总显示每列中百分比的数据,以便您可以更清楚地看到它们之间的差异。然后为了测试这些比较,一个简单的想法是对每对列χ2

> for (j in 1:3) print(chisq.test(mat[, -j]))

    Pearson's Chi-squared test

data:  mat[, -j]
X-squared = 0.1542, df = 2, p-value = 0.9258


    Pearson's Chi-squared test

data:  mat[, -j]
X-squared = 4.5868, df = 2, p-value = 0.1009


    Pearson's Chi-squared test

data:  mat[, -j]
X-squared = 9.5653, df = 2, p-value = 0.008374

由于进行了 3 次测试,因此建议进行 Bonferroni 校正(将每个值乘以 3)。最后一个检验(省略了第 3 列)具有非常低的值,因此您可以得出结论,对于条件 a 和 b,(好、公平、差)的分布是不同的。但是请注意,条件 c 没有太多数据,这也是其他两个结果不显着的主要原因。PP

您可以使用类似的策略对行进行成对比较。

另一种方法是使用 pearson 标准化残差,正如Agresti, A. (2007) 在他的著作 Categorical Data Analysis 第 3.3 节后续卡方检验中所建议的那样。

Pearson 标准化残差 (eij)测量从每个单元格到零假设的偏差有多大(在这种情况下,行和列之间的独立性)。

正残差表示行变量和列变量之间的正相关。负残差表示行和列变量之间的负关联。

一次eijN(0,1),eij>|2|表示关联。它们是通过以下方式获得的:

tab2 <- chisq.test(mat)
tab2$stdres
           a        b        c
good  1,0164 -0,71661 -0,60995
fair  1,9643 -1,66201 -0,66782
poor -3,3512  2,68760  1,41203

穷人类别与“a”负相关,因此,“a”与少数穷人相关。贫困类别与“b”正相关,因此,“b”与大量贫困人口相关。

如果有人仍然遇到这个古老的线程 - Guilherme 建议的程序现在在chisq.posthoc.test包中实现,它还提供基于残差的特定 p 值。