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

样本量不等时R中Chi-square test执行报错的原因及解决方法

问题根源先理清楚

你误会啦!卡方检验完全支持不等样本量,报错的锅不在卡方检验本身,而是你构造表格的方式错了。

table(df1$x, df2$x)这个用法是把两个向量按位置一一配对生成交叉表——相当于每一行是df1和df2对应位置的观测对,这自然要求两个向量长度完全一致。但我们要做的是两组独立样本的分布差异检验,需要的是「每组中Yes/No的频数统计表」,而不是配对观测的交叉表。

几个简易修复方案

方案1:分别统计频数再组合成列联表

先单独算出两组的分类频数,再把它们拼成卡方检验需要的列联表:

# 统计每组的Yes/No频数
freq_df1 <- table(df1$x)
freq_df2 <- table(df2$x)

# 组合成2行(Yes/No)2列(df1/df2)的列联表
contingency_table <- cbind(freq_df1, freq_df2)

# 执行卡方检验
chisq.test(contingency_table)

方案2:合并数据集后构造交叉表

把两个数据集合并,给每组加个分组标签,再用table生成正确的列联表:

# 合并数据并添加分组标识
combined <- rbind(
  data.frame(x = df1$x, group = "Group1"),
  data.frame(x = df2$x, group = "Group2")
)

# 生成分类变量×分组的列联表
contingency_table <- table(combined$x, combined$group)

# 卡方检验
chisq.test(contingency_table)

方案3:直接用比例检验(更简洁)

对于两组二分类变量的差异检验,prop.test()其实和卡方检验(自由度为1时)是等价的,而且不需要手动构造表格,一步到位:

# 统计每组的Yes数量和总样本量
yes_counts <- c(sum(df1$x == "Yes"), sum(df2$x == "Yes"))
total_counts <- c(nrow(df1), nrow(df2))

# 执行比例检验
prop.test(yes_counts, total_counts)

内容的提问来源于stack exchange,提问作者Bradley Allf

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 17:25:25