4. PP/EPDM/滑石粉三元体系部分因子筛选设计
为什么这里要用部分因子设计
PP/EPDM/滑石粉三元体系里,候选因素往往不止两三个:PP基料熔指、EPDM含量、滑石粉粒径、滑石粉填充量、相容剂/偶联剂用量。若做2^5全因子需32次以上,前期筛选阶段成本过高。2^(5-2)部分因子设计只需8次试验,代价是主效应与部分二阶交互发生混杂(Resolution III),因此它的定位是粗筛:先找出影响熔融指数(MFR)和弯曲模量最显著的三个因素,再交给后续响应面或全因子做精细优化。
因素与水平定义(示例参数)
| 代号 | 因素 | 低水平(-1) | 高水平(+1) |
|---|---|---|---|
| A | PP基料熔指 | 8 g/10min | 25 g/10min |
| B | EPDM含量 | 8 phr | 20 phr |
| C | 滑石粉粒径(D50) | 2 μm | 10 μm |
| D | 滑石粉填充量 | 10 phr | 30 phr |
| E | 相容剂(PP-g-MAH)用量 | 0 phr | 4 phr |
响应:MFR(230℃/2.16kg,目标偏高利于注塑)与弯曲模量(目标偏高利于刚性)。
生成2^(5-2)设计与混杂结构
取基本因子A、B、C,用生成关系 D=AB、E=AC,得到Resolution III设计,定义关系为 I=ABD=ACE=BCDE。这意味着每个主效应与两个二阶交互混杂,例如 A 与 BD、CE 混杂。下面用Python生成设计矩阵并计算别名结构,便于判断哪些结论可信。
import numpy as np
import pandas as pd
from itertools import product
# 基本因子 A,B,C 的 2^3 全因子
base = pd.DataFrame(list(product([-1, 1], repeat=3)), columns=['A', 'B', 'C'])
# 生成关系: D = A*B, E = A*C
base['D'] = base['A'] * base['B']
base['E'] = base['A'] * base['C']
design = base[['A', 'B', 'C', 'D', 'E']].copy()
design.index = [f'R{i+1}' for i in range(len(design))]
print(design)
# 别名结构: 用 2^5 全因子符号运算求混杂组
def alias_groups():
factors = ['A', 'B', 'C', 'D', 'E']
# 定义关系 I = ABD = ACE = BCDE
generators = ['ABD', 'ACE', 'BCDE']
def mul(w1, w2):
s = set(w1) ^ set(w2) # 对称差即 GF(2) 乘法
return ''.join(sorted(s))
words = [''] + generators
# 生成完整别名集合
full = set()
for w in words:
full.add(w)
# 每个主效应与生成元相乘得到混杂伙伴
groups = {}
for f in factors:
partners = set()
for w in words:
partners.add(mul(f, w))
groups[f] = sorted(p for p in partners if p)
return groups
for k, v in alias_groups().items():
print(f'{k} 混杂于: {v}')
运行后可看到 A 的混杂伙伴包含 BD、CE,B 混杂于 AD、CDE 等。筛选时只把主效应显著且混杂伙伴中无其他强主效应的因素列为候选关键因素,避免把交互误判为主效应。
试验执行与响应记录
按8组配方在双螺杆挤出造粒,注塑标准样条后测MFR与弯曲模量。下表为教学示例数据(非实测),用于演示筛选流程。
| 试验 | A | B | C | D | E | MFR (g/10min) | 弯曲模量 (MPa) |
|---|---|---|---|---|---|---|---|
| R1 | -1 | -1 | -1 | +1 | +1 | 9.2 | 1180 |
| R2 | +1 | -1 | -1 | -1 | +1 | 21.5 | 1090 |
| R3 | -1 | +1 | -1 | -1 | +1 | 7.8 | 1020 |
| R4 | +1 | +1 | -1 | +1 | +1 | 19.6 | 960 |
| R5 | -1 | -1 | +1 | +1 | -1 | 10.1 | 1210 |
| R6 | +1 | -1 | +1 | -1 | -1 | 23.0 | 1120 |
| R7 | -1 | +1 | +1 | -1 | -1 | 8.4 | 1050 |
| R8 | +1 | +1 | +1 | +1 | -1 | 20.8 | 990 |
主效应计算与Pareto判读
Resolution III设计中主效应估计公式为:效应 = (高水平和 − 低水平和) / 4(8次试验,每水平4次)。以MFR为例,A的效应 = (21.5+19.6+23.0+20.8 − 9.2−7.8−10.1−8.4)/4 = 12.35,远大于其他因素。弯曲模量则D(滑石粉填充量)效应最大。用标准化效应做Pareto排序,取前三个因素进入后续优化。
import numpy as np
import pandas as pd
data = pd.DataFrame({
'A': [-1, 1, -1, 1, -1, 1, -1, 1],
'B': [-1, -1, 1, 1, -1, -1, 1, 1],
'C': [-1, -1, -1, -1, 1, 1, 1, 1],
'D': [1, -1, -1, 1, 1, -1, -1, 1],
'E': [1, 1, 1, 1, -1, -1, -1, -1],
'MFR': [9.2, 21.5, 7.8, 19.6, 10.1, 23.0, 8.4, 20.8],
'Modulus': [1180, 1090, 1020, 960, 1210, 1120, 1050, 990]
})
def effects(df, y):
res = {}
for f in ['A', 'B', 'C', 'D', 'E']:
hi = df.loc[df[f] == 1, y].mean()
lo = df.loc[df[f] == -1, y].mean()
res[f] = hi - lo
return pd.Series(res)
for y in ['MFR', 'Modulus']:
eff = effects(data, y)
# 标准化: 用效应绝对值排序, 以最大效应归一化
norm = eff.abs() / eff.abs().max()
print(f'\n{y} 主效应:')
print(eff.round(2).sort_values(key=abs, ascending=False))
print('归一化Pareto排序:')
print(norm.sort_values(ascending=False).round(2))
示例数据下,MFR的Pareto前三为 A、B、D;弯曲模量的前三为 D、A、B。综合两个响应,A(PP基料熔指)、B(EPDM含量)、D(滑石粉填充量)被选为关键因素,C(粒径)与E(相容剂)在本轮筛选中效应较弱,可暂固定在中水平或留待后续验证。
筛选结果与后续衔接
将A、B、D三个关键因素带入下一阶段:可做2^3全因子加中心点,或直接进入响应面(如Box-Behnken)拟合二次模型,寻找MFR与弯曲模量的平衡窗口。C与E在后续可作为固定条件或补充验证因素,避免一次性把五个因素全部带入高成本优化。