☰
正交实验方差分析:手算流程与SPSS多因素方差分析对照
2026/10/1 16:28:58 网站建设 项目流程

1. 正交实验做完以后,为什么还得回头做方差分析

正交实验设计这套东西,做过配方、工艺、材料、农业、化工的人都不陌生。用一张正交表,把三因素三水平本来要做的 27 组试验压缩到 9 组,用最少的试验次数把各因素各水平的搭配都覆盖一遍,这是它的核心价值。但真正让很多人卡住的地方,不是"怎么排表",而是"跑完这 9 组之后,我怎么知道哪个因素的差异是真差异,哪个只是我手抖、炉温波动、称量误差搞出来的噪声"。这就轮到方差分析出场了。

我这篇东西想聊的是一件很具体的事:正交实验的数据拿到手之后,怎么用手算把方差分析表从头到尾算一遍,搞清楚每一列平方和是怎么来的、自由度怎么分、误差项从哪儿来;然后再把同一批数据搬进 SPSS,用一般线性模型里的单变量过程做多因素方差分析,并且验证 SPSS 的输出跟我手算的结果是不是对得上。整篇的算例是一张 L9(3⁴) 正交表、三个因素三个水平、一个空列,数据我做过的处理都写清楚,你可以直接照着复现。

适合谁看:刚接触试验设计的学生、做工艺优化的工程师、写论文要出方差分析表的研究生、以及用 SPSS 但从没搞明白"Ⅲ型平方和"到底是什么的人。不需要你有很深的统计背景,但最好知道均值、方差、正态分布这几个基本概念。

核心关键词就几个:正交实验、方差分析、SPSS、多因素方差分析。这四个词贯穿全文,我不会跑偏去讲别的。

1.1 极差分析能告诉你什么,又会漏掉什么

排完正交表、做完试验、把数据填进去,绝大多数人第一步都是算 K 值和极差 R。这一步叫极差分析,也有人叫直观分析。做法很朴素:把某个因素在同一水平下做过的所有试验结果加起来,除以次数得到该水平的均值 K,然后取最大值减最小值得到极差 R。R 越大,说明这个因素在水平之间挪动时,指标变化越剧烈,通常就认为它越重要。

这一步的价值在于:它快、直观、不需要任何分布假设,还能直接告诉你每个因素的"优水平"是哪个,拼起来就是一个看起来最优的组合。

但它有三个绕不过去的短板,这也是为什么光有极差分析不够:

第一个短板是它没法把因素效应和试验误差分开。极差 R 里混着两样东西:因素水平变化带来的真实差异,还有试验本身的随机波动。如果误差本身就大得离谱,R 再大也不能说明因素真的有效。极差分析没有任何机制去衡量"这个 R 相对于噪声来说算不算大"。

第二个短板是它给不出显著性判断。你没法说"A 因素在 0.05 水平上显著",只能说"A 因素极差最大"。论文里审稿人最常问的就是这句话:你的显著性检验呢?没做方差分析,这个表格就是残缺的。

第三个短板是它无法量化每个因素的贡献占比。R 只能排序,不能告诉你 A 解释了总变异的百分之多少。而贡献率在做成本取舍的时候非常关键——如果一个因素只贡献 3%,但它换水平要涨 20% 的成本,那完全可以不动它。

1.2 方差分析解决的是"信不信得过"的问题

方差分析的核心思想只有一句话:把数据的总波动拆开,看每个因素分到的波动份额够不够大。

总波动用总平方和 SS_T 衡量,它等于每个观测值减去总均值的平方之和。方差分析要做的事,就是证明这个 SS_T 可以被精确地拆成若干块——A 因素一块、B 因素一块、C 因素一块、误差一块,而且这几块加起来正好等于 SS_T。这个"正好等于"不是近似的,是数学上恒等的,这一点跟回归里的平方和分解是同一个道理。

