单因素方差分析
一、直观理解:多组均值的差异,是真有差别还是组内吵闹
单因素方差分析(One-way ANOVA)用于:一个分类因素(如工艺 A/B/C)取 个水平,连续响应(如强度)在各组的均值是否完全相同。
为什么叫“方差分析”?因为比较均值的方法是把总波动拆开:
若组间波动相对组内噪声足够大,就认为各水平均值不全相等。这比做很多次两两 t 检验更符合单一全局原假设,也更好控制第一类错误(全局层面)。
直观比喻:三个班级平均分不同,可能是教学真有差异,也可能只是班内成绩本来就很分散。ANOVA 用“班间差 / 班内差”做判断。
二、适用场景与优缺点
| 类型 | 说明 |
|---|---|
| 适用场景 | 单因素多水平( 尤常见);响应近似连续;组间独立样本;比较工艺、品种、策略、渠道等。 |
| 核心优点 | 一次检验多个均值;与实验设计框架一致;可接多重比较与效应量;anova1 易用。 |
| 局限与缺点 | 假定正态、独立、方差齐性;显著后不自动告诉你哪两组不同;非平衡设计与异方差时需调整;观测相关(重复测量)不能直接用。 |
两组时 ANOVA 与 t 检验等价。 时可直接 t; 用 ANOVA + 事后比较。
三、核心原理
模型:
为水平, 为组内重复。(均值全等)。
平方和分解:
且假定成立时 。
效应量:
易偏大, 略保守。
四、关键决策
1. 方差不齐
看残差-拟合图或 Levene。不齐时用 Welch ANOVA(anova1 不直接给 Welch,可用 vartestn 诊断 + 稳健方法),或对响应做变换。
2. 事后多重比较
- 全部两两:Tukey HSD;
- 与对照组比:Dunnett;
- 少数事前对比:正交 contrast,不必过度校正。
3. 样本量不平衡
一般仍可用,但齐性更重要,解释时报告每组 。
4. 非正态
轻度偏态大样本可容忍;小样本偏态改 Kruskal–Wallis。
五、MATLAB 示例
% 三组产量
A = [12.1 12.5 11.9 12.3 12.0];
B = [13.0 13.4 12.8 13.1 13.5 13.2];
C = [11.5 11.8 11.2 11.6 11.4];
y = [A(:); B(:); C(:)];
g = [repmat("A",numel(A),1); repmat("B",numel(B),1); repmat("C",numel(C),1)];
[p, tbl, stats] = anova1(y, g, "off");
disp(tbl);
fprintf("ANOVA p = %.4g\n", p);
% 效应量 eta^2
SSB = tbl{2,2}; SST = tbl{4,2}; eta2 = SSB/SST;
fprintf("eta^2 = %.3f\n", eta2);
% 多重比较
figure;
[c, m] = multcompare(stats, "CType", "tukey-kramer");
title("Tukey 两两比较");
disp(c); % 每行: 组i, 组j, 下限, 差, 上限, p
% 残差诊断
groupMeans = zeros(size(y));
levels = unique(g);
for i = 1:numel(levels)
idx = g == levels(i);
groupMeans(idx) = mean(y(idx));
end
res = y - groupMeans;
figure;
subplot(1,2,1); scatter(groupMeans, res, 40, "filled"); yline(0);
xlabel("组均值"); ylabel("残差"); title("残差-拟合");
subplot(1,2,2); qqplot(res); title("残差 QQ");
六、如何解释结果
- 因素与水平定义、每组 与均值±SD;
- F、自由度、p、;
- 事后比较哪几对显著、均值差与 CI;
- 假设诊断结论;
- 实际意义(产量提升多少、是否超过成本阈值)。
七、常见误区
1. 显著后随便挑两组做 t 且不校正
破坏整体错误率控制。
2. 把 ANOVA 用于配对/重复测量
应使用重复测量 ANOVA 或混合模型。
3. 只报 p 不报效应与方向
读者无法知道哪组高、高多少。
4. 把水平当连续变量硬做相关
若水平本有序且间距有意义,可做趋势对比,但那是额外分析。
八、小结
单因素 ANOVA 的核心是:
用组间均方与组内均方之比,检验多组均值是否全等。
它是多组比较的标准入口。完整写法=全局 F + 效应量 + 多重比较 + 残差诊断,而不是只给一个 p 值。