做过多因素实验的人,基本都撞过同一堵墙:因素定好了,水平数也拍板了,结果翻遍手头的正交表,找不到一张恰好装下需求的表。A因素要4个水平,B、C、D因素只要2个水平,查标准正交表L8(2^7)吧,全是2水平列;查L16(4^4)吧,又只有4水平列,硬套不仅试验次数白白翻倍,还多出一堆用不上的水平组合。这时候最直接的解法就是把标准正交表“改”成混合水平表。并列法就是最常用、也最值得先掌握的一种改法,它能把一张等水平正交表里的两列合并成一列,让这一列变成更多水平的新列,从而适配那些“水平数不齐”的真实实验场景。
这篇文章写给三类人看:一是做工艺优化、产品设计时需要自己排试验的工程师,二是正在学实验设计的本科生或研究生,三是已经会用Minitab等软件生成混合正交表、但想知道表是怎么来的人。读完你不仅能手算出L8(4×2^4)这种常用混合表,还能判断什么时候能并列、什么时候不能、并列之后哪些列能安排因素,避免一上来就把整张表废掉。
1. 并列法是什么:一张表解决因素水平不齐的难题
1.1 标准正交表为什么装不下你的实验
标准正交表有一个共同特征:所有因素的列,水平数完全一样。L8(2^7)每一列都是2水平,L9(3^4)每一列都是3水平,L16(2^15)每一列都是2水平,L27(3^13)每一列都是3水平。这种设计的最大好处是数学上整齐,理论成熟、分析简单,但现实中的实验往往不会这么配合你。
举一个很典型的例子。一家做粉末冶金的工厂要优化烧结工艺,因素包括烧结温度、保温时间、升温速率、气氛类型。气氛类型只有2种选择,所以它天然是个2水平因素;但烧结温度如果是4档(比如1050、1100、1150、1200摄氏度),温度就成了4水平因素。这时候你找遍标准等水平正交表,没有一个完美匹配的方案。强行用L8(2^7)只能把温度压缩成2水平,等于丢掉一半的信息;强行用L16(4^4)则会把3个2水平因素也硬安排成4水平,无端增加试验次数和成本。
在工厂里,每次试验都要真刀真枪烧一批样品,多一轮试验就是多几千块的电费、人工费、材料费。试验方案能缩小就一定要缩小。这就是混合水平正交表存在的意义,并列法则是构造这种表的核心手段之一。
1.2 并列法的核心思路:两列合成一个大列
并列法的操作说起来很简单:从一张等水平正交表中挑出两列,把这两列的水平组合当成一个新列的不同水平,于是原来的两个“小水平列”就合并成了一个“大水平列”。
打个比方。你房间里有A、B两个开关,每个开关只有开和关两种状态,组合起来就能得到四种状态:都关、A开B关、A关B开、都开。这就是从“2水平×2水平”变成“4水平”的过程。在正交表里,原本两列2水平列每行各有1个数字,并列后变成1列4水平列,每行只有1个数字,但新列包含的信息量等于原来两列信息量之和。
最常见的并列路径是2水平列加2水平列变成4水平列。两个2水平列本来能提供2个因素的独立信息,合并后变成1个4水平因素,但总试验次数不变。也就是说,并列法是用“减少因素数量”的代价,换取“提高某个因素的水平档次”。在自由度上也能解释:两个2水平列各有1个自由度,合计2个自由度;一个4水平列有3个自由度。所以严格来说,合并后的信息量略大于合并前,这也是为什么同时需要牺牲一个交互作用列来平衡。
1.3 并列法和拟水平法、现成混合表怎么选
很多教材在讲混合水平正交表时,会把并列法和拟水平法放在一起。拟水平法的思路和并列法刚好相反:它不改变表的列水平数,而是把某个因素的多个水平“伪装”成同一水平,或者把不足的水平数补充起来。比如一个因素本来只要3个水平,但你手头只有2水平表,就人为给它编一个虚拟的第4水平,让这一列看起来也是4水平。这种方法保留列的水平数,但牺牲了部分因素水平数设计的真实性,在实际分析中容易引起解释困难。
并列法则不搞“伪装”,它是物理上重建了表的列结构,得到的是一张新的混合水平正交表。至于现成的混合正交表,如L8(4×2^4)、L16(4×2^12)、L18(2×3^7)等,其实很多就是用并列法从标准表中构造出来的,只是教科书和软件把它们直接列成了现成表。我的建议是:能直接查到现成混合表就先查现成表,快速、可靠、不会出错;查不到、或需要特殊组合时,再用并列法自己构造。理解并列法的过程,也有助于你看懂现成混合表里哪些列是“空”的、哪些列是“废”的。
2. 读懂并列法的数学原理与可行性判断
2.1 水平映射:从4种组合到4个档位
并列法先用数学方法做的事,是把两列的水平组合映射成一个新水平。以2水平列并列为例,假设原列1和原列2的水平都是1和2,那么两列同一行的组合有四种:(1,1)、(1,2)、(2,1)、(2,2)。把这四种组合按字典序排列,就可以映射成新列的水平1、2、3、4。
这里有一个实操要点:映射顺序最好固定,不要随意乱编。我最开始学习并列法时,看到某些资料上写着(1,1)→1、(1,2)→2、(2,1)→4、(2,2)→3,当时觉得奇怪,为什么4和3要互换?后来才明白,正交性本质上只看“计数是否均衡”,不看水平编号的数字顺序。你叫它3还是叫它4,不影响正交性质。但从可读性和后续分析的角度,强烈建议统一用字典序,也就是(1,1)→1、(1,2)→2、(2,1)→3、(2,2)→4。这样试验号与水平组合的对应一目了然,查表、写报告都方便。
2.2 为什么并列后依然正交:用L8(2^7)做一次完整验证
光说“并列后还是正交表”不够,得亲眼验证一次。验证正交性只需要检查两条:第一,每一列的各水平出现次数相同;第二,任意两列之间的水平组合出现次数相同。
我们先看一张常见的L8(2^7)标准表。这张表里列1、列2、列4是基本列,列3是列1与列2的交互列,列5是列1与列4的交互列,列6是列2与列4的交互列,列7是列3与列4的交互列。完整表体如下:
| 试验号 | 列1 | 列2 | 列3 | 列4 | 列5 | 列6 | 列7 |
|---|---|---|---|---|---|---|---|
| 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
| 2 | 1 | 1 | 1 | 2 | 2 | 2 | 2 |
| 3 | 1 | 2 | 2 | 1 | 1 | 2 | 2 |
| 4 | 1 | 2 | 2 | 2 | 2 | 1 | 1 |
| 5 | 2 | 1 | 2 | 1 | 2 | 1 | 2 |
| 6 | 2 | 1 | 2 | 2 | 1 | 2 | 1 |
| 7 | 2 | 2 | 1 | 1 | 2 | 2 | 1 |
| 8 | 2 | 2 | 1 | 2 | 1 | 1 | 2 |
现在把列1和列2并列,用字典序映射,得到新的大列A:(1,1)→1、(1,2)→2、(2,1)→3、(2,2)→4。新表如下:
| 试验号 | A(4水平) | B(原列4) | C(原列5) | D(原列6) | E(原列7) |
|---|---|---|---|---|---|
| 1 | 1 | 1 | 1 | 1 | 1 |
| 2 | 1 | 2 | 2 | 2 | 2 |
| 3 | 2 | 1 | 1 | 2 | 2 |
| 4 | 2 | 2 | 2 | 1 | 1 |
| 5 | 3 | 1 | 2 | 1 | 2 |
| 6 | 3 | 2 | 1 | 2 | 1 |
| 7 | 4 | 1 | 2 | 2 | 1 |
| 8 | 4 | 2 | 1 | 1 | 2 |
先看第一重性质,A列中水平1、2、3、4各出现2次。再看第二重性质,以A列与原列4为例,A列水平1对应B列1、2各一次,A列水平2对应B列1、2各一次,A列水平3和水平4同理。说明A列与B列正交。对原列5、6、7做同样检查,结果相同。所以这张新表确实是一张正交表,记作L8(4×2^4),表示能做1个4水平因素加4个2水平因素,总共8次试验。
2.3 三个前提条件:哪些情况不能用并列法
并列法不是万能的,动手前必须判断可行性。我总结为三个条件。
第一,合并后的新列水平数必须能被试验行数整除。L8(2^7)有8行,两列2水平合并成4水平列,8除以4等于2,每个新水平对应2行,没问题。L9(3^4)有9行,两列3水平合并成9水平列,9除以9等于1,每个新水平只对应1行,表面看也能整除,但转到第二个条件就不行了。
第二,新列水平数乘以其他任意一列的水平数,不能超过试验行数。拿L9(3^4)的例子来说,新列有9个水平,其他原列有3个水平,9乘以3等于27,但表只有9行,这意味着A列每个水平与另一列的每个水平最多只能碰到0次或1次,无法做到每种组合出现相同次数,正交性直接崩塌。反过来看L8(4×2^4),4乘以2等于8,等于行数8,正好成立。这才是关键条件。
第三,被并列的两列之间的交互作用列必须从可用列中删除。后面的章节会详细讲,这里先记住:你并了两列,它们之间产生的那一列就“赃”了,不能再用。
实际操作中,我基本用这个流程判断:先看需求里有没有高水平的因素(4水平或9水平),再看手头标准表的行数够不够大、其他因素水平数和新列水平数的乘积是否不大于行数,最后查被并列列的交互列是哪几列,提前标记为不可用。这套流程熟练后,10秒就能判断一个方案有没有戏。
3. 并列法实操:从需求到混合正交表的完整流程
3.1 五步构造法:照着做就能出表
并列法看起来是把两列并成一列,但要保证结果可靠,还是按五步走比较稳。
第一步,列出全部因素和水平,明确哪些因素是高水平、哪些是低水平,以及你最多能接受多少次试验。第二步,选一张标准正交表作为母表,原则是行数刚好等于或略大于试验需求的公共倍数,而且母表的水平数与低水平因素一致。第三步,确定并列哪两列,优先从基本列中选,且要考虑交互列的影响。第四步,做水平映射,在原表基础上写出新列,并删除被并列列的交互列。第五步,安排表头,把各个因素放进可用列,空出的列留作误差估计,最后再做一次正交性验证。
每一步都有讲究,尤其是第二、三步。选母表时很多人会卡在“该选L8还是L16”上,我的习惯是先算一下:总自由度不能超过行数减1。比如你有1个4水平因素和3个2水平因素,总自由度是3加1加1加1等于6,行数至少要有7行,L8刚好够;如果你有2个4水平因素和3个2水平因素,总自由度是3加3加3等于9,行数至少要有10行,L8就不够用了,得换L16。
3.2 案例一:L8(2^7)改造为L8(4×2^4)
我们在2.2节已经用L8(2^7)并列出4水平列的完整表格。现在把操作过程还原一下,看一个完整场景。
假设某工程师有5个因素要考察:一个4水平因素(温度,1050、1100、1150、1200摄氏度),四个2水平因素(保温时间、升温速率、气氛类型、冷却方式)。总因素自由度是3+1+1+1+1=7,行数至少要8行,所以选L8(2^7)作为母表非常合适。
并列列的选择上,取列1和列2作为4水平因素的载体,删除列3(列1与列2的交互列),原列4、5、6、7分别安排四个2水平因素。这样就得到了L8(4×2^4)的表头:温度放第1大列,保温时间放第4列,升温速率放第5列,气氛类型放第6列,冷却方式放第7列,第3列空置。
这里最容易让人犯迷糊的是第3列。很多初学者会想:第3列本来也是2水平列,为什么不能安排因素?因为列3是由列1和列2按同或关系生成的。你可以动手验证,每当列1和列2相等时列3等于1,每当列1和列2不等时列3等于2。而我们的新4水平列A是由(列1,列2)组合生成的,A=1对应(1,1)、A=4对应(2,2),A=2对应(1,2)、A=3对应(2,1)。这就造成A列和列3存在完全确定的关系,不是正交关系,所以列3绝对不能安排任何因素。
3.3 案例二:L16(2^15)改造出双4水平列
如果实验里需要两个4水平因素,L8就不够用了。比如你有2个4水平因素和5个2水平因素,总自由度是3+3+1×5=11,至少需要12行,L16(2^15)正好满足。
L16(2^15)有15个2水平列、16行,其中基本列通常是列1、2、4、8。第一步,取列1和列2并列成第一个4水平列A,删除它们的交互列3。第二步,取列4和列8(注意这两个都是基本列,且与列1、2没有直接交互关系)并列成第二个4水平列B,删除它们的交互列12。第三步,剩余可用2水平列包括原列5、6、7、9、10、11、13、14、15,共9个。
这张新表的记号是L16(4^2×2^9),意思是能做2个4水平因素加9个2水平因素,总共16次试验。对比一下,如果不用并列法而是用4水平全因子设计,2个4水平因素就至少需要4×4=16次试验,再加上其他2水平因素,试验次数会迅速膨胀。并列法在这里的价值就是把原来需要三四十次的试验压缩到了16次,而且仍然保有正交性。
需要提醒的是,两组并列列之间也要检查正交性。A列由列1、2构成,B列由列4、8构成,因为列1、2、4、8是基本列,它们在L16中本身覆盖了2^4=16种全组合,所以合并出的A、B两个4水平列相互之间每种组合恰好出现一次,正交性没有问题。这个检查不能跳,万一误选了两组共享交互关系的列,后面分析会全部失真。
3.4 案例三:3水平表并列出9水平,可行吗
2水平列能并列成4水平列,那3水平列能不能并列成9水平列?数学上可以,但实际使用要先想清楚行数问题。
L9(3^4)一共只有9行。两列3水平合并成9水平后,新列每个水平只出现1次。它和另一个3水平列搭配时,本来应该有9×3=27种组合,但表只有9行,大量组合根本没出现,所以L9(3^4)不能并列成可用混合表。如果是L27(3^13)就不一样,27行足够大,两列3水平合并成9水平列后,9水平列每个水平出现3次,它与任一3水平列的搭配恰好有27种组合,每种出现1次,正交性成立,可以得到L27(9×3^3)这类混合表。
不过,我的个人建议是:除非确有9水平因素,否则不要为了用并列法而硬造9水平列。9水平因素在现实中不太常见,多数情况下是连续变量被切成了9档,而这时更好的选择可能是用响应面设计而非正交表。并列法最大的实用价值集中在2水平并列成4水平这一档,3水平并列成9水平作为原理理解即可,用它应对实际工程场景的频率很低。
4. 表头设计与交互作用陷阱
4.1 看穿正交表的内部结构:基本列和交互列
正交表不是一堆数字随便摆出来的,它的内部有严密的代数结构。以L8(2^7)为例,列1、列2、列4被称为基本列或独立列,它们能独立变化,其他列都是这三列的函数。列3是列1和列2的交互作用列,它的取值由列1、列2共同决定;列5是列1和列4的交互列;列6是列2和列4的交互列;列7是列3和列4的交互列,也就是三阶交互作用。
理解这个结构有两点意义。第一,当你计划考察因素交互作用时,不能随便把两个因素放进一对“具有交互关系”的列里,否则它们的交互作用会和另一个因素的主效应混在一起。第二,做并列法时,被并列的两列往往是基本列,因为基本列信息独立,不会因为删除某列而牵连太多可用列;如果并列的是交互列,虽然也能得到新列,但可用的因素列数量会受到更多限制。
这也是为什么做并列法时最好先对着交互作用表操作。L16(2^15)的交互作用表比L8复杂得多,我早期偷懒直接随意选列并列,结果构造出的表一放进Minitab就报“非正交”,后来才意识到自己选的两列共用了一部分交互关系。现在我的习惯是:凡是受怀疑的列号,先查交互作用表再动手。
4.2 并列后必须删掉的列:别让交互列毁掉正交性
前面在案例一里强调过,列1和列2并列后,列3必须删除。这是并列法的铁律,也是初学者最常踩的坑。
为什么必须删除?因为并列出来的4水平列本质上编码了列1和列2的全部组合信息,而列3的取值又完全由列1和列2的异同关系决定。换句话说,给定4水平列的任一水平,列3的值是固定的,没有任何随机性在里面。你把列3也安排成一个因素,这个因素的水平变化实际上会被4水平因素的某个水平“锁死”,实验结果没法区分是列3所在因素的影响还是4水平因素的影响。这就不叫正交设计了,叫人为制造混线。
进阶一点说,删除的不仅仅是直接交互列。如果并列用的是列1和列4,那么列5(列1×列4的交互列)也必须删除。被并列两列的交互列永远排在“黑名单”第一位。但这里有个容易被误解的点:与被并列列相关的其他交互列,比如列1和列2并列后再看列6(列2×列4)、列7(列3×列4),它们在数值上仍然与新4水平列保持正交。我在2.2节验证过,列5、6、7与新列A都能满足均衡搭配。所以实际规则是:被并列列之间的交互列必须删,与被并列列中某一列的交互列则不需要删除,但它们作为因素列时解释交互作用的能力会打折,需要谨慎。
4.3 表头安排速查与自由度核算
并列法做完,表头安排其实是一个“自由度核算”的游戏。每安排一个因素,就要消耗这个因素水平数减1的自由度,总自由度是试验次数减1,没有被任何因素占用的自由度就留给误差。
以L8(4×2^4)为例,总自由度为8-1=7。如果安排1个4水平因素(自由度3)和4个2水平因素(每个自由度1),合计7,刚好用满。这看起来完美,但实际上误差自由度变成了0,方差分析里的F检验没法做了。也就是说,L8(4×2^4)五个因素全放上去时,你得不到误差项的估计,也无法检验哪个因素显著。
解决思路有几种:一是减少一个2水平因素,把它对应的列空出来,误差自由度变成1;二是把一个2水平因素当作空列不安排,但多安排一次重复试验;三是直接做2次独立重复,让总行数变16,误差自由度自然增加。我在真实项目中更倾向于第三种,因为做重复试验不仅能估计误差,还能对抗部分噪声,提升结论的可信度。
给一个快速参考表,方便安排表头时对照:
| 母表 | 并列方案 | 得到混合表 | 必须删除列 | 可用2水平列数 |
|---|---|---|---|---|
| L8(2^7) | 列1+列2 | L8(4×2^4) | 列3 | 4个 |
| L16(2^15) | 列1+列2 | L16(4×2^12) | 列3 | 12个 |
| L16(2^15) | 列1+列2,列4+列8 | L16(4^2×2^9) | 列3、列12 | 9个 |
| L16(2^15) | 列1+列2,列4+列8,列5+列10 | L16(4^3×2^6) | 列3、列12、列15 | 6个 |
注意最后一行的组合方式是示意,实际使用时要查L16交互作用表确认交互列编号,不同的交互表版本可能会有差异。
5. 常见问题与排查技巧实录
5.1 五个高频问题速查
做并列法的过程中,我被问得最多的问题集中在以下几类,这里直接给答案。
问题一:选多大母表合适?看自由度总和。把所有因素的自由度加起来,加上你希望保留的误差自由度,再把这个总数加1,就是试验行数的下限。低于这个下限的表肯定装不下。
问题二:并列哪两列最好?优先选基本列。并列基本列时,因为它们的交互列容易被识别,留下的可用列数量也最可预测。如果并列两个交互列,你需要重新验证它与剩余列的正交性,工作量大且容易出错。
问题三:映射顺序怎么定?统一用字典序,即(1,1)→1、(1,2)→2、(2,1)→3、(2,2)→4。虽然其他顺序不影响正交性,但会影响阅读和结果解释。
问题四:并列后能否直接用方差分析?能。只要最终表满足“每列各水平出现次数相同、任意两列水平组合出现次数相同”,它就是一个合法的正交表,方差分析的原理照常适用。
问题五:误差项怎么估计?靠空列或重复试验。空出至少一个因素列作为误差列,或者对每个试验号做重复,都能提供误差自由度。千万不要把因素塞满所有列后还强行做F检验,那样自由度归零,结果全是空的。
5.2 三个反复踩的坑
第一个坑是映射顺序搞乱。我在做第一个实际项目时,因为赶时间,直接用Excel手工生成新列,一边填一边接电话,结果把第5行的(2,1)映射成了4而不是3。整张表看起来依旧整齐,但放进方差分析软件后,4水平因素的平方和怎么算都不对。后来排查了很久才发现是映射顺序的问题。现在我的做法是:先写好映射对照表并自由核对两遍,再开始填充主表。
第二个坑是忘删交互列。有一次我给别人复核一份试验方案,他把列1和列2并列成了4水平因素,但列3还安排了一个2水平因素,理由是“反正多一列多做一点信息”。我当场让他做了个简单验证:看4水平列与列3的组合计数。他算了5分钟,发现原来新4水平列水平1时列3恒等于1,根本不是独立信息。这种情况如果不纠正,最后分析时会出现严重的混线,整个方案等于白做。
第三个坑是不检查自由度就排满因素。前面已经算过,L8(4×2^4)要留误差自由度的话,最多只能安排4个因素。很多人看到表格里还有空着的列,就忍不住把因素塞进去,结果模型饱和、误差为零。塞因素一时爽,分析的时候傻眼。我现在每次做完表头,都会先写一行自由度检查:总自由度是多少,已用多少,剩下多少给误差。不为负数才继续往下走。
5.3 工具、经验与最终建议
现在做并列法,已经不需要完全手算了。Minitab里有Taguchi design功能,SPSS有正交设计菜单,R语言的DoE.base包也能直接生成混合水平正交表。这些工具内部的算法,本质上就包含了并列法、拟水平法之类的构造逻辑,用起来很方便。但我仍然建议你在熟练使用工具之前,亲手用L8(2^7)并列一遍,把前面的验证表在Excel或草稿纸上完整跑一次。因为工具输出给你的是一张现成的表,它不会告诉你哪些列是交互列被删掉的、哪些列是空列、为什么L8(4×2^4)只能放4个2水平因素不能放5个。只有自己走过一遍,你才能在做表头安排和自由度核算时心里有底。
工具选型上,我的个人习惯是:快速验证和教学用R包DoE.base,因为它开源,函数参数清楚,还能通过summary直接看到表的正交性质;企业里做正式方案报告用Minitab,因为输出表格美观,团队协作时大家读起来都标准。SPSS的正交设计模块适合比较简单的需求,内部选项比Minitab少一些。
最后提一个经验值:并列法虽然能帮你压缩试验次数,但当你发现需要并列三组以上列才能满足需求时,建议停下来重新审视实验方案。因为并列三组以上通常意味着你有三个以上高水平因素,这时还不如直接用现成的L32(2^1×4^9)之类的混合表,或者考虑换用部分因子设计,试验次数不一定比并列法多,但交互关系会更清晰。做实验设计最重要的原则永远是:方案简单可解释,比方案花哨省事更重要。