用途
实验设计技能用于在数据收集之前做出关键决策:如何将实验单元分配到不同条件、哪些因素保持恒定、哪些因素变化以及以何种结构变化。这些决策决定了数据能够回答什么问题。任何分析都无法在事后挽救一个混杂或伪重复的设计。该技能帮助用户选择设计类型、生成实际的随机化或 DOE 布局(附带可复现脚本),并避免导致数据无法解释的结构性错误。
主要能力
该技能围绕 Fisher 的三项原则展开:
- 随机化:随机分配处理,使已知和未知的混杂因素在期望上保持平衡,从而将比较转化为因果推断。
- 重复:在正确层级上进行独立重复,以估计变异性。最常见的致命错误是伪重复——将同一单元上的重复测量当作独立重复。
- 区组化/局部控制:将相似单元(按批次、日期、地点、窝别)分组,在区组内随机化,从而将干扰变异从误差项中移除。
技能提供决策树,帮助在以下设计类型中选择:完全随机、随机区组、交叉/重复测量、整群随机、析因、部分析因、Plackett-Burman 筛选、响应面(中心复合、Box-Behnken)、拉丁超立方等。
使用方式
安装依赖:
uv pip install "numpy>=1.26" "pandas>=2.0" pyDOE3
pyDOE3 是 pyDOE/pyDOE2 的维护后继版本,提供析因、部分析因、Plackett-Burman、中心复合、Box-Behnken 和拉丁超立方生成器。捆绑脚本对其进行封装,返回以真实因子单位表示、列名明确且运行顺序随机化的设计。
随机化/分配表 — scripts/randomization.py:
from randomization import (
simple_randomization, block_randomization,
stratified_block_randomization, cluster_randomization,
assign_factorial_runs, arm_balance,
)
sched = block_randomization(n=60, arms=["treatment", "control"], seed=42)
sched = stratified_block_randomization({"siteA": 30, "siteB": 30},
arms=["drug", "placebo"], ratio=(2, 1), seed=42)
sched = cluster_randomization(["clinic1", "clinic2", "clinic3", "clinic4"], seed=42)
arm_balance(sched)
sched.to_csv("allocation_schedule.csv", index=False)
DOE 矩阵 — scripts/doe_designs.py:
from doe_designs import (
full_factorial, two_level_factorial, fractional_factorial,
plackett_burman, central_composite, box_behnken, latin_hypercube,
)
factors = {"temp_C": (20, 60), "conc_mM": (1, 10), "pH": (6, 8)}
design = two_level_factorial(factors, seed=42)
many = {f"factor_{i}": (0, 1) for i in range(7)}
design = plackett_burman(many, seed=42)
design = central_composite({"temp_C": (20, 60), "conc_mM": (1, 10)}, seed=42)
design.to_csv("experimental_runs.csv", index=False)
运行顺序默认随机化,以避免因子与时间/漂移混杂。
适用场景
- 规划任何比较实验或试验,决定如何分配单元
- 将受试者/样本随机分配到各组(简单、区组、分层或整群)
- 通过区组化或分层消除干扰变异
- 设计多因子实验:全析因或部分析因、筛选设计
- 在连续因子上优化响应(响应面设计)
- 受试者内/重复测量、交叉、裂区或拉丁方设计
- 整群或分组随机设计(地点、诊所、教室、窝别)
- 决定重复次数和水平,避免伪重复
- 序贯、成组序贯或自适应设计及中期分析
- 布置板/批次并随机化运行顺序以对抗漂移
限制
该技能聚焦于数据收集前的设计决策,不涵盖数据收集后的分析执行(相关技能为 statistical-analysis)。样本量/功效计算由 statistical-power 技能负责。技能中提到的函数、标志或端点可能因安装版本不同而缺失,需查阅已安装版本的官方文档,不得凭空编造 API。技能明确要求:不得捏造结果、参数、标识符、引用或统计量;无法运行或验证的内容应如实说明;推测需标注为推测;版本相关细节可能过时,需对照官方文档确认。涉及费用、共享 GPU/云配额、个人或患者数据以及不可撤销操作时,需先征得用户同意。