使用dplyr运行chisq_test时提示group未找到的问题求助
问题解决:针对每日x/y组的卡方检验修正
你的代码核心问题是未正确传递卡方检验所需的频数变量(value),且参数调用逻辑错误,导致无法识别变量或无法进行有效检验。以下是修正方案:
错误原因分析
chisq_test(day, group)完全未用到你需要检验的核心数据(各组总数value),且day在group_by(day)后是每个子组的常数向量,无法用于卡方检验。- 你需要的是拟合优度卡方检验:检验每日x组和y组的观测总数是否与期望分布(如1:1比例)存在显著差异,必须基于
value列的频数数据进行计算。
修正代码
library(dplyr) library(rstatix) library(tidyr) # 你的原始数据构造代码(保留) x <- c(5,17,31,9,17,10,30,28,16,29,14,34) y <- c(1,2,3,4,5,6,7,8,9,10,11,12) day <- as.character(c(1,2,3,4,5,6,7,8,9,10,11,12)) df1 <- data.frame(x, y, day) df2 <- reshape2::melt(df1, id.vars='day') colnames(df2)[2] = "group" # 修正后的每日卡方检验代码 df2 %>% group_by(day) %>% summarise( # 对每组的value频数做拟合优度检验,期望x/y组比例为1:1 chisq_result = list(chisq_test(x = value, p = c(0.5, 0.5))) ) %>% unnest(chisq_result) %>% add_significance("p")
代码说明
group_by(day):按日期分组,确保每个日期单独检验。chisq_test(x = value, p = c(0.5, 0.5)):针对每个日期的x/y组总数(value),检验其是否符合1:1的期望分布;若你有其他期望比例,可修改p参数(如c(0.6, 0.4))。unnest(chisq_result):将嵌套的检验结果展开为数据表格式,方便查看。add_significance("p"):为p值添加显著性标记(如*、**等)。
替代方案(若需独立性检验)
若你的实际需求是检验日期与分组的独立性(而非每日单独检验x/y差异),可先将数据转换为宽格式,再构造列联表进行检验:
df_wide <- df2 %>% tidyr::pivot_wider(names_from = group, values_from = value) chisq_test(df_wide, x = day, y = x, y2 = y)
内容的提问来源于stack exchange,提问作者Ahdee
相关产品推荐
相关产品推荐