拆完之后,每个因素的平方和除以自己的自由度得到均方 MS,再用它的 MS 除以误差的 MS 得到一个比值 F。F 的含义很直白:这个因素造成的平均波动,是误差造成的平均波动的多少倍。如果 F 接近 1,说明这个因素跟随机噪声没区别;F 越大,越有底气说它是真效应。再拿 F 去查 F 分布表,就得到了 p 值,也就是"如果这个因素其实完全没用,我观察到这么大差异的概率有多大"。

跟极差分析相比,方差分析多出来的能力是:误差有了明确的来源和量级,显著性有了统计学依据,贡献率可以直接从平方和算出来。这就是它值得多花半小时的原因。

1.3 空列当误差:正交实验方差分析的核心惯例

这里有个新手最容易懵的点:正交实验里,误差平方和从哪来?

如果是有重复的试验——也就是每个试验号重复做了 n 次——那么误差平方和可以直接算组内平方和,这很干净,叫纯误差。

但很多正交实验为了省成本,每个试验号只做一次。这时候没有组内变异可算,怎么办?答案是:用空列。

正交表的列数通常比因素数多。比如三因素三水平,如果选 L9(3⁴),表里有 4 列,但你只有 3 个因素,多出来的那一列不安排任何因素,就叫空列。空列上各水平的差异,理论上不来自任何真实因素,只来自误差和未考虑到的交互作用,所以它的平方和就可以拿来当误差平方和用。

这个惯例有一个隐含前提:空列的平方和应该相对最小。如果你排了两个空列,结果其中一个空列的平方和比某个真实因素还大,那就要警惕了——很可能两个因素之间存在交互作用,交互效应被混进了空列里,这时候直接用空列当误差会把误差估计得偏大,检验变得迟钝,严重的还会得出错误结论。

我一开始做正交实验的时候就不理解"为什么非要留一列空着",觉得多排一个因素不好吗?后来才明白,那一列空着不是浪费,是留出位置来估计噪声。没有噪声估计,整个方差分析就无从谈起。如果实在因素太多、列不够用,退而求其次的做法是把平方和最小的那一列因素并入误差(这叫合并误差,pooling),但这么做的代价是损失一个因素的检验能力,而且必须在报告里写清楚,不能偷偷合并。


2. 手工算一遍:L9(3⁴) 的完整方差分析流程

理论说再多,不如拿一组数从头算到尾。这一节我用一张标准的 L9(3⁴) 表,三个因素 A、B、C,各三水平,第四列留空当误差,指标值越大越好。

2.1 试验方案与数据记录

L9(3⁴) 的标准排布是这样的(每一行是一次试验,数字代表取第几个水平):

试验号ABCD(空列)指标 y
1111152
2122260
3133368
4212366
5223172
6231272
7313276
8321378
9332186

这张表有个特点:任意两列之间,各水平组合恰好出现且只出现一次,这就是正交性,也是后面平方和可以干净地分解的根本原因。第四列 D 我们故意不安排因素,留着当误差来源。

先做极差分析,把各水平的和与均值算出来:

  • A 因素:第 1、2、3 号试验归 A1,和 52+60+68=180,均值 60;4、5、6 号归 A2,和 66+72+72=210,均值 70;7、8、9 号归 A3,和 76+78+86=240,均值 80。极差 R_A = 80-60 = 20。
  • B 因素:1、4、7 号归 B1,和 52+66+76=194,均值 64.667;2、5、8 号归 B2,和 60+72+78=210,均值 70;3、6、9 号归 B3,和 68+72+86=226,均值 75.333。极差 R_B = 10.667。
  • C 因素:1、6、8 号归 C1,和 52+72+78=202,均值 67.333;2、4、9 号归 C2,和 60+66+86=212,均值 70.667;3、5、7 号归 C3,和 68+72+76=216,均值 72。极差 R_C = 4.667。
  • D 空列:1、5、9 号,和 52+72+86=210,均值 70;2、6、7 号,和 60+72+76=208,均值 69.333;3、4、8 号,和 68+66+78=212,均值 70.667。极差 R_D = 1.333。

