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

R中分类数据列联表含0计数时,如何执行Chi-square test?

三组分类数据的卡方检验及零计数问题解决

需求说明

需对3组各包含19种类型的分类数据执行卡方检验,分析组间分布是否存在显著差异。现有操作中生成列联表时出现零计数,导致卡方检验无法正常执行,需解决该问题。

数据背景

数据为包含3列分组(Group1、Group2、Group3)的tibble,每列对应一组分类数据,存在大量NA值(代表该样本不属于当前组),分组已转换为因子类型。数据结构示例如下:

# 数据结构
str(df)
#> tibble [185 × 3] (S3: tbl_df/tbl/data.frame)
#>  $ Group1: Factor w/ 7 levels "TypeA","TypeB",..: NA NA NA NA NA NA NA NA NA NA ...
#>  $ Group2: Factor w/ 8 levels "TypeA","TypeB",..: NA 7 5 NA 6 4 8 NA NA 6 ...
#>  $ Group3: Factor w/ 15 levels "TypeA","TypeB",..: NA NA NA 4 NA 4 8 NA NA 4 ...

解决方案与代码实现

步骤1:数据读取与预处理

首先读取Excel数据并将分组列转换为因子类型:

library(readxl)
library(tibble)

# 读取数据
df <- read_excel("data.xlsx")

# 转换为因子类型
df$Group1 <- factor(df$Group1)
df$Group2 <- factor(df$Group2)
df$Group3 <- factor(df$Group3)

步骤2:重构数据格式

原数据每行仅对应一个分组的类型(其余列为NA),需先将数据重构为长格式,方便生成正确的列联表:

library(tidyr)

# 重构为长格式:保留非NA的分组-类型对
df_long <- df %>%
  pivot_longer(cols = everything(), names_to = "Group", values_to = "Type") %>%
  drop_na(Type)

步骤3:生成列联表并处理零计数

重构后生成列联表,此时若仍存在零计数,可通过以下几种方式解决:

方法1:使用蒙特卡洛模拟的卡方检验

当列联表存在零计数且样本量较大时,可通过蒙特卡洛模拟计算p值,避免理论频数过小的问题:

# 生成列联表
contingency_table <- table(df_long$Group, df_long$Type)

# 带蒙特卡洛模拟的卡方检验
chi_result <- chisq.test(contingency_table, simulate.p.value = TRUE, B = 10000)
print(chi_result)

方法2:合并低频次类别

将出现次数极少的类别合并为“其他”,减少零计数的出现:

# 计算各类型的频次
type_counts <- table(df_long$Type)
# 合并频次<=2的类别为"Other"
df_long$Type <- ifelse(df_long$Type %in% names(type_counts[type_counts <= 2]), "Other", df_long$Type)
df_long$Type <- factor(df_long$Type)

# 重新生成列联表并执行卡方检验
contingency_table_merged <- table(df_long$Group, df_long$Type)
chi_result_merged <- chisq.test(contingency_table_merged)
print(chi_result_merged)

方法3:Fisher精确检验

若列联表为2×2或小样本场景,可使用Fisher精确检验替代卡方检验:

# 仅适用于小列联表场景
fisher_result <- fisher.test(contingency_table)
print(fisher_result)

关键说明

  • 原数据的宽格式不适合直接生成列联表,需转换为长格式后再统计各组的类型分布
  • 零计数会导致卡方检验的理论频数过小,违反卡方检验的前提假设,需通过上述方法处理
  • 蒙特卡洛模拟是通用的解决方案,无需修改原始数据,适合大多数场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 14:39:55