如何修复R中双因素重复测量ANOVA的数据框错误并实现Tukey事后检验
报错原因排查
- 第一个代码的两个核心错误:
- 公式逻辑完全颠倒:双因素重复测量ANOVA的公式格式为
因变量 ~ 自变量交互项 + Error(被试ID/重复测量因子),你把被试ID放到了因变量位置,且Error项错误填入了因变量score,逻辑完全不成立 - 列名不匹配:报错提示ID列赋值时仅0行,说明你读取的
sampleData.csv中不存在名为ID的列,大概率是列名拼写错误、存在大小写差异或额外空格
- 公式逻辑完全颠倒:双因素重复测量ANOVA的公式格式为
- 第二个代码的核心错误:
- Error项依旧错误填写了因变量score,同时读取的
No ID sampleData.csv中不存在名为score的列,同样是列名不匹配导致 - 重复测量ANOVA必须包含被试ID字段来区分同一被试的多次测量结果,删除ID字段根本无法完成重复测量分析
- Error项依旧错误填写了因变量score,同时读取的
正确实现代码
第一步:确认数据读取和列名匹配
先运行下方代码检查数据是否正常读取,列名是否和你实际的字段完全一致:
# 读取数据 data <- read.csv(file = "sampleData.csv", header = TRUE) # 查看前6行数据,确认字段和值是否正常 head(data) # 查看所有列名,确认有ID、score、treatment、day四个字段,无拼写/空格/大小写差异 colnames(data)
如果列名和预期不符,直接修改csv的表头为
ID、score、treatment、day即可,或者在R中用colnames(data) <- c("ID","score","treatment","day")手动修改列名(要按实际列的顺序对应)
第二步:拟合双因素重复测量ANOVA模型
这里默认day为被试内重复测量因子,treatment为被试间因子,如果两个因子都是被试内因子,可替换注释里的公式:
# 转换为因子类型 data$treatment <- as.factor(data$treatment) data$day <- as.factor(data$day) data$ID <- as.factor(data$ID) # 拟合模型,若treatment和day均为被试内因子,把公式替换为score ~ treatment*day + Error(ID/(treatment*day)) twoWayA <- aov(score ~ treatment * day + Error(ID/day), data = data) # 输出ANOVA结果 summary(twoWayA)
第三步:Tukey事后检验
使用emmeans包实现事后检验,首次运行需要先安装包,后续可注释掉安装命令:
# 首次使用先安装包 install.packages("emmeans") library(emmeans) # 检验treatment主效应的组间差异 emmeans(twoWayA, pairwise ~ treatment, adjust = "tukey") # 检验day主效应的组间差异 emmeans(twoWayA, pairwise ~ day, adjust = "tukey") # 若交互项显著,可检验treatment和day各组合的差异 emmeans(twoWayA, pairwise ~ treatment*day, adjust = "tukey")
内容的提问来源于stack exchange,提问作者ineedhelp
相关产品推荐
相关产品推荐