极差排序是 A > B > C > D,而且空列的极差确实最小,说明这张表排得没问题,没有明显的混杂。现在进入方差分析。

2.2 平方和分解:从校正项到各因素平方和

方差分析的第一步是算校正项 CT,有的教材写成 C 或 CF,它等于总和的平方除以总试验次数:

CT = (Σy)² / n = 630² / 9 = 396900 / 9 = 44100

这个数其实是"如果所有试验结果都等于总均值 70,那么 9 个数的平方和会是多少"——它是后面所有平方和的基准线。

接着算总平方和 SS_T,它等于各观测值平方和减去 CT:

Σy² = 52²+60²+68²+66²+72²+72²+76²+78²+86² = 44908

SS_T = 44908 - 44100 = 808

这个 808 就是全部数据的总波动,接下来要把它分给四个来源。

某因素的平方和公式是:把该因素各水平的数据之和平方,除以每个水平出现的次数,求和之后再减去 CT。每个水平出现 3 次,所以:

SS_A = (180² + 210² + 240²) / 3 - 44100 = (32400 + 44100 + 57600) / 3 - 44100 = 134100 / 3 - 44100 = 44700 - 44100 =600

SS_B = (194² + 210² + 226²) / 3 - 44100 = (37636 + 44100 + 51076) / 3 - 44100 = 132812 / 3 - 44100 = 44270.667 - 44100 =170.667

SS_C = (202² + 212² + 216²) / 3 - 44100 = (40804 + 44944 + 46656) / 3 - 44100 = 132404 / 3 - 44100 = 44134.667 - 44100 =34.667

SS_D(空列) = (210² + 208² + 212²) / 3 - 44100 = (44100 + 43264 + 44944) / 3 - 44100 = 132308 / 3 - 44100 = 44102.667 - 44100 =2.667

验算一下:600 + 170.667 + 34.667 + 2.667 = 808,正好等于 SS_T。这说明分解没有算错。这一步一定要验算,它是整个流程里最容易出错也最容易被忽略的检查点。我自己刚开始做的时候,有一次把一个水平的和抄错了一位数,结果四个平方和加起来比 SS_T 多出两百多,愣是没发现,后面 F 值全错。

2.3 自由度分配与误差项的确定

平方和不能直接比大小,必须除以各自的自由度变成均方之后才有可比性。自由度分配遵循两条规则:

  • 总自由度f_T = n - 1 = 9 - 1 = 8
  • 某因素自由度f = 水平数 - 1 = 3 - 1 = 2

所以 f_A = f_B = f_C = f_D = 2,四个加起来正好是 8,跟总自由度对上了。这种情况说明表里没有任何剩余的自由度,误差只能靠空列来提供。如果一个因素的某个水平因为数据缺失没做,自由度就会乱,整个表就废了。

这里有一个关键判断:误差项到底用谁。本例中,唯一能当误差用的就是空列 D,所以 SS_e = SS_D = 2.667,f_e = 2。

注意:如果你的正交实验每号做了重复试验,误差平方和应该是"空列平方和 + 纯误差平方和",自由度也是两者相加。只把空列当误差会低估误差方差,导致 F 值虚高、把不显著的因素判成显著。这是很常见的错误做法。

另外再强调一遍合并误差的规则:只有当某个因素的均方明显小于误差均方(也就是 F < 1),并且有专业上的理由认为它确实没影响时,才可以考虑把它并入误差。合并之后自由度变大,检验更灵敏。但这次我们的例子不合并,因为 C 的 F 值并不小。

2.4 F检验、显著性判定与贡献率

均方 MS = 平方和 / 自由度,F = 因素的 MS / 误差的 MS:

变异来源平方和 SS自由度 f均方 MSF 值
A6002300225.0
B170.667285.33364.0
C34.667217.33313.0
误差(D)2.66721.333—
总和8088——

