ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

实验随机分组避坑指南:从分配隐藏到意向性分析

实验随机分组避坑指南:从分配隐藏到意向性分析

做实验最怕什么?不是数据难收,而是实验随机分组那一步埋了雷。很多人把随机分组理解成“抓阄分堆”,觉得只要不是按顺序分、不是按领导拍脑袋分,就算随机了。真到分析数据时才发现,组间基线差得离谱,入组人员提前知道下一个该分到哪组,脱落原因也说不清,最后结论怎么解释都别扭。实验随机分组本质上是一套可复现、可审计、可隐藏的分配机制,它决定了后续因果推断的地基稳不稳。它适合谁?做A/B测试的产品实验者、做用户研究的用研同学、做临床前或动物实验的研究者、做农业试验和心理学实验的从业者,甚至做门店运营策略对比的团队,只要涉及“把实验单元分到不同处理组”,这些概念都用得上。下面我按实际落地顺序,把随机分组里最容易混淆、最容易踩坑的概念拆开讲。

1. 随机分组不是“随便分”:先把概念边界划清

1.1 随机分组与随机抽样,别再把两件事混着说

随机抽样解决的是“从总体里选谁进研究”,随机分组解决的是“已经进研究的人分到哪个处理组”。这两个动作经常被口语化地都叫“随机”,但目标完全不同。随机抽样追求样本对总体的代表性,比如从一万名用户里抽一千名做实验;随机分组追求组间在已知和未知因素上的期望可比,比如把这一千名用户分到新策略组和旧策略组。一个实验可以随机抽样但不随机分组,也可以随机分组但样本是便利样本。前者影响外推性,后者影响内部有效性。我见过不少项目在报告里写“随机选取用户并随机分组”,实际抽样是随便找的活跃用户,分组是按注册时间前后切一半,这种写法会把读者带偏。更稳妥的表达是分别写清楚抽样框、入组标准、分组方法和分配隐藏方式。生活化一点说,随机抽样是“从一筐苹果里随机拿几个出来尝”,随机分组是“把拿出来的苹果随机分到两个盘子里做不同处理”。两个盘子里的苹果期望上差不多,但不代表这筐苹果能代表整个果园。做实验设计时,先问自己缺的是代表性还是可比性,再决定哪一步需要随机化。

1.2 随机化到底在解决哪几类偏差

随机分组最核心的价值,是把处理分配与潜在混杂因素“断开”。如果分组依赖入组顺序、医生偏好、用户活跃度、门店位置,那么处理组和对照组在這些因素上天然不同,后续看到的差异就不能全算到处理头上。随机化让已知混杂因素和未知混杂因素在期望意义上平衡,注意是“期望意义上”,不是小样本里一定一模一样。它主要压制三类问题:一是选择偏倚,入组者有意无意把预后好的人分到新组;二是时间趋势,比如先入组的都是轻症,后入组的都是重症,按顺序分组会把时间效应混进处理效应;三是混杂偏倚,某些未测量的因素同时影响分组和处理结果。随机化不能解决测量偏倚,也不能解决脱落偏倚,那些要靠盲法、客观终点和随访管理。还有一个常见误解:随机化能保证基线平衡。小样本下,简单随机分组出现基线不平衡是正常波动,不是随机化失败。真正要警惕的是分组过程可预测、分配隐藏没做好,或者随机序列生成后被修改。我的经验是,方案里要把“随机化解决什么、不解决什么”写清楚,后面分析时才不会一出问题就怀疑分组,或者一出不平衡就想着重新分。

1.3 分配隐藏、盲法和可重复性,是随机分组的三个护法

