# DoE(实验设计)选型

何时启动:**叶子节点类型 = 优化型**。典型场景:多个工艺 / 配方变量同时影响输出,要找主效应、二阶交互、或最优组合。

## 选型导航

| 你想要 | 因素数 | 推荐设计 | 实验次数 | 后续分析 |
|---|---|---|---|---|
| 看哪些因素是主效应(筛选) | 6-15 | Plackett-Burman | k+4 ~ 4(k+1)/4 | t 检验主效应,接 statsmodels OLS |
| 看主效应 + 二阶交互 | 3-7 | 部分因子 2^(k-p) / 全因子 2^k | 8-32 | ANOVA + 交互项 |
| 找最优响应面 | 2-5 | 中心复合(CCD)/ Box-Behnken | 15-30 | 二阶响应面 + 等高线 |
| 配方约束(组分和 = 1) | 2-5 | 混料设计(Simplex / Extreme-Vertices) | 视约束而定 | Scheffé 多项式 |
| 实验昂贵 / 序贯优化 | 不固定 | 序贯单纯形 / 贝叶斯优化 | 视收敛而定 | scipy.optimize / scikit-optimize / optuna |

## 各设计速查

### Plackett-Burman(筛选)

- 用法:把"可能有影响的"6-15 个因素一起测,8-12 次实验筛出主效应
- 假设:**只看主效应,忽略交互**(因素 > 7 时全因子代价爆炸,先筛主效应再深入)
- 输出:每个因素的效应大小 + p value,p < 0.05 的进下一轮
- 工具:`pyDOE2.pbdesign` / `statsmodels` OLS

### 全因子 / 部分因子(2^k)

- 用法:每个因素 2 水平(高 / 低),全组合(全因子)或挑一部分(部分因子,牺牲高阶交互的分辨率)
- 适合 k ≤ 5 全因子(32 次),k ≤ 8 部分因子
- 输出:主效应 + 所有二阶交互 + ANOVA p value
- 工具:`pyDOE2.fullfact` / `pyDOE2.fracfact`

### 中心复合 / Box-Behnken(响应面)

- 用法:每因素 3-5 水平(含中心点 + 轴点),拟合二阶多项式响应面
- 假设:输出对自变量光滑可微,二阶展开够用(强非线性场景不适用,要看残差图)
- 输出:`y = β0 + Σβi·xi + Σβii·xi² + Σβij·xi·xj` 拟合系数 + R² + 等高线最优点
- 工具:`pyDOE2.ccdesign` / `pyDOE2.bbdesign` → sklearn / statsmodels 拟合 → matplotlib 等高线

### 混料设计(Mixture)

- 用法:配方比例之和 = 1(水泥 + 矿粉 + 粉煤灰 = 100%),自变量受约束
- 不适用全因子(违反约束)
- 输出:Scheffé 多项式 `y = a·x1 + b·x2 + c·x3 + d·x1·x2 + ...`
- 工具:`pyDOE2` 不直接支持混料,用 R `mixexp` 或自己生成单纯形格点 / Extreme-Vertices 算法

### 序贯优化(贝叶斯 / 单纯形)

- 用法:实验昂贵 / 不能并行 / 不知道因素范围时,边做边学
- 输出:每轮推荐下一个实验点(EI / UCB 等准则)
- 工具:`scikit-optimize` / `optuna` / `Ax`(Meta)

## 工作流(analyze 阶段产出什么)

在 `analysis.md` §5 对应叶子小节里写:

```
## 叶子 X: 配方因素对 28d 抗压强度的影响 — 优化型

### 实验设计

- 设计类型: Plackett-Burman 筛选(候选因素 7 个)
- 因素表:
  | 编号 | 因素 | 低水平 | 高水平 | 单位 |
  |---|---|---|---|---|
  | A | 矿粉掺量 | 10 | 30 | % |
  | B | 粉煤灰掺量 | 5 | 25 | % |
  | C | 水灰比 | 0.30 | 0.40 | - |
  | D | 减水剂掺量 | 0.5 | 1.5 | % |
  | E | 养护温度 | 20 | 35 | °C |
  | F | 比表面积 | 350 | 420 | m²/kg |
  | G | 石膏掺量 | 3 | 6 | % |
- 实验次数: 12(11 因素 PB,空跑 4 个虚拟列控制 II 类错误)
- 中心点: 3 次重复测组内方差
- 总计: 15 次实验,GB/T 17671 标准养护测 28d 抗压

### 后续分析

- 接续能力: 跑 OLS 回归 + ANOVA + 主效应 Pareto 图(由 LLM 按 skill 清单匹配,stats_ml 合适)
- 判停: 找到 2-3 个 p < 0.05 的主效应,进入下一轮响应面 DoE(CCD)
```

**不要直接生成具体随机表 / 实验点位** —— analyze 只规划设计类型 + 因素表,具体生成实验点位由下游(stats_ml 用 pyDOE2)跑。

## 反模式

- 因素全选 + 全因子(k=10 → 1024 次实验,做不完) —— 用 PB 筛选先
- 不留中心点(无法估实验误差,p value 全不可靠) —— 至少 3 个中心点重复
- 设计选错:配方混料用全因子 —— 比例约束破坏全因子假设
- 直接在 analyze 跑设计代码 —— analyze 只规划设计类型 + 因素 + 范围,生成实验表交下游
- 输出范围超出物理可行(配方比例为负 / 温度超过设备能力)—— 因素范围写在表里时要 sanity check
- 没标"判停条件"(跑完不知道接下来干啥) —— 每个 DoE 都要标"如果结果 X 接下一步 Y,如果 Z 回上一步"
- 假设二阶响应面就够(强非线性体系如玻璃形成区) —— 响应面失配时要看残差,可能需要分段建模或机理模型