接下来查 F 分布表的临界值。误差自由度是 2,因素自由度也是 2,所以查的是 F(2, 2):

  • F₀.₁₀(2,2) = 9.00
  • F₀.₀₅(2,2) = 19.00
  • F₀.₀₁(2,2) = 99.00

对照一下:

  • A:F = 225.0 > 99.00,在 0.01 水平上极显著,标记 **
  • B:F = 64.0 > 19.00 但 < 99.00,在 0.05 水平上显著,标记 *
  • C:F = 13.0 > 9.00 但 < 19.00,在 0.05 水平上不显著,只在 0.10 水平上边缘显著

还有一个很有用的指标叫贡献率,用某因素的平方和除以总平方和:

  • A 的贡献率 = 600 / 808 = 74.26%
  • B 的贡献率 = 170.667 / 808 = 21.12%
  • C 的贡献率 = 34.667 / 808 = 4.29%
  • 误差贡献率 = 2.667 / 808 = 0.33%

从贡献率能一眼看出:总变异里有四分之三是 A 贡献的,B 占两成,C 只占不到 5%,误差几乎可以忽略。这个图景跟 F 检验的结论完全一致。

不过这里必须坦白一句:误差贡献率只有 0.33%,这个数字偏小得不真实。它反映的是这份数据里空列的波动实在太小了。误差自由度只有 2,检验的灵敏度其实很差——这也是为什么用空列当误差的正交实验,方差分析结论往往比较"软"。真正稳妥的做法是加重复试验,把纯误差补进来,把 f_e 提上去。


3. 把这套数据搬进SPSS:多因素方差分析实操

手算的意义在于让你理解每一列数字的来源,但日常干活不可能每次都手算。SPSS 的多因素方差分析(一般线性模型 → 单变量)是标配工具。下面我把同一批数据搬进 SPSS,操作步骤和结果对照都写清楚。

3.1 数据录入:长表结构怎么搭

SPSS 做多因素方差分析用的是长表结构:一行代表一次观测,一列代表一个变量。所以上面那 9 行数据要录成这样:

行号ABCy
111152
212260
313368
421266
522372
623172
731376
832178
933286

几个录数据的细节,很多新手都栽在这上面:

  • 水平编号要用数字,不要用 A1、A2 这种文本。虽然 SPSS 允许字符串变量,但方差分析里字符串只会被当成名义变量,而且排序容易乱。用 1、2、3 最省事。
  • 值标签(Value Labels)要加上。把 1 标成"低温"、2 标成"中温"、3 标成"高温",输出表格里直接显示中文,省得回头对照片。
  • 变量测量尺度:A、B、C 设成"名义",y 设成"标度"。设错了不会报错,但有些过程会受影响。

提示:如果你之前在 SPSS 里用过 数据 → 拆分文件(Split File),一定要先关掉(选"分析所有个案,不创建组")。这个功能一旦开着,后续所有分析都会按分组变量分别运行,你会得到几组独立的结果而不是一个总的方差分析表。我见过不止一个人因此怀疑软件坏了。

3.2 一般线性模型→单变量的菜单逐项设置

路径是:分析 → 一般线性模型 → 单变量(Analyze → General Linear Model → Univariate)。这是 SPSS 里做多因素方差分析的主入口,同级别还有"多变量"(多个因变量)和"重复测量"(同一个对象多次测量),别点错。

进去之后的设置:

因变量框放 y。这里只能放一个连续变量。如果你有多个指标,要么分几次做,要么用"多变量"过程。顺便说一句,很多人最开始接触 SPSS 是拿它做聚类分析或者相关性分析,那些过程对因变量数量没这么挑剔,换到方差分析就容易不适应。

固定因子框放 A、B、C。这里就是前面说的关键操作:D 不放进去。因为 D 是空列,我们要让它的变异自动落到残差里,正好跟手算里的"误差项"对应。如果你把 D 也放进去,SPSS 会把它当成第四个真实因素来检验,误差平方和就变成 0,整张表算不下去。

