R中用WRS2包执行稳健三因素ANOVA遇‘非全因子设计’错误求助
这个错误提示其实已经把问题说透了:t3way()函数要求你的三因素设计必须是完全析因设计——也就是说,三个因子的所有水平组合(单元格)都得有至少一个观测值,不能有任何缺失的组合。比如假设money有2个水平、job有3个水平、relationship有2个水平,那总共有12种组合,每个组合都得存在数据,不然就会触发这个报错。
下面是具体的排查和解决步骤:
1. 先定位缺失的因子组合
首先你得找出到底是哪些组合没有数据,推荐用这两种方法:
方法1:用基础R的table函数
运行这段代码可以直观看到每个组合的样本量:
with(Dataset, table(money, job, relationship))
输出的表格里,数值为0的单元格就是缺失的组合。
方法2:用dplyr精准筛选缺失组合
如果你习惯tidyverse语法,用这段代码可以直接列出没有数据的组合:
library(dplyr) Dataset %>% group_by(money, job, relationship) %>% summarise(sample_size = n(), .groups = "drop") %>% filter(sample_size == 0)
2. 根据情况处理缺失组合
找到问题后,你可以根据实际数据情况选择以下方案:
方案1:补全数据(如果是录入错误)
如果缺失的组合是因为数据漏录,那补全对应的观测值即可,之后再重新运行t3way()。方案2:改用支持非完全析因的稳健分析函数
WRS2包里的bwtrim()函数可以处理非完全析因设计,用法和t3way()类似,还能自定义截尾比例(参数tr,默认0.2)。示例代码:bwtrim(happiness ~ money*job*relationship, data = Dataset, tr = 0.2)方案3:调整因子水平
如果某些因子水平的样本量极小,或者在研究逻辑上可以合并,你可以合并相关水平,让设计变成完全析因。比如把job的两个小众水平合并成一个,减少总组合数。方案4:删除缺失组合对应的因子水平(谨慎使用)
如果某个因子的某个水平下完全没有其他因子的组合数据,可以考虑删除这个水平,但这会改变你的研究问题,一定要确保这样做符合研究逻辑。
3. 验证修复结果
处理完数据后,再用第一步的table函数检查所有组合都有样本量,之后重新运行t3way(),应该就能正常执行了。
另外提醒一下:即使满足完全析因设计,每个单元格的样本量也不要太小,不然稳健截尾均值的估计效果会打折扣哦。
内容的提问来源于stack exchange,提问作者Kevin Sohn

