# 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 回上一步" - 假设二阶响应面就够(强非线性体系如玻璃形成区) —— 响应面失配时要看残差,可能需要分段建模或机理模型