使用rstatix::anova_test遇列不存在或报错的问题咨询
解决方法与分析
1. 报错根源
- 你的数据框是分组数据框(grouped_df),分组变量为
Total_Devices,调用anova_test时函数会遍历每个分组子数据框,但子数据框中已不包含Total_Devices列,这是第一个报错的核心原因。 - 直接传递
df$size_range这类向量给dv/within参数不符合rstatix::anova_test的语法要求,该函数需要接收列名(符号或字符串)而非直接向量,这引发了第二个报错。
2. 修复ANOVA测试的代码
先取消数据框分组,再正确调用函数:
# 取消分组 df_ungrouped <- dplyr::ungroup(df) # 运行单因素ANOVA(Total_Devices是独立分组,用between参数) res_anova <- rstatix::anova_test(data = df_ungrouped, dv = size_range, between = Total_Devices) # 查看结果 print(res_anova)
注意:这里用between而非within,因为Total_Devices是独立分组(每个观测仅属于2或3中的一组),不是重复测量的组内变量。
3. 是否改用t-test?
完全可以。因为你的Total_Devices只有2个水平(2和3),此时独立样本t-test和单因素ANOVA的结果完全等价:ANOVA的F值等于t值的平方,两者的p值一致。
若选择t-test,代码如下:
# 取消分组并剔除缺失值 df_clean <- df %>% dplyr::ungroup() %>% tidyr::drop_na(size_range) # 运行独立样本t-test res_ttest <- rstatix::t_test(df_clean, size_range ~ Total_Devices) # 查看结果 print(res_ttest)
补充说明
- 数据中
size_range存在NA值,建议先用drop_na()剔除,避免缺失值干扰统计结果。 - 若后续
Total_Devices扩展到3个及以上水平,ANOVA会更适合;仅两组时,t-test的结果解读更直观。
内容的提问来源于stack exchange,提问作者Kristen Cyr
相关产品推荐
相关产品推荐