随机序列生成得再漂亮,如果入组人员能提前知道下一个分配,随机化就形同虚设。分配隐藏指的是把随机分配序列在入组完成前藏起来,常见做法包括中心随机系统、按顺序编号的不透明密封信封、由不参与入组的人员保管序列文件。注意分配隐藏和盲法是两件事:分配隐藏防的是入组阶段的选择偏倚,盲法防的是干预实施和结果测量阶段的偏倚。开放标签实验可以没有盲法,但不能没有分配隐藏。可重复性则要求随机种子、随机化算法、块大小、分层因素、分组比例都记录在案,必要时能复现序列。我踩过的坑是早期用表格软件拉随机数,拉完没存种子,后来有人质疑某几个受试者分组不合理,根本没法复算。现在我会要求随机序列文件只读存档,生成人和入组人分离,任何修改留痕。还有一个细节:随机种子不要用“123456”这种默认值,也不要用项目名拼音,容易被猜到;但也不建议故弄玄虚,重点是记录和权限管理,而不是把种子当密码。随机分组的概念边界划清后,选哪种随机化方式才有讨论基础。

2. 常见随机分组方式与选型:简单、区组、分层、整群怎么挑

2.1 简单随机分组:最直白,但小样本容易“分歪”

简单随机分组就是每个实验单元以固定概率独立地分到各组,比如两组1:1,就像给每个人抛一枚公平硬币。实现方式可以是随机数字表、软件生成的随机序列,或者物理抽签。它的优点是逻辑简单、分配概率透明、分析模型也容易写。缺点是小样本时组间人数可能明显不等,基线也可能不平衡。比如样本量40、两组1:1,完全可能出现23比17,某个关键变量上两组差一截。这不是操作错误,而是随机波动。简单随机更适合样本量较大、基线因素不多、分组比例要求不那么严格的场景。要是样本量只有几十例,又有关键预后因素,简单随机往往不够用。我通常会在方案里写明“简单随机,1:1,样本量预计N”,并预设如果出现人数不均衡不重新分组,分析时按意向性处理。还有一个实操细节:简单随机序列生成后,要按入组顺序对应分配,不能生成一堆“A/B”后让入组人员挑着用。随机化的可审计性比“看起来随机”更重要。若项目对组间人数均衡很敏感,直接考虑区组随机,别硬扛简单随机的小样本波动。

2.2 区组随机分组:让每个小块内部保持均衡

区组随机分组先把实验单元分成若干个区组,在每个区组内按相同比例随机分配。比如两组1:1,块大小取4,每个块里固定2个A、2个B,块内顺序随机。这样无论做到哪个阶段,累计人数都不会偏得太多。块大小怎么选?常见是4、6、8,块太小容易预测,块太大又失去均衡优势。固定块大小的问题是,一旦入组人员知道块大小,做到块尾时可能猜出最后一个分配。更稳妥的做法是使用变化块大小,比如从4、6、8里随机选,且块大小序列也要隐藏。区组随机的优点是组间人数均衡、时间趋势影响小;缺点是分析时如果忽略区组,某些情况下方差估计不够精确,不过实际报告里写清楚区组结构即可。我见过一个模拟项目X,入组人员把块大小写在公告板上,做到第4例时就能推断后面两例的分配,结果入组节奏明显被影响。后来改成中心随机加变化块,问题才消失。区组随机的注意事项:块大小不能公开;每个区组内分配比例要一致;区组序列和随机种子一起存档;如果中途停止,未完成的区组要记录。别小看这些记录,后面写报告和复核时都用得上。

2.3 分层随机分组:按关键预后因素先分层,再层内随机

分层随机分组是先按几个关键预后因素把实验单元分成若干层,比如按病情严重程度和年龄组分层,然后在每个层内做随机分组。它的目标是让这些关键因素在组间更均衡,尤其适合样本量不大、基线因素对结果影响很大的实验。分层因素怎么选?通常选3到4个以内,每个因素2到3个水平,别把能找到的变量都塞进去。层数太多会导致每层样本很少,随机化碎片化,最后有些层甚至只有一两个人,均衡优势反而发挥不出来。经验规则是每个层内至少能容纳一个完整区组,或者每层样本量不要太寒酸。分层随机的实现可以是层内简单随机,也可以是层内区组随机。分析时要考虑分层因素,但不要因为基线P值不好看就临时加层。分层因素必须在方案里预设,不能看数据后调整。还有一个坑:分层随机对连续变量要先做合理分组,比如年龄按18到30、31到45、46以上,分组切点要有临床或业务意义,不能为了凑层数硬切。我一般会画一张分层因素表,列出水平、预期样本量、层内随机方法,再让入组人员按表执行。分层随机不是越多越好,关键是抓住真正影响结果的少数变量。

