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

如何用R实现分层随机化,将数据分为4组(性别/年龄/焦虑度均衡)

用R实现分层随机化分组(基于性别、年龄、焦虑度)

针对你的需求,我们可以通过分层随机化的方式,先把参与者按性别、年龄分层、焦虑度分层组合成同质小组,再在每个小组内随机分配到4个条件组,以此保证组间人口统计学特征尽可能均衡。

步骤1:准备工作与数据预处理

首先加载tidyverse工具包,然后对连续变量(年龄、焦虑度)进行分箱处理——因为分层随机化更适合基于分类变量操作,分箱后能让同一层的参与者在这些指标上更相似:

library(tidyverse)

# 对年龄、焦虑度按分位数分成3层(可根据数据分布调整层数)
daten_strat <- daten_strat %>%
  mutate(
    age_bin = ntile(age, 3),          # 年龄分3层:低/中/高
    anxiety_bin = ntile(anxiety, 3),  # 焦虑度分3层:低/中/高
    # 组合性别、年龄层、焦虑度层为分层标识
    strat_id = paste(gender, age_bin, anxiety_bin, sep = "_")
  )

步骤2:分层随机分配分组

在每个分层内,将参与者随机分配到4个条件组,保证每层内的分配尽可能均匀:

set.seed(123)  # 设置随机种子,让结果可重复
daten_strat <- daten_strat %>%
  group_by(strat_id) %>%
  mutate(
    # 生成重复的1-4序列(匹配当前分层的人数),再随机打乱
    condition_group = sample(rep(1:4, length.out = n()))
  ) %>%
  ungroup()

# 可选:删除中间生成的分层辅助变量
daten_strat <- daten_strat %>% select(-age_bin, -anxiety_bin, -strat_id)

步骤3:验证组间均衡性

分配完成后,检查各组在目标变量上的分布是否均衡:

# 检查性别分布
daten_strat %>%
  count(condition_group, gender) %>%
  pivot_wider(names_from = gender, values_from = n, values_fill = 0)

# 检查年龄、焦虑度的组间均值
daten_strat %>%
  group_by(condition_group) %>%
  summarise(
    avg_age = mean(age),
    avg_anxiety = mean(anxiety)
  )

备选方案:使用blockrand包简化操作

如果你想更便捷地实现分层区组随机化,可以用blockrand包:

library(blockrand)

# 先创建分层标识
daten_strat$strat_id <- with(daten_strat, paste(gender, ntile(age,3), ntile(anxiety,3), sep="_"))

# 执行分层区组随机分配
set.seed(123)
assign_result <- blockrand(
  n = nrow(daten_strat),
  num.levels = 4,          # 4个条件组
  strata = daten_strat$strat_id,  # 分层依据
  block.sizes = 4          # 每个区组包含4个参与者,对应4个组各1人
)

# 合并分配结果到原数据
daten_strat <- bind_cols(daten_strat, assign_result %>% select(treatment))

说明:分箱的层数可以根据你的数据分布调整(比如改成4层),核心是让同一分层内的参与者特征尽可能相近,这样随机分配后的组间差异会被最小化。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 11:01:33