You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何R语言chisq.test函数未执行Yates校正?

关于R中chisq.test未执行Yates校正的疑问与解释

问题背景

我在R中尝试使用chisq.test()对以下数据进行卡方检验:

原始数据

x <- c("1", "1", "1", "1", "2", "1", "1", "1", "1", "1", "1", "1", 
"1", "1", "2", "2", "1", "1", "1", "1", "2", "2", "2", "1", "1", 
"1", "2", "1", "2", "1", "1", "1", "2", "2", "2", "1", "2", "1", 
"1", "2", "1", "1", "1", "1", "1", "2", "1", "1", "1", "2", "1", 
"1", "1", "2", "1", "1", "1", "2", "2", "1", "1", "1", "1", "2", 
"1", "1", "1", "1", "2", "1", "2", "1", "1", "1", "2", "1", "2", 
"2", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", 
"1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "2", "1", "1", "1", 
"1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", 
"1", "1", "1", "2", "2", "1", "2", "1", "2", "3", "1", "2", "1", 
"1", "3", "2", "2", "1", "2", "1", "1", "1", "1", "1", "1", "1", 
"1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "2", "1", 
"1", "1", "2")

y <- c("1", "1", "1", "1", "2", "2", "1", "1", "1", "1", "2", "1", 
"1", "1", "1", "1", "1", "1", "1", "1", "1", "2", "2", "1", "1", 
"1", "2", "1", "2", "1", "2", "1", "2", "2", "1", "1", "2", "1", 
"2", "2", "1", "1", "1", "1", "1", "1", "2", "1", "2", "1", "1", 
"1", "1", "1", "2", "1", "1", "1", "2", "1", "1", "1", "1", "1", 
"1", "1", "1", "1", "2", "1", "1", "1", "2", "2", "2", "1", NA, 
"2", "2", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", 
"1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "2", "1", "1", "1", 
"1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "2", 
"2", "2", "1", "1", "2", "2", "1", "2", "2", "2", "2", "1", "1", "1", 
NA, "2", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", 
"1", "1", "1", "1", "1", "1", "2", "1", "1", "1", "1", "2", "1", 
"1", "1", "1")

频数分布

x
  1   2   3 

121  35   2

y
1   2  NA 

120  36   2 

卡方检验输出

我已知chisq.test()默认参数correct=T,且当单元格频数n<5时应执行带Yates校正的Pearson卡方检验,但实际运行后仅得到常规Pearson卡方检验结果:

Warning: Chi-squared approximation may be incorrect
    Pearson's Chi-squared test

data:  df$eq_5d_movilidad and df$eq_5d_mov_fin
X-squared = 34.842, df = 2, p-value = 2.718e-08

补充说明:列联表(gmodels包生成)

我已将向量水平设置为("1","2","3"),并使用gmodels生成列联表:

Cell Contents
|-------------------------|
|                       N |
| Chi-square contribution |
|           N / Row Total |
|           N / Col Total |
|         N / Table Total |
|-------------------------|

 
Total Observations in Table:  158 

 
             | y 
           x |         1 |         2 | Row Total | 
-------------|-----------|-----------|-----------|
           1 |       106 |        15 |       121 | 
             |     1.691 |     5.731 |           | 
             |     0.876 |     0.124 |     0.766 | 
             |     0.869 |     0.417 |           | 
             |     0.671 |     0.095 |           | 
-------------|-----------|-----------|-----------|
           2 |        16 |        19 |        35 | 
             |     4.498 |    15.243 |           | 
             |     0.457 |     0.543 |     0.222 | 
             |     0.131 |     0.528 |           | 
             |     0.101 |     0.120 |           | 
-------------|-----------|-----------|-----------|
           3 |         0 |         2 |         2 | 
             |     1.544 |     5.233 |           | 
             |     0.000 |     1.000 |     0.013 | 
             |     0.000 |     0.056 |           | 
             |     0.000 |     0.013 |           | 
-------------|-----------|-----------|-----------|
Column Total |       122 |        36 |       158 | 
             |     0.772 |     0.228 |           | 
-------------|-----------|-----------|-----------|

疑问

为何未执行Yates校正?这一情况该如何解释?


解释

Yates校正仅针对2×2的列联表,这是R中chisq.test()的内置逻辑:当列联表维度是2行2列时,correct=T才会自动应用Yates连续性校正;而你的列联表是3×2的(x有3个水平,y有2个有效水平),因此即使存在单元格频数<5的情况,也不会触发Yates校正。

另外,输出的警告Chi-squared approximation may be incorrect已经提示,列联表中存在期望频数过低的单元格(比如x=3、y=1的单元格观测频数为0,期望频数必然也很低),此时卡方检验的近似效果不佳,更适合使用Fisher精确检验(通过fisher.test()执行),或者合并低频数的类别后再做卡方检验。

这一规则在chisq.test()的官方文档中有明确说明:correct参数仅在2×2表时生效。


内容的提问来源于stack exchange,提问作者Jorge A

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 18:12:52