跳到主要内容

单因素方差分析

一、直观理解:多组均值的差异,是真有差别还是组内吵闹​

单因素方差分析(One-way ANOVA)用于:一个分类因素(如工艺 A/B/C)取 kk 个水平,连续响应(如强度)在各组的均值是否完全相同。

为什么叫“方差分析”?因为比较均值的方法是把总波动拆开:

总波动=组间波动+组内波动\text{总波动}=\text{组间波动}+\text{组内波动}

若组间波动相对组内噪声足够大,就认为各水平均值不全相等。这比做很多次两两 t 检验更符合单一全局原假设,也更好控制第一类错误(全局层面)。

直观比喻:三个班级平均分不同,可能是教学真有差异,也可能只是班内成绩本来就很分散。ANOVA 用“班间差 / 班内差”做判断。

二、适用场景与优缺点​

类型说明
适用场景单因素多水平(k≥3k\ge 3 尤常见);响应近似连续;组间独立样本;比较工艺、品种、策略、渠道等。
核心优点一次检验多个均值;与实验设计框架一致;可接多重比较与效应量;anova1 易用。
局限与缺点假定正态、独立、方差齐性;显著后不自动告诉你哪两组不同;非平衡设计与异方差时需调整;观测相关(重复测量)不能直接用。

两组时 ANOVA 与 t 检验等价。k=2k=2 时可直接 t;k≥3k\ge 3 用 ANOVA + 事后比较。

三、核心原理​

模型:

Yij=μ+τi+εij,εij∼N(0,σ2)Y_{ij}=\mu+\tau_i+\varepsilon_{ij},\quad \varepsilon_{ij}\sim N(0,\sigma^2)

i=1,…,ki=1,\ldots,k 为水平,j=1,…,nij=1,\ldots,n_i 为组内重复。H0:τ1=⋯=τk=0H_0:\tau_1=\cdots=\tau_k=0(均值全等)。

平方和分解:

SST=SSB+SSW\mathrm{SST}=\mathrm{SSB}+\mathrm{SSW} F=MSBMSW=SSB/(k−1)SSW/(N−k)F=\frac{\mathrm{MSB}}{\mathrm{MSW}}=\frac{\mathrm{SSB}/(k-1)}{\mathrm{SSW}/(N-k)}

H0H_0 且假定成立时 F∼Fk−1,N−kF\sim F_{k-1,N-k}。

效应量:

η2=SSBSST,ω2≈SSB−(k−1)MSWSST+MSW\eta^2=\frac{\mathrm{SSB}}{\mathrm{SST}},\qquad \omega^2\approx\frac{\mathrm{SSB}-(k-1)\mathrm{MSW}}{\mathrm{SST}+\mathrm{MSW}}

η2\eta^2 易偏大,ω2\omega^2 略保守。

四、关键决策​

1. 方差不齐​

看残差-拟合图或 Levene。不齐时用 Welch ANOVA(anova1 不直接给 Welch,可用 vartestn 诊断 + 稳健方法),或对响应做变换。

2. 事后多重比较​

  • 全部两两:Tukey HSD;
  • 与对照组比:Dunnett;
  • 少数事前对比:正交 contrast,不必过度校正。

3. 样本量不平衡​

一般仍可用,但齐性更重要,解释时报告每组 nn。

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");

六、如何解释结果​

  1. 因素与水平定义、每组 nn 与均值±SD;
  2. F、自由度、p、η2\eta^2;
  3. 事后比较哪几对显著、均值差与 CI;
  4. 假设诊断结论;
  5. 实际意义(产量提升多少、是否超过成本阈值)。

七、常见误区​

1. 显著后随便挑两组做 t 且不校正​

破坏整体错误率控制。

2. 把 ANOVA 用于配对/重复测量​

应使用重复测量 ANOVA 或混合模型。

3. 只报 p 不报效应与方向​

读者无法知道哪组高、高多少。

4. 把水平当连续变量硬做相关​

若水平本有序且间距有意义,可做趋势对比,但那是额外分析。

八、小结​

单因素 ANOVA 的核心是:

用组间均方与组内均方之比,检验多组均值是否全等。

它是多组比较的标准入口。完整写法=全局 F + 效应量 + 多重比较 + 残差诊断,而不是只给一个 p 值。