2.4 整群随机分组:按群分,样本量要乘设计效应

整群随机分组不是把个体逐个分到各组,而是把整个群组分到不同处理,比如按班级、门店、社区、班组分组。它适合干预无法在个体层面拆开的场景,比如培训方案、门店陈列策略、班级教学法。优点是实施方便、减少组间污染;缺点是群内个体往往相似,信息量比独立个体少,样本量要放大。放大多少用设计效应估算:DE = 1 + (m - 1) × ICC,其中m是群平均大小,ICC是群内相关系数。举个例子,群平均20人,ICC按0.05算,DE = 1 + 19×0.05 = 1.95,意味着样本量差不多要翻倍。如果ICC更高,放大更明显。整群随机还要注意群数量不能太少,群数少时组间基线不平衡风险高,分析方法也要考虑群效应。我见过一个门店实验只分了6家店,三家新策略三家旧策略,结果其中一家店在商圈位置特别好,最后根本说不清策略效果。整群随机不是“分群就完事”,群的选择、群的数量、群内样本量都要在方案里算清楚。若群数很少,可以考虑匹配或分层整群随机,但分析复杂度会上升。

2.5 交叉设计与析因设计:随机化顺序和多因素组合的特别处理

交叉设计是同一个实验单元先后接受多种处理,随机化的是处理顺序,比如AB顺序和BA顺序随机。它适合慢性稳定状态、短期干预、洗脱期可控的场景。关键是洗脱期要足够长,避免前一阶段残留效应;还要考虑顺序效应和携带效应,分析时不能简单把两阶段数据合并。析因设计是同时研究两个或多个因素及其交互作用,比如因素A有和无、因素B有和无,随机分配到四个组合。它的优点是一次实验能回答多个问题,缺点是交互作用解释要谨慎,样本量按交互效应估算时往往更大。这两种设计对随机分组的要求更高:交叉设计要随机顺序并隐藏顺序,析因设计要随机组合并保证各组合人数均衡。我的建议是,如果团队对交叉设计的携带效应没有把握,宁可做平行组设计,别为了省样本硬上交叉。析因设计则要提前写清楚主效应和交互作用的检验顺序,避免事后挑结果。选型时可以用一张表把几种方式摆在一起看,别凭感觉拍板。

随机化方式适用场景主要优点主要风险实操提醒
简单随机大样本、基线因素少简单透明、分析直接小样本人数和基线易不平衡记录随机种子,不重新分组
区组随机需要组间人数均衡阶段性均衡、抗时间趋势块大小泄露可预测用变化块,隐藏块大小
分层随机关键预后因素少而强关键因素组间更均衡层太多导致碎片化分层因素预设,每层样本别太少
整群随机干预按群实施实施方便、减少污染设计效应放大样本量群数不能太少,算ICC
交叉设计稳定状态、短期干预个体自身对照、效率高携带效应和顺序效应洗脱期足够,随机顺序
析因设计多因素及交互作用一次实验多问题样本量和解释复杂预设主效应和交互检验

选型原则其实不复杂:先看干预能否个体分配,不能就整群;再看样本量和关键基线因素,样本小且因素强就分层加区组;再看是否需要个体自身对照,能交叉且无携带效应才考虑交叉;最后看是否要研究交互作用,再上析因。别为了方法高级而高级,随机分组方式越复杂,执行和记录成本越高。能用一个区组随机解决的问题,不必上三层分层加整群。真正影响结论的是分配隐藏、执行质量和分析预设,而不是名字听起来多专业。

3. 从方案到落地:随机分组实操流程与参数计算

3.1 先算样本量和分组比例,别先生成随机序列

