You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在R中对有序数据执行Friedman检验时遭遇「非无重复完全区组设计」错误的技术求助

解决Friedman检验报错:not an unreplicated complete block design

这个错误的核心原因是你的数据不符合Friedman检验的前提要求:Friedman检验需要的是无重复的完全区组设计——也就是说,每个区组(这里是你的参与者ID vectemp)在每个处理水平(时间点 time1 的每个水平)下,只能有1条观测记录。你的数据里肯定存在某个参与者在同一个时间点下有多个loameasure的记录,导致检验无法运行。

第一步:定位重复的记录

先检查哪些参与者在同一时间点有重复观测,你可以用以下代码:

方法1:用base R查看频次表

# 生成每个参与者-时间点组合的观测数表格
freq_table <- table(selt$vectemp, selt$time1)
# 筛选出观测数大于1的组合
freq_table[freq_table > 1]

方法2:用dplyr更直观地查看重复行

library(dplyr)
selt %>%
  count(vectemp, time1) %>%  # 统计每个组合的行数
  filter(n > 1)  # 只显示重复的组合

运行后你就能明确看到哪些参与者在哪个时间点有多余的记录。

第二步:根据情况处理数据

找到重复原因后,你可以选择以下方案:

  • 如果是数据录入错误:直接删除或修正重复的记录,确保每个vectemp+time1组合只有1条数据。
  • 如果是同一参与者在同一时间点有多次测量:对于有序数据loameasure,你可以用中位数(适合有序数据的汇总统计)来合并重复记录,示例代码:
# 按参与者和时间点分组,取loameasure的中位数
selt_clean <- selt %>%
  group_by(vectemp, time1) %>%
  summarise(loameasure = median(as.numeric(loameasure)), .groups = "drop")

# 把loameasure转回有序因子(如果需要)
selt_clean$loameasure <- factor(selt_clean$loameasure, ordered = TRUE)

第三步:重新运行Friedman检验

处理完重复数据后,再执行你的检验代码:

friedman_test(formula = loameasure ~ time1 | vectemp, data = selt_clean)

另外补充一点:你的loameasure是有序数据,把它设为有序因子(factor(..., ordered = TRUE))会更合适,不过Friedman检验本身对有序/名义因子的兼容性都不错,核心还是要先解决区组内重复的问题。

内容的提问来源于stack exchange,提问作者Sophie Dewil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 10:02:40