为什么不放 D 就等于把 D 当误差?因为 SPSS 的残差平方和 = 校正后总平方和 - 模型解释的平方和,而模型只包含 A、B、C 三个因素,所以剩下没被解释的部分自然就是 D 那一列的平方和。这个逻辑跟手算里"SS_T 减去三个因素平方和等于误差平方和"是完全一样的。

模型按钮点开,选"设定"还是"全因子"?本例只有主效应,选"设定"然后把 A、B、C 三个主效应移进模型,或者直接选"全因子"也行(因为三个因素的全因子模型就包含主效应和所有交互项,而 L9 表没有任何自由度留给交互,SPSS 会自动跳过)。如果要做交互,就必须用更大的正交表,见第 4 节。

对比按钮一般不用动,默认"无"。

事后比较按钮:把 A、B、C 移进去,勾选 LSD 和 Duncan。但注意——本例的误差自由度只有 2,事后多重比较几乎没有功效,输出的结果意义不大。这也是我一直强调要加重复试验的原因。

选项按钮里有几个必勾的:

  • 描述统计:给出各水平组的均值、标准差、样本量
  • 效应量估计:输出偏 Eta 方
  • 方差齐性检验:Levene 检验
  • 残差图、正态概率图:用来做模型诊断
  • 参数估计:需要写回归系数的时候用
  • 观测功效:看检验功效够不够

设置完点确定,结果就出来了。

3.3 输出表格逐行对照:SPSS结果与手算是否对得上

SPSS 输出的核心表格叫"主体间效应检验"(Tests of Between-Subjects Effects)。对应到我们的数据,Ⅲ型平方和那一列应该是:

来源Ⅲ型平方和自由度均方F显著性
校正模型805.3336134.222100.667.010
截距44100.000144100.00033075.000.000
A600.0002300.000225.000.004
B170.667285.33364.000.015
C34.667217.33313.000.071
误差2.66721.333——
总计44908.0009———
校正后总计808.0008———

逐项对一下就明白了:

  • 校正模型的平方和 = 600 + 170.667 + 34.667 = 805.333,等于三个因素平方和之和,自由度 6 也是 2+2+2。
  • 误差平方和 2.667,正好等于我们手算的空列 D 的平方和,自由度 2。
  • 校正后总计808,跟手算的 SS_T 一模一样。
  • 总计44908,就是我们前面算的 Σy²。
  • 截距那一行对应 CT,也就是校正项,只是 SPSS 用的是未校正的基准,一般不解读它。

再看 F 值和显著性:A 的 F = 225.000,显著性 .004;B 的 F = 64.000,显著性 .015;C 的 F = 13.000,显著性 .071。这三个 p 值跟我手算的结论完全对应——A 极显著、B 显著、C 只在 0.10 水平边缘显著。手算和 SPSS 对上了,说明两边的理解和设置都没问题。

如果你用的是 SPSS 的中文版,表格标题可能是"主体间效应检验";英文版是 Tests of Between-Subjects Effects。不同版本的界面措辞会有细微差异,但表格结构是一致的。

3.4 多重比较、效应量与统计功效的补充设置

除了主表,还有几块输出值得看。

参数估计会给出每个水平的回归系数,以最后一个水平为参照。比如 A 因素,A3 会被设成参照(系数 0),A1 的系数是 -20,A2 的系数是 -10。翻译成人话就是:A1 比 A3 平均低 20 个单位,A2 比 A3 平均低 10 个单位。这种"以末水平为基准"的编码方式初学者容易看晕,建议直接看描述统计里的均值更直观。

效应量里的偏 Eta 方,本例 A 是 600/(600+2.667) = 0.9955,B 是 0.9847,C 是 0.9286。这些数值高得离谱,原因是误差方差太小。效应量这个东西要结合领域经验看:心理学里 0.14 就算大效应,工程实验里 0.9 也常见,因为仪器精度高、干扰少。不要拿其他领域的标准来套自己的数据。