随机分组实操的第一步不是打开软件拉随机数,而是把样本量、分组比例、检验效能和脱落率算清楚。两组均数比较的近似公式是:每组样本量 n ≈ 2 × (Zα/2 + Zβ)^2 × σ^2 / Δ^2。假设某模拟项目X的主要终点是连续变量,预期组间差值Δ=0.5,标准差σ=1,双侧α=0.05,效能80%,Zα/2取1.96,Zβ取0.84,代入得到 n ≈ 2 × (1.96+0.84)^2 × 1^2 / 0.5^2 = 2 × 7.84 × 4 ≈ 62.7,也就是每组约63例,两组约126例。如果预计脱落率15%,则每组入组约63 / 0.85 ≈ 75例,两组约150例。这个计算过程要写进方案,不能只写“计划入组150例”。分组比例也要提前定,常见1:1,也有2:1或1:1:1。比例越不均衡,总样本量越大,但有时为了让更多受试者接受新处理会选2:1。比例一旦定了,随机序列和区组大小都要按比例来,不能中途改。还有一点,样本量估算的参数要有依据,比如Δ来自预实验或业务最小可检测效应,σ来自历史数据,不能拍脑袋。我见过方案里写“预计中等效应”,评审时被问得答不上来。把参数来源、计算工具、脱落假设写清楚,后面随机分组才有根。

3.2 生成随机序列:种子、块大小、分层表一个都不能少

随机序列生成要遵循“先设计、后生成、再锁定”的顺序。先确定分组比例、区组大小、分层因素,再生成序列,生成后存档并锁定,入组人员只能按顺序取号。以两组1:1、变化块大小为例,可以用一个简单脚本实现。下面代码只做演示,实际项目要把种子、块大小列表、分层因素写进配置文件。

import random def block_random_sequence(n_per_group, block_sizes, seed): rng = random.Random(seed) seq = [] a_left, b_left = n_per_group, n_per_group while a_left > 0 or b_left > 0: # 过滤掉超出剩余数量的块 feasible = [b for b in block_sizes if b // 2 <= min(a_left, b_left)] if not feasible: break block_size = rng.choice(feasible) half = block_size // 2 block = ['A'] * half + ['B'] * half rng.shuffle(block) seq.extend(block) a_left -= half b_left -= half return seq seq = block_random_sequence(n_per_group=75, block_sizes=[4, 6, 8], seed=20240517) print(len(seq), seq[:20])

这段代码的关键点不是代码本身,而是三个习惯:第一,随机种子必须记录,最好写进随机化文件;第二,块大小用列表随机选择,避免固定块被预测;第三,序列生成后要核对每组人数和总人数。分层随机则要每个层单独生成序列,层内再按区组随机。实操中建议把序列导出为带编号的分配表,编号按入组顺序排列,分配结果放在单独文件里,由不参与入组的人保管。若用中心随机系统,则要测试系统在并发入组时不会重复分配。我踩过的坑是两个人同时打开同一个表格取号,差点把同一个编号分给两个受试者。后来改成一人取号、一人登记,或者用带锁的在线表单,才杜绝。随机序列是随机分组的核心资产,权限和备份要比普通数据更严。

3.3 分配隐藏和入组登记:把“下一个是谁”藏住

分配隐藏的落地方式要看项目规模。小项目可以用按顺序编号、不透明、密封的信封,信封外只写编号,内页写分组,入组完成后才能拆。信封要一次性使用,拆封后记录拆封人、时间、受试者编号。中等规模项目可以用中心随机,入组人员登录系统录入基线信息,系统返回分配结果,序列由系统后台管理。无论哪种方式,都要做到“先入组、后揭晓”,不能先看分组再决定是否入组。入组登记表要记录筛选号、入组号、基线关键变量、分配结果、入组时间、操作人。别小看这些字段,后面核对随机化执行质量全靠它。还有一个常见漏洞:入组人员同时负责生成序列和保管信封,这等于没有隐藏。理想状态是生成序列的人、保管分配的人、入组评估的人尽量分开;人手不够时,至少做到序列文件加密、信封封口编号、拆封留痕。盲法实验还要设计揭盲流程,什么情况下紧急揭盲、谁批准、揭盲后是否继续随访,都要提前写。分配隐藏做不好,后面统计方法再漂亮也救不回来。

