协方差分析
一、直观理解:比较组间差异前,先把“起跑线”调平
协方差分析(ANCOVA)= 方差分析 + 回归。它在比较各组均值时,引入一个或多个连续协变量,把协变量对响应的线性影响先扣除,再看分组因素是否仍有作用。
典型例子:比较两种教学法的期末成绩,但学生入学前测不同。若直接 ANOVA,前测不平衡会混淆教学效果。ANCOVA 用前测作协变量,相当于比较“在相同前测水平下”的期末成绩差异。
另一理解:ANCOVA 是含分类变量与连续变量的线性模型
的检验与估计问题。
二、适用场景与优缺点
| 类型 | 说明 |
|---|---|
| 适用场景 | 实验/准实验中调整基线;降低误差方差、提高功效;观测研究中控制可测混杂(谨慎解释);比较调整均数(least-squares means)。 |
| 核心优点 | 比单纯 ANOVA 更高效(协变量与 Y 相关时);可输出调整后组间差;与 fitlm/anovan 统一。 |
| 局限与缺点 | 关键假定:组间斜率平行、协变量与处理在实验中独立、线性关系正确;观测数据中协变量可能是中介,调整后会“调掉”部分效应;不能替代随机化。 |
三、核心原理
1. 基本模型(单因素 + 单协变量)
全为 0(调整后组均值相等)。
2. 平行斜率假定
完整交互模型允许 随组变化:
若 交互显著,则“单一调整处理效应”不成立,应报告各组不同斜率或改用其它模型(如分层、非线性)。
3. 调整均数
在协变量取某参照值(常取总均值)时,各组的预测均值。比较的是调整均数之差,不是原始均数之差。
4. 与回归的关系
把 Group 写成哑变量,ANCOVA 就是普通线性回归。F 检验与 fitlm 的系数检验一致。
四、关键决策
1. 协变量如何选?
- 理想:基线测量、不受处理影响的预后因子;
- 避免:处理之后才产生的变量(可能是中介);
- 实验中:即使随机化,协变量仍可提高精度。
2. 中心化
对 中心化后,截距项解释更清晰;交互模型中尤其推荐。
3. 多个协变量
可纳入多个,但注意共线性与过度调整;报告调整集。
4. 假定失败
斜率不平行:做 Johnson–Neyman 或分组回归;非线性:加多项式/样条;异方差:稳健 SE。
五、MATLAB 示例
rng(9);
n = 40;
group = [ones(n,1); 2*ones(n,1)];
x = [randn(n,1)*10+50; randn(n,1)*10+52]; % 前测略不平衡
% 真模型:后测 = 30 + 0.6*前测 + 4*处理 + 噪声
y = 30 + 0.6*x + 4*(group==2) + 3*randn(2*n,1);
T = table(categorical(group), x, y, 'VariableNames', {'Group','Pre','Post'});
% ANCOVA 作为线性模型
mdl = fitlm(T, "Post ~ Group + Pre");
disp(mdl);
% 平行性:含交互
mdl_int = fitlm(T, "Post ~ Group * Pre");
disp(mdl_int);
fprintf("交互项 p = %.4g\n", mdl_int.Coefficients.pValue(end));
% 调整均数:在 Pre = 总均值处预测
pre0 = mean(x);
yhat1 = predict(mdl, table(categorical(1), pre0, 'VariableNames', {'Group','Pre'}));
yhat2 = predict(mdl, table(categorical(2), pre0, 'VariableNames', {'Group','Pre'}));
fprintf("调整均数: G1=%.2f, G2=%.2f, 差=%.2f\n", yhat1, yhat2, yhat2-yhat1);
% 与不调整 ANOVA 对照
[p0, tbl0] = anova1(y, group, "off");
fprintf("不调整 ANOVA p=%.4g;ANCOVA 中 Group 效应见模型表\n", p0);
figure;
gscatter(x, y, group); hold on;
% 画平行拟合线
xx = linspace(min(x), max(x), 50)';
plot(xx, predict(mdl, table(categorical(ones(50,1)), xx, 'VariableNames', {'Group','Pre'})), "b-");
plot(xx, predict(mdl, table(categorical(2*ones(50,1)), xx, 'VariableNames', {'Group','Pre'})), "r-");
xlabel("前测"); ylabel("后测"); title("ANCOVA 平行线");
六、如何解释结果
- 协变量是什么、为何可调;
- 平行斜率检验结果;
- 调整后组间差、CI、p;
- 协变量斜率及其意义;
- 调整均数表;
- 与未调整分析的对照;
- 因果语言是否有设计支持。
七、常见误区
1. 调整处理的后果变量
例如用“训练时长”调整“训练是否参加”的效应,可能调掉真实路径。
2. 不检查平行斜率
各组斜率不同时,单一“处理效应”随 变化。
3. 把 ANCOVA 当作观测数据的万能去混杂
未测混杂、测量误差、模型错设仍在。
4. 只报调整 p 值,不报调整差
读者需要知道效应大小。
八、小结
ANCOVA 的核心是:
在线性控制连续协变量后,比较各组的调整均数。
它能提高实验精度、纠正基线不平衡,但必须检查平行斜率,并谨慎选择协变量。写成 fitlm 的通用线性模型后,诊断与扩展(交互、样条、稳健 SE)都会更自然。