观测功效那一列,本例 A 和 B 接近 1,C 大概是 0.3 左右。功效低意味着即使 C 真的有中等效应,这次试验也可能测不出来。这是"误差自由度太小"的直接后果。

方差齐性检验的 Levene 检验,本例 F 的显著性如果大于 0.05,说明各组方差没有显著差异,满足方差分析的前提。样本量这么小的情况下这个检验本身也不灵敏,只能当参考。

残差图和正态概率图用来目视检查残差是否近似正态、有没有明显的喇叭形或弯曲趋势。9 个点看不出太多东西,但习惯要养成——它是发现异常值的唯一途径。


4. 结果解读、模型诊断与决策落地

算出 F 值和 p 值只是中间步骤,真正难的是"接下来怎么办"。这一节讲三件事:显著性怎么解读、前提假设怎么查、以及怎么把统计结论变成实际决策。

4.1 显著与不显著分别意味着什么

显著的准确含义是:在当前误差水平下,这个因素不同水平之间的差异,大到不太可能纯由随机波动解释。它不等于"这个因素很重要",也不等于"效应很大"。样本量足够大的时候,一个微不足道的差异也能显著。

不显著的准确含义是:没有足够证据说这个因素有影响。它不等于这个因素没用。可能它真的没用,也可能误差太大把它的信号盖住了,或者水平间隔设得太窄导致效应本来就不大。这就是"absence of evidence is not evidence of absence"。

具体到本例:

  • A 极显著且贡献率 74%,毫无疑问是主控因素,优化时必须优先调它,而且三个水平之间差异大,值得进一步细化水平间隔做第二轮试验。
  • B 显著,贡献率 21%,属于次重要因素,同样要纳入优化方案。
  • C 不显著,贡献率 4.29%,但它的均方并不比误差小太多(F = 13)。这时候怎么处理?我的做法是不直接删掉,而是看成本。如果 C 换水平不增加成本、不延长周期,那就按均值最好的水平取;如果换水平代价很高,就固定在成本最低的那个水平,在报告里说明"该因素在 0.05 水平上不显著,出于成本考虑固定于 C1"。这种处理方式既尊重统计结论,也尊重工程现实。
  • 空列 D 的贡献率 0.33%,说明这一列基本没混进什么东西,本次试验的表排得比较干净。

4.2 三个前提假设的检查方法

方差分析的 F 检验依赖三个假设,任何一个被严重违反,p 值就不可信。

正态性:要求每一组的残差(观测值减去该组均值)服从正态分布。小样本下没法严格验证,可以看正态概率图,或者对残差做 Shapiro-Wilk 检验。如果数据明显偏态,可以试试对因变量取对数或开方再做分析。工程数据里,成分百分比、收率这类指标经常需要转换。

独立性:要求每次试验之间互不影响。这条无法用统计检验验证,只能靠试验设计保证。常见的违反场景包括:同一批原料按顺序做完 9 组试验、同一台设备连续作业导致漂移、操作员越做越熟练。解决办法是随机化试验顺序。别小看这一步,我见过太多"按 1 到 9 顺序做下来"的正交实验,最后一列方差特别大,就是因为有系统性的时间趋势混在里面。

方差齐性:要求各组的误差方差相等。看 Levene 检验的显著性,大于 0.05 就可以接受。如果严重不齐,可以对因变量做变换,或者改用 Welch 校正的方差分析。

注意:三个假设里,正态性和方差齐性对结论的影响相对温和,独立性被破坏才是最致命的,因为它会让误差估计完全失真,而且事后无法补救。所以试验顺序随机化这一步,做实验的时候就要想好,不能事后补。

4.3 交互作用、重复试验与更复杂的安排

前面一直避开了一个话题:交互作用。

交互作用的定义是:一个因素的效应大小依赖于另一个因素取什么水平。举个例子,温度对收率的影响在低压下很小,在高压下却很大——这就是温度和压力有交互。这种效应在正交实验里非常常见,但用 L9(3⁴) 是查不出交互的,因为三个主效应已经占满了全部 8 个自由度,一列空余都没有。