3.4 实施与记录:随机化检查不是走过场

随机分组实施阶段要有简版SOP:入组前核对筛选号;按顺序取分配号;录入基线信息;获取分配结果;发放干预;记录实际接受情况。每天或每周做一次随机化检查,看编号是否连续、每组人数是否在预期范围、分层因素是否录错、是否有拆封异常。这里要强调,随机化检查不是拿基线变量做显著性检验,挑P值小的变量怀疑随机化失败。正确做法是看标准化差异、看人数分布、看编号连续性、看分配隐藏记录。基线P值受样本量影响,小样本不显著很正常,大样本微小差异也可能显著,不能作为重新分组的理由。我一般在方案里预设:不因基线不平衡重新分组;如发现分组错误,按预设规则处理并记录,不擅自更改随机序列。还有一个实操心得:把随机化文件和主数据分开存放,随机化文件只读,主数据里只存分配号不存分组,分析前再合并。这样能减少人为干扰。实施阶段多花半天做SOP和培训,比后面花两周解释分组质疑划算得多。

4. 常见问题与排查技巧实录:随机分组翻车现场

4.1 随机后基线不平衡,能不能重新分组

这是问得最多的问题。答案通常是不能。随机分组后的基线不平衡,在小样本里很常见,重新分组会破坏随机化,引入选择偏倚,而且“看起来平衡”的分组不一定更好。正确做法是先排查技术错误:随机序列是否被修改、分配隐藏是否失效、分层因素是否录错、入组编号是否错位。如果这些都没问题,就把不平衡当作随机波动处理。分析时可以预设协变量调整,比如把关键基线变量纳入模型,但调整变量要在方案里预先指定,不能看数据后挑。若不平衡非常严重且样本量很小,可以在报告中如实描述,并把结论限定在探索性范围。我见过一个团队因为两组年龄差了几岁,硬把已入组的人重新洗牌,结果后面所有分析都失去了随机化基础。更稳妥的做法是实验前做好分层或区组,实验后不折腾。还有一点,不要用基线P值筛选变量再调整,这种“数据驱动调整”会让区间估计偏窄。随机分组不是保证每组一模一样,而是保证分配机制与潜在结果无关。理解这一点,很多焦虑会少一半。

4.2 随机序列泄露和块大小可预测,怎么发现怎么补救

随机序列泄露的迹象包括:入组人员能准确预测下一个分配;某些编号段的分组模式过于规律;块尾分配被提前知晓;入组节奏在特定编号突然变化。原因可能是块大小固定且公开、信封被透光、随机表放在公共目录、系统权限过大。补救要从流程入手:改成变化块大小、重新生成后续序列并锁定、收紧文件权限、把分配隐藏交给不参与入组的人。如果泄露已经发生,要评估影响范围,记录在案,分析时做敏感性分析,而不是假装没发生。我遇到过一次,入组人员把块大小4写在便签上,做到每个块最后两例时就能猜出分配,虽然最后数据看起来还行,但报告里必须说明这个局限。预防办法不复杂:块大小不公开;序列文件只读;信封编号连续且不透明;中心随机系统设置并发锁;入组人员培训时明确“不预测、不拆封、不复制”。随机分组最怕的就是“大家都知道下一个是谁”,这比样本量小更伤内部有效性。

4.3 分层碎片化、整群样本不足、脱落偏倚,分别怎么处理

分层碎片化通常是因为分层因素太多或切点太细,导致某些层只有几例。处理办法是实验前控制分层因素数量,合并临床或业务意义相近的水平,保证每层有足够样本。如果已经发生,分析时可以把稀疏层合并,但合并规则要预设并说明。整群样本不足常见于群数太少,导致组间基线不平衡和效能不足。处理办法是增加群数、增大群内样本、考虑匹配或分层整群,分析时用考虑群效应的模型。脱落偏倚则要在设计阶段提高随访质量,分析阶段用意向性分析作为主分析,并做敏感性分析。下面这张速查表可以放在项目文档里,出问题时按行排查。

现象常见原因排查动作处理建议
两组人数明显不等简单随机波动、区组未执行核对序列和入组编号不重新分组,按计划分析
基线某变量差得多小样本波动、分层遗漏检查分层录入和隐藏流程预设协变量调整,如实报告
下一个分配可被预测块大小固定且公开检查块大小知情范围改变化块,重新锁定序列
某些层只有几例分层因素过多、切点过细统计各层样本量预设合并规则,减少分层因素
整群实验效能不足群数少、ICC高复核设计效应计算增加群数或群内样本,考虑匹配
脱落后组间差异变大脱落与处理相关比较脱落者基线意向性分析为主,敏感性分析

4.4 随机化质量检查清单:别用P值挑基线

随机化质量检查我通常看五件事:分配序列是否可复现;分配隐藏是否全程有效;入组编号是否连续且与分配表一致;各组人数和分层人数是否符合计划;是否有非计划修改和揭盲记录。基线比较用标准化差异更合适,一般看关键变量的标准化差异是否在可接受范围,而不是逐项做P值检验。标准化差异受样本量影响小,更适合判断平衡程度。若发现异常,先查流程,再谈统计。还有一个小技巧:把随机化检查做成一张表,每次核查打勾,附上核查人和日期。这样项目交接时不会断档。别把随机化检查做成“找茬大会”,它的目的是确认机制运行正常,不是证明每组基线完全一样。随机分组是设计阶段的工程,不是分析阶段的补救。把这些检查做在前头,后面写报告会轻松很多。

5. 随机分组之后的边界:分析不能倒过来改分组

5.1 意向性分析与符合方案分析,主次别弄反

随机分组后,分析阶段最重要的边界是:按随机分配分析,而不是按实际接受分析。意向性分析把所有人都按最初分配组纳入,哪怕有人没接受干预、换了组、脱落了。它保守,但能保住随机化的因果解释。符合方案分析只分析严格遵守方案的人,能反映干预在理想条件下的效果,但容易引入选择偏倚,因为是否遵守方案可能与预后相关。实际报告里通常以意向性分析为主,符合方案分析作为敏感性分析。最忌讳的是看到意向性结果不显著,就换成符合方案分析找显著,这不是分析策略,是结果导向。交叉设计还要注意按顺序和分析阶段处理,不能把两阶段简单合并。整群随机则要使用考虑群效应的模型,不能把群内个体当独立样本。我的经验是,分析计划要在揭盲前定稿,主分析、敏感性分析、亚组分析都写清楚。随机分组给了你一个可信的起点,分析阶段别把它拆了。

5.2 协变量调整和多重比较:预设与克制

协变量调整在随机实验里是合理的,尤其当关键变量与结局强相关时,调整能提高效能。但调整变量要预设,不能看基线P值挑。通常调整分层因素和少数强预后因素即可,别把十几个变量一股脑塞进模型。多重比较也要克制,主要终点、次要终点、亚组分析要有层级,不能把所有指标都做一遍然后挑显著的讲。随机分组保证了组间期望可比,但不会自动校正多重检验。我一般建议方案里写清楚主要终点只有一个或少数几个,次要终点用描述性解释,亚组分析标注探索性。还有一点,随机化不是分析方法的替代品,不能因为随机了就忽略模型假设、缺失数据和群效应。随机分组是设计层面的因果工具,分析层面还要老老实实处理数据问题。把这两层分开,报告会更经得起推敲。

我在实际项目里最深的体会是,随机分组的概念不难,难的是把“随机种子、块大小、分层因素、分配隐藏”四件事写进方案并执行到位。很多争议不是统计方法引起的,而是分组过程说不清。下次开第一例入组前,先别急着拉随机数,把随机化文件权限、编号规则、拆封记录和异常处理定下来,后面会省很多解释成本。这个内容后续还可以扩展成一张随机化SOP模板和一份常见问题核查表,谁要落地,直接按项目场景改字段就能用。

返回列表