跳到主要内容

F 检验

一、直观理解:比较的是“两摊波动谁更大”​

F 检验基于 F 分布,核心图像是两个方差估计之比。如果分子代表的波动显著大于分母,就拒绝“两者来自同一波动水平”的假设。

它在建模里最常见的三类用途是:

  1. 方差齐性检验:两组(或多组)方差是否相等;
  2. 回归/方差分析整体显著性:模型解释的方差是否大于残差方差;
  3. 嵌套模型比较:更复杂的模型是否显著改善了拟合。

可以把 ANOVA 想成:总波动拆成“组间波动 + 组内波动”,若组间相对组内足够大,就认为各总体均值不全相等。这个“足够大”正由 F 统计量衡量。

二、适用场景与优缺点​

类型说明
适用场景正态假定下比较方差;单因素/多因素方差分析;线性回归的整体 F 或局部约束 F;嵌套线性模型的显著性。
核心优点与方差分解框架一致,解释清楚;是 ANOVA 与线性模型的标准输出;可同时检验多个参数约束。
局限与缺点对正态性敏感(尤其方差齐性检验);方差比检验功效与稳健性往往不如更现代的替代;多重比较仍需后续步骤。

使用前确认:

  1. 响应是否连续、近似正态;
  2. 各组是否独立;
  3. 做均值比较时,方差齐性是否需要;不齐时考虑 Welch ANOVA 或变换;
  4. 显著之后要做什么两两比较或效应量报告。

三、核心原理​

1. F 分布​

若 U∼χν12U\sim\chi^2_{\nu_1},V∼χν22V\sim\chi^2_{\nu_2} 独立,则

F=U/ν1V/ν2∼Fν1,ν2F=\frac{U/\nu_1}{V/\nu_2}\sim F_{\nu_1,\nu_2}

2. 两样本方差齐性(经典形式)​

F=s12s22F=\frac{s_1^2}{s_2^2}

在 H0:σ12=σ22H_0:\sigma_1^2=\sigma_2^2 且正态 i.i.d. 下,F∼Fn1−1,n2−1F\sim F_{n_1-1,n_2-1}。实践中常把较大方差放分子,并做双侧调整;或直接使用 Levene / Brown–Forsythe 等更稳健的齐性检验。

3. 单因素 ANOVA 的 F 检验​

kk 组,组 ii 样本量 nin_i,总均值为 Yˉˉ\bar{\bar Y}:

SST=∑i∑j(Yij−Yˉˉ)2\mathrm{SST}=\sum_i\sum_j(Y_{ij}-\bar{\bar Y})^2 SSB=∑ini(Yˉi−Yˉˉ)2,SSW=∑i∑j(Yij−Yˉi)2\mathrm{SSB}=\sum_i n_i(\bar Y_i-\bar{\bar Y})^2,\quad \mathrm{SSW}=\sum_i\sum_j(Y_{ij}-\bar Y_i)^2 F=MSBMSW=SSB/(k−1)SSW/(n−k)F=\frac{\mathrm{MSB}}{\mathrm{MSW}}=\frac{\mathrm{SSB}/(k-1)}{\mathrm{SSW}/(n-k)}

H0:H_0: 所有组均值相等。拒绝 H0H_0 只说明“不全相等”,不等于每对都有差异。

4. 线性回归整体 F​

对模型 Y=Xβ+εY=X\beta+\varepsilon,

F=MSRMSE=(SST−SSE)/pSSE/(n−p−1)F=\frac{\mathrm{MSR}}{\mathrm{MSE}}=\frac{(\mathrm{SST}-\mathrm{SSE})/p}{\mathrm{SSE}/(n-p-1)}

检验 H0:H_0: 除截距外所有斜率系数为 0。

5. 嵌套模型偏 F 检验​

全模型与简化模型的残差平方和之差,标准化后得 F,用于检验若干系数是否同时为 0(例如一组哑变量是否整体有用)。

四、关键决策​

1. 方差齐性:用谁?​

经典 s12/s22s_1^2/s_2^2 对正态敏感。更常用 Levene 检验(对中位数的绝对偏差做 ANOVA)。齐性只是手段:最终关心均值时,不齐可直接 Welch。

2. ANOVA 显著后做什么?​

预先计划的对比(contrast)或事后两两比较(Tukey、Dunnett)。禁止只挑最大最小两组做 t 而不校正。

3. 效应量​

报告 η2=SSB/SST\eta^2=\mathrm{SSB}/\mathrm{SST} 或偏 η2\eta^2,避免只给 p 值。

4. 回归中的 F 与 t​

单个系数的 t 检验与自由度为 1 的偏 F 等价。多系数联合假设必须用 F(或似然比),不能看“每个 t 都不显著就联合不显著”。

五、MATLAB 示例​

rng(3);
% ---- 1) 两样本方差比(演示)----
x = normrnd(0, 1.0, 40, 1);
y = normrnd(0, 1.6, 45, 1);
[h, p, ci, stats] = vartest2(x, y);
fprintf("方差比检验 F=%.3f, p=%.4g\n", stats.fstat, p);

% Levene 思想:对 |x-median| 做 t/ANOVA(示意)
dx = abs(x - median(x)); dy = abs(y - median(y));
[~, p_lev] = ttest2(dx, dy);
fprintf("基于绝对偏差的齐性粗检 p=%.4g\n", p_lev);

% ---- 2) 单因素 ANOVA ----
g1 = [5.1 5.3 4.9 5.0 5.2];
g2 = [5.8 6.0 5.7 5.9 6.1 5.6];
g3 = [4.8 4.7 5.0 4.6 4.9];
allx = [g1(:); g2(:); g3(:)];
group = [repmat("A", numel(g1), 1); repmat("B", numel(g2), 1); repmat("C", numel(g3), 1)];
[p_anova, tbl, stats_a] = anova1(allx, group, "off");
disp(tbl);
fprintf("ANOVA p = %.4g\n", p_anova);

% 事后多重比较
figure; multcompare(stats_a); title("Tukey 多重比较");

% 效应量 eta^2
SSB = tbl{2,2}; SST = tbl{4,2};
eta2 = SSB / SST;
fprintf("eta^2 = %.3f\n", eta2);

% ---- 3) 回归整体 F:fitlm ----
n = 100;
X1 = randn(n,1); X2 = randn(n,1);
Y = 1 + 0.8*X1 + 0.0*X2 + 0.7*randn(n,1);
T = table(X1, X2, Y);
mdl = fitlm(T, "Y ~ X1 + X2");
disp(mdl);
fprintf("回归 F=%.3f, p=%.4g, R^2=%.3f\n", ...
mdl.ANOVA.F(1), mdl.ANOVA.pValue(1), mdl.Rsquared.Ordinary);

六、如何解释结果​

  1. 写明 H0H_0 与检验类型(齐性 / ANOVA / 回归整体 / 偏 F);
  2. 给出 F 值、两个自由度、p 值;
  3. ANOVA 中报告各组均值与 η2\eta^2;
  4. 回归中配合 R2R^2、调整 R2R^2 与系数表;
  5. 显著后说明后续多重比较或变量选择结论;
  6. 诊断:残差正态性、齐方差、独立性。

表述示例:“三组工艺的强度均值存在显著差异(F(2,14)=18.6,p<0.001,η²=0.73)。Tukey 比较显示 B 高于 A 与 C,A 与 C 无显著差异。”

七、常见误区​

1. ANOVA 显著却直接说“每组都不同”​

F 检验是全局检验,两两关系要靠多重比较。

2. 用方差齐性检验“卡”得很死​

齐性检验本身可能功效低或对正态敏感;更稳妥的是结合残差图与稳健 ANOVA。

3. 把回归整体 F 显著理解成每个变量都有用​

整体 F 只说明“至少有一个预测变量有关”,单个变量看 t/偏 F。

4. 非嵌套模型硬做 F 比较​

偏 F 要求模型嵌套且基于同一数据集与同一估计框架。

5. 忽略方差分析的独立性​

重复测量、聚类数据应用混合模型或重复测量 ANOVA,而不是普通 anova1。

八、小结​

F 检验的本质是:

用两个均方(方差估计)之比,判断额外的结构(组别、回归、约束)是否解释了显著多于噪声的波动。

它是 ANOVA 与线性模型的骨架。用好 F 检验要配套方差分解表、效应量、诊断图和(必要时)多重比较,而不是只截取一个 p 值。