要估计交互,有三条路:

第一条,换更大的正交表。比如三因素三水平要估计两两交互,可以用 L27(3¹³),把交互作用按交互作用表排到指定列上。代价是试验次数从 9 涨到 27,成本翻三倍。

第二条,用二水平的 L8(2⁷)。这张表有个很妙的特点:任意两列的交互作用恰好落在第三列上,所以可以专门留一列来放"两因素交互"。做筛选实验时这个设计很常用。

第三条,加重复试验。每个试验号重复 n 次,好处有三:一是能算纯误差,把误差自由度从 2 提到 9 甚至更多,检验灵敏度大幅提升;二是能顺便检查试验的重现性;三是即使不排交互列,重复数据也能帮你判断空列里到底有没有混杂。代价同样是成本翻倍。

我自己做工业化项目时,一般的节奏是:第一轮用 L9 做主效应筛选,不留重复;第二轮针对前两个最重要的因素,用全因子设计做精细优化,同时每个点做两次重复。这样既省了首轮成本,又保证了关键结论的可靠性。

另外提一个容易忽略的点:重复试验和重复测量是两回事。重复试验是对同一个试验条件重新做一遍,得到的是"纯误差";重复测量是对同一个样本测多次,那是测量误差。前者的自由度可以进误差项,后者不行。SPSS 里的"重复测量"过程处理的是后者,别用错了。

4.4 从统计结论到工艺参数:怎么定最优组合

把统计结论翻译成可执行的参数,通常按这个顺序走:

第一步,确定纳入优化的因素。显著的因素必须纳入。边缘显著的因素(比如本例的 C)视成本决定。完全不显著且 F 接近 1 的因素,可以固定在一个方便的水平上,不用管它。

第二步,为每个纳入的因素选优水平。如果指标越大越好,就选均值最大的那个水平;越小越好就选最小的。本例因子的最优组合是 A3B3C3,理论上预测指标约为 86 附近(实际上第 9 号试验正好就是 A3B3C2,实测值 86,已经接近三水平全优的状态)。

第三步,考虑交互和实际约束。如果两个因素之间存在交互,各自选最优水平不一定是最优组合,因为它们的效应不独立。这时候要看交互表,或者做验证试验。另外还要考虑操作窗口——比如 A3 是温度 120 度,但你设备上限只能到 110 度,那再优也没法用。

第四步,做验证试验。这一点特别重要,也是很多论文被我挑出问题的原因。方差分析给出的最优组合,一定要重新做试验验证。原因有两个:一是正交实验的 9 个点只是全因子 27 个点的一部分,最优组合可能根本不在做过的 9 个点里,是"预测"出来的;二是指标值存在随机波动,预测值和实测值之间通常有差距。验证试验一般做 2 到 3 次,看均值是否落在预测区间内。

第五步,计算预测区间。粗略的做法是用最优组合下的预测值加减一个误差范围。更严谨的做法要按正交实验的预测值置信区间公式来算,涉及误差均方和有效重复数。做工程决策时,如果预测值的置信下界都还比现有水平高,那就很有底气。


5. 常见问题速查与踩坑记录

这一节把我在实际项目里遇到过的问题整理成表,遇到时可以直接对照排查。

5.1 高频报错与异常场景速查

