跳到主要内容

Hausman 检验

一、直观理解:FE 和 RE 打架吗?​

Hausman 检验用于比较两种估计量:

  • 在原假设下都一致,但 RE(或有效估计)更有效;
  • 在备择假设下,只有 FE(稳健估计)一致,RE 不一致。

在面板 FE vs RE 的经典应用中:

  • H0:H_0: 个体效应与回归元不相关(RE 可用);
  • H1:H_1: 相关(应使用 FE)。

若两种估计的 β^\hat\beta 差异大到不能用抽样噪声解释,就拒绝 H0H_0,倾向 FE。

一句话:Hausman 是在问——图有效率的 RE,会不会牺牲一致性?

二、适用场景与优缺点​

类型说明
适用场景面板 FE/RE 选择;更一般的“有效估计 vs 稳健估计”比较(IV 等);报告模型选择依据。
核心优点形式标准、直觉清楚;把选择从纯口说变成可检验。
局限与缺点有限样本可能怪异(差矩阵非正定);依赖同方差等经典条件,与聚类稳健世界不完全匹配;显著与否不能代替对识别的专业判断;不拒绝不等于 H0H_0 为真(功效问题)。

三、核心原理​

设 β^c\hat\beta_c 为在 H0H_0 下有效且一致的估计(RE),β^e\hat\beta_e 为始终一致但 H0H_0 下较不有效的估计(FE)。统计量:

H=(β^e−β^c)T[Var^(β^e)−Var^(β^c)]−1(β^e−β^c)H=(\hat\beta_e-\hat\beta_c)^\mathsf{T} \big[\widehat{\mathrm{Var}}(\hat\beta_e)-\widehat{\mathrm{Var}}(\hat\beta_c)\big]^{-1} (\hat\beta_e-\hat\beta_c)

在 H0H_0 下渐近 χq2\chi^2_q,qq 为被比较的系数维数。

面板操作要点:

  1. 只比较两种方法都能估计的系数(时不变变量不在 FE 中);
  2. 使用可比较的样本与同一套 XX;
  3. 若 Var^(β^FE)−Var^(β^RE)\widehat{\mathrm{Var}}(\hat\beta_{FE})-\widehat{\mathrm{Var}}(\hat\beta_{RE}) 不正定,需用广义逆或改用辅助回归形式(Mundlak/Wooldridge)。

现代实践更推荐:

  • Mundlak 装置:把 xˉi\bar x_i 加入 RE,检验 xˉi\bar x_i 系数是否为 0;
  • 或直接基于稳健 SE 的 FE,以识别目标为准,而不是“唯 Hausman p 值”。

四、关键决策​

1. p 小怎么办​

选 FE(或相关随机效应模型),并报告差异大的系数。

2. p 大怎么办​

RE 未被拒绝,但仍需实质论证外生;可把 RE 作效率对照,关键结论用 FE 做稳健性。

3. 与聚类稳健冲突​

经典 Hausman 假设与聚类世界不一致时,优先稳健 FE + 理论,辅以 Mundlak 检验。

4. 不要机械​

政策处理很可能与地区固定特质相关——即使 Hausman 临界,也常先验选 FE/DID。

五、MATLAB 示例​

rng(22);
N = 80; T = 5;
id = repelem((1:N)', T);
a = repelem(randn(N,1), T);

% 情形A:x 与 a 相关 -> 应拒绝 RE
xA = 0.7*a + randn(N*T,1);
yA = a + 1.0*xA + 0.7*randn(N*T,1);

% 情形B:x 与 a 不相关 -> 不应拒绝
xB = randn(N*T,1);
yB = a + 1.0*xB + 0.7*randn(N*T,1);

function [bFE, bRE, H, p] = hausman_panel(id, x, y)
N = max(id); T = numel(y)/N;
% FE within
yw = y; xw = x;
ybar = zeros(N,1); xbar = zeros(N,1);
for i = 1:N
idx = id==i;
ybar(i) = mean(y(idx)); xbar(i) = mean(x(idx));
yw(idx) = y(idx)-ybar(i);
xw(idx) = x(idx)-xbar(i);
end
bFE = xw\yw;
e = yw - xw*bFE; sig_e2 = var(e,1);
% 简化 RE:方差分量 + 准去均值(单变量)
% between 回归残差方差
b_between = [ones(N,1) xbar]\ybar;
ub = ybar - [ones(N,1) xbar]*b_between;
sig_a2 = max(var(ub,1) - sig_e2/T, 0);
theta = 1 - sqrt(sig_e2/(sig_e2 + T*sig_a2));
ys = y; xs = x;
for i = 1:N
idx = id==i;
ys(idx) = y(idx) - theta*ybar(i);
xs(idx) = x(idx) - theta*xbar(i);
end
% 含截距
Z = [ones(numel(ys),1) xs];
b_all = Z\ys; bRE = b_all(2);
% 粗糙方差(仅示意,非严谨聚类)
seFE2 = sig_e2 / (xw'*xw);
eRE = ys - Z*b_all; sig2 = var(eRE,1);
V = sig2*inv(Z'*Z); seRE2 = V(2,2);
d = bFE - bRE;
vdiff = seFE2 - seRE2;
if vdiff <= 0
H = NaN; p = NaN;
else
H = d^2 / vdiff;
p = 1 - chi2cdf(H, 1);
end
end

[bFEA, bREA, HA, pA] = hausman_panel(id, xA, yA);
[bFEB, bREB, HB, pB] = hausman_panel(id, xB, yB);
fprintf("相关情形: FE=%.3f RE=%.3f H=%.3f p=%.4g\n", bFEA, bREA, HA, pA);
fprintf("外生情形: FE=%.3f RE=%.3f H=%.3f p=%.4g\n", bFEB, bREB, HB, pB);

% Mundlak 辅助:回归 y ~ x + xbar(i)
xbar_full = repelem(accumarray(id, xA, [], @mean), T);
mdl_m = fitlm([xA xbar_full], yA);
fprintf("Mundlak xbar 系数 p = %.4g(相关情形应显著)\n", ...
mdl_m.Coefficients.pValue(3));

注意:上面的方差与 Hausman 统计量为教学简化。正式报告应使用工具箱/自编的严谨协方差,或直接报告 Mundlak 检验与 FE 结果。

六、如何解释结果​

  1. 比较的估计量与样本;
  2. 各系数 FE/RE 对照表;
  3. H 统计量、自由度、p;
  4. 选择结论与稳健性;
  5. 若用 Mundlak,报告 xˉi\bar x_i 联合检验;
  6. 强调:模型选择服务识别目标,而非只追 p 值。

七、常见误区​

1. p>0.05 就宣称“证明了随机效应外生”​

只是未拒绝,可能是功效不足。

2. 比较了不同样本或不同变量集​

Hausman 变得无意义。

3. 差矩阵负定仍强行解释​

应改用稳健程序。

4. 忽视实质:处理分配与固定特质相关​

检验再漂亮也不能拯救错误故事。

八、小结​

Hausman 检验的核心是:

比较“始终一致”的 FE 与“H0H_0 下更有效”的 RE,若差异系统性显著,则放弃 RE。

它是面板模型选择的经典工具,但应与 Mundlak 装置、聚类稳健 FE 以及问题中的识别逻辑一起使用,而不是唯一的自动开关。