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

已分组受试者交叉设计的等组随机化实现(R语言)

解决交叉设计中剩余组排列均等分配的R方案

问题核心

你需要给每组20名受试者分配剩余3组的所有全排列,且每种排列的人数尽可能均等(20不能被6整除,所以部分排列多1人),而不是单个随机选组——原代码的问题在于只随机选单次试验的组,没法保证完整排列的均衡性。

实现思路

  1. 对每个初始组,生成剩余3组的所有6种全排列;
  2. 计算每种排列的重复次数,凑够20名受试者(20=6×3+2,所以2种排列各4人,4种各3人);
  3. 随机打乱排列后分配给该组受试者;
  4. 合并所有组的结果。

完整代码

# 安装并加载生成排列的gtools包
if (!require(gtools)) {
  install.packages("gtools")
  library(gtools)
}

# 按初始分组拆分数据
group_list <- split(crossover, crossover$Assigned.Arm.Index)

# 逐个处理每个初始组
for (arm in names(group_list)) {
  current_group <- group_list[[arm]]
  n_subjects <- nrow(current_group)
  
  # 获取当前组之外的所有试验组
  remaining_arms <- setdiff(1:4, as.integer(arm))
  
  # 生成剩余组的所有全排列(共6种)
  permutations_df <- as.data.frame(permutations(n=3, r=3, v=remaining_arms))
  colnames(permutations_df) <- c("Trial_2", "Trial_3", "Trial_4")
  
  # 计算每种排列的重复次数:基础次数+余数补充
  base_count <- n_subjects %/% 6
  extra_count <- n_subjects %% 6
  
  # 生成重复后的排列:前extra_count种多1次
  repeated_perms <- rbind(
    permutations_df[rep(1:extra_count, each=base_count+1), ],
    permutations_df[rep((extra_count+1):6, each=base_count), ]
  )
  
  # 随机打乱排列,保证分配随机
  repeated_perms <- repeated_perms[sample(nrow(repeated_perms)), ]
  
  # 把排列赋值给当前组的后续试验列
  current_group[, c("Trial_2", "Trial_3", "Trial_4")] <- repeated_perms
  
  # 更新分组数据
  group_list[[arm]] <- current_group
}

# 合并所有组回到原数据框
crossover <- do.call(rbind, group_list)
rownames(crossover) <- NULL

代码解释

  • permutations(3,3, remaining_arms):生成剩余3组的所有6种排列,比如初始组1的话,就是2、3、4的所有顺序组合;
  • 重复次数计算:20除以6得3次基础重复,余2,所以前2种排列各多1次(共4次),刚好凑够20人;
  • sample(nrow(repeated_perms)):打乱排列顺序,避免固定顺序分配的偏差;
  • 拆分-处理-合并的逻辑:保证每个初始组独立处理,不互相干扰。

关于你提到的sample(rep(1:6,4), replace=FALSE)

这个代码的逻辑是把6种排列编号(1-6)每种重复4次,总共24个样本,再随机打乱——适合每组24人的情况,但你的每组是20人,所以需要调整重复次数(就是上面代码里的base_count和extra_count逻辑),直接用的话会多4个样本,不符合你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 11:52:54