现象最可能的原因处理办法
平方和加起来对不上 SS_T某水平的和抄错,或水平归属搞错逐行核对原始数据,先验算各水平和,再加总
空列的 SS 比某个因素还大存在未考虑的交互作用,或数据有异常值检查交互作用表,考虑换更大正交表;检查异常点
SPSS 误差自由度为 0,F 算不出来把所有列都放进了固定因子框,或每个试验号只有一次观测且没有空列把空列从固定因子中移除;或者加重复试验
F 值大得离谱,显著性全是 .000误差被低估(没算纯误差),或者数据录入时把同一行复制了多次补上重复试验的组内平方和;检查数据行数
所有因素都不显著误差自由度太小(f_e = 2),检验没功效;或者水平间隔设得太窄加重复试验提高 f_e;重新设计水平间隔
事后比较表格出不来某个因素只有一个水平,或者误差自由度为 0检查因素的水平数设置
输出结果跟预期分组不一致数据 → 拆分文件还开着关闭拆分文件,选"分析所有个案"
显著性 p 值是 .000只是小于 0.0005 的显示方式,不是真的 0报告时写 p < 0.001
主效应和手算的不一样模型里多放了空列,或者交互项被自动纳入模型设定里明确只放主效应

5.2 我自己踩过的几个坑

坑一:把空列也拖进固定因子框。第一次用 SPSS 做正交实验方差分析,我想着"表格里 4 列都录进去了,那就 4 个都放进去吧",结果误差平方和变成 0,F 值全是缺失,输出表格一片空白。折腾了一下午才明白,空列的作用就是当误差,放进去等于把误差消灭了。

坑二:以为显著就等于重要。有一次做配方优化,某个因素 p = 0.02,非常显著,我兴冲冲地把它定为主控因素。结果后来算贡献率,发现它只占总变异的 6%——显著是因为误差极小,不是因为它效应大。后来才知道显著性和效应量是两件事,报告里两个都要写。

坑三:忽略试验顺序带来的漂移。一批试验做下来用了三天,第一天温度低、第三天温度高,而第三天恰好做的都是某个因素的高水平。结果这个因素看起来特别显著,实际上是环境漂移造成的。随机化试验顺序这个要求不是形式主义,是实打实的防线。

坑四:直接照搬别人的水平间隔。看到文献里用 60、70、80 三个水平,我也用 60、70、80。但我的反应体系跟人家完全不同,结果三个水平之间的差异全被误差淹没了,方差分析一个都不显著。后来把间隔拉开到 50、70、90,效应立刻就出来了。水平间隔要根据预试验确定,不能抄。

坑五:忘了做验证试验。有一批数据算出来的最优组合是 A3B2C1,但这个组合在 9 次试验里根本没做过。我当时直接把预测值写进了报告,结果复现的时候实测值差了将近 8%,客户当场质疑。从那以后,只要最优组合不在试验点里,我一定补做验证试验,哪怕是深夜加做。

坑六:用错了平方和类型。SPSS 的"主体间效应检验"里默认输出的是Ⅲ型平方和。对于正交平衡设计(每个格子样本量相同),Ⅰ型、Ⅱ型、Ⅲ型的结果是相同的,随便用哪个都对。但如果数据不平衡(比如有缺失、某些组合只做了一次),三种类型的结果就会不同,这时候必须明确说明用的哪一种,而且要知道Ⅲ型在不平衡设计下的解释比较复杂。做正交实验的好处之一就是天然平衡,这个问题一般不会遇到——这也是正交表除了省试验之外的一个隐藏优势。

坑七:以为重复数越多越好。重复确实能提高功效,但前提是每次重复是真正独立的。如果 3 次重复是在同一批原料、同一时段、同一操作员下连续做完的,那这 3 次之间的变异只反映很小的测量误差,会把纯误差估小,进而让 F 值虚高。真正有价值的重复,是在不同批次、不同时段之间随机穿插的重复。


最后说一个我自己的体会:正交实验的方差分析,看起来是一堆公式,但真正决定成败的是前面那一步——表有没有排对、试验有没有随机化、误差有没有留出位置。运算本身交给 SPSS 也只是点几下的事,但如果前面的设计有漏洞,后面算得再漂亮也是自欺欺人。我的习惯是动手做实验之前,先在纸上把空列画出来,把误差自由度数一遍,如果 f_e 小于 4,我就知道这次检验的功效会很有限,要么接受这个局限并如实报告,要么干脆加重复。这个习惯帮我省下了不少返工的时间。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询