R语言:被试内设计下双向重复测量稳健ANOVA技术求助
被试内设计的稳健双向ANOVA实现方案
以下针对你的被试内设计(自变量:condition[A/B/C]、side[左/右];因变量:value_1、value_2),提供稳健ANOVA的具体代码实现,解决数据格式匹配问题:
一、推荐使用长格式数据直接分析(更高效)
如果数据是长格式(每行对应一个被试的一个试次,包含id、condition、side、value_1、value_2),无需转宽,直接用WRS2包的rm_anova()函数处理,该函数原生支持多因素被试内的稳健检验:
代码示例
# 加载依赖包 library(WRS2) library(dplyr) # 针对value_1分析主效应与交互效应 result_v1 <- rm_anova( formula = value_1 ~ condition * side | id, data = your_long_data, robust = TRUE ) print(result_v1) # 针对value_2重复上述分析 result_v2 <- rm_anova( formula = value_2 ~ condition * side | id, data = your_long_data, robust = TRUE ) print(result_v2)
说明
- 公式中
condition * side表示包含两个自变量的主效应及交互效应;| id指定被试id为重复测量的分组变量。 - 输出结果会返回各效应的稳健统计量(如调整后的F值、p值),直接判断显著性。
二、若已转宽格式数据的处理方案
如果已将数据转为宽格式(每个condition+side组合对应一列,如A_left_v1、A_right_v1等),使用WRS2::rmanova()函数,需手动匹配因素水平与列的对应关系:
代码示例
library(WRS2) # 提取value_1对应的所有试次列,保留被试id data_v1_wide <- your_wide_data %>% select(id, contains("_v1")) # 构建自变量的水平组合设计矩阵(需与宽列的顺序严格对应) design_matrix <- expand.grid( condition = c("A", "B", "C"), side = c("左", "右") ) # 运行稳健重复测量ANOVA result_v1_wide <- rmanova( y = data_v1_wide[, -1], # 所有试次的value_1数据 id = data_v1_wide$id, # 被试id design = design_matrix # 自变量水平组合 ) print(result_v1_wide) # 对value_2重复上述步骤,替换为contains("_v2")即可
说明
- 宽列的命名需与
design_matrix的水平组合顺序一致(如先A左、A右,再B左、B右等),否则会导致因素匹配错误。 - 随机化平衡的设计不会影响分析,只要每个被试的所有条件组合数据完整即可。
三、事后检验(若交互效应显著)
如果交互效应显著,可使用rm_contrast()做特定条件组合的两两比较:
# 针对value_1,比较condition在side=左时的差异 contrast_v1 <- rm_contrast( formula = value_1 ~ condition * side | id, data = your_long_data, contrast = list(condition = c(1, -1, 0)), # 对比A与B condition = list(side = "左") ) print(contrast_v1)
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

