R7. 稳健型标准误的获取

整理人:秦利宾 (厦门大学)
邮箱:qlb150@163.com

1. 引言

在线性回归分析中,系数是一个随机变量,我们通常采用标准误衡量其准确程度。并且,基于不同假设,标准误的计算方式也不同,导致系数除以标准误得到的 t 统计量也有所差异,最终影响到统计推断。在本文中,我们将介绍三种常用的标准误计算方法:一是只考虑异方差的「White 异方差稳健型标准误」,二是允许组内相关、组间不相关的「聚类调整后的标准误」,三是假设更为灵活的「自抽样法 (Bootstrap) 稳健型标准误」。

在介绍三类常用标准误计算前,我们先回顾一下标准误和统计推断的概念。经过 ols 回归之后,我们可以得到系数值 \(b\),而标准误计算的最基本假设是干扰项满足独立同分布假设 (IID)。在小样本情况下,系数除以标准误就是 \(t\) 统计量,且服从自由度为 \(N-k\)\(t\) 分布,其中 \(N\) 为样本数,\(k\) 为模型中估计参数个数。在大样本情况下,系数除以标准误就是 \(z\) 统计量,且服从正态分布。当 \(t\) 分布自由度 $ N - k> 30$ 时,\(t\) 统计量和 \(z\) 统计量在分布上没有太大差别。

\[ \begin{array}{l} b / \mathrm{se}(b)=t \sim t(N-k) \quad \text {Small sample} \\ b / \mathrm{se}(b)=z \sim N(0, \sigma^{2}) \quad \text {Lage sample} \end{array} \]

2. White 异方差稳健型标准误

White (1980) 认为在异方差存在的情况下,ols 估计量仍是无偏、一致的,但是方差需要修正。此时,方差的正确形式为下式:

\[ \operatorname{Var}(b)=\left(X^{\prime} X\right)^{-1}\left(X^{\prime} Q X\right)\left(X^{\prime} X\right)^{-1} \]

其中,\(Q\)\(n \times n\) 阶方阵,对角元素为 \(\sigma^2_{i}\),即第 \(i\) 个元素的方差,对角线意外的元素全部为零。并且,\(\sigma^2_{i}\) 可由残差平方和 \(\hat{u}^2_{i}\) 表示。

在 Stata 中,我们仅需在回归命令后加 robust 就可实现异方差稳健标准误计算。具体代码如下:

sysuse nlsw88, clear
global x "ttl_exp race age industry hours"
reg wage $x          //干扰项服从独立同分布
est store homo
reg wage $x, robust  // White(1980)
est store robust
esttab homo robust, mtitle(Homo Het_Robust) nogap    
*-Note:这是 90% 以上的文献都采用的方法;
*       后续复杂模型的稳健型标准误也基本上以 White(1980) 为基础 

下图为普通 ols 结果和异方差调整后的 ols 结果,可以看出系数并没有发生变化,而 t 值发生了变化。这主要是因为 robust 调整的是标准误,与系数无关,而 t 值又是系数与标准误的比值。

对于截面数据,异方差问题更为普遍,因此我们通常都需要对其进行调整。

3. 聚类调整后的标准误

在异方差基础上,进一步放宽「干扰项独立同分布假设」,允许组内相关,而组间不相关,这时我们就要对方差进行聚类调整。

一维聚类调整

聚类调整只需在普通 ols 回归后加 cluster(clustvar)vce(cluster clustvar)。以 reg wage $x, vce(cluster industry) 为例,vce 为「variance covariance estimation」缩写,cluster 表示聚类调整,industry 为聚类对象,表示同行业干扰项相关,而不同行业彼此不相关。

二维聚类调整

使用二维聚类调整时,方差估计量由三个方差矩阵计算得来,其公式的一般表达式为:

\[ {\mathrm{V}}_{2 \mathrm{way}}[{b}]={\mathrm{V}}_{1}[{b}]+{\mathrm{V}}_{2}[b]-{\mathrm{V}}_{1 \cap 2}[{b}] \]

上述公式表明,二维聚类调整的本质即是在两个维度上分别进行一维的聚类调整,再将有交叉的部分去掉。

二维聚类调整的 Stata 命令有 cluster2cgmregvce2way、以及 vcemway。以 vce2way 为例,命令为 vce2way reg wage $x, cluster(industry occupation)

4. 自抽样法 (Bootstrap) 稳健型标准误

自抽样法假设当前样本是从总体中随机抽样得到,并且重复从总体中抽样得到的样本也会不同,实际上这种重复从总体中抽样并不现实,我们可以近似通过从样本中重复抽样来达到从总体重复抽样目的。

关于自抽样法稳健型标注误实现步骤如下:

  • 采用 ols 估计原始模型, 得到 \(x\) 的估计系数 \(b_{x}\)

  • 从样本中有放回地抽取 N 个观察值,执行 ols,记录系数估计值;

  • 将第 2 步重复进行 300 次,得到系数估计值的 300 个记录, 即 \(b_{j} = \{b_1, b_2, \ldots, b_{300} \}\)

  • 计算这 300 个估计值的标准差 \(\mathrm{sd}(b_{j}) = \mathrm{sd} \{b_1, b_2, \ldots , b_{300}\}\),将其视为实际估计值 \(b_x\) 的标准误,即 \(\mathrm{se}(b_x) = \mathrm{sd} (b_{j})\);

  • 计算 t 值: \(t = b_x/\mathrm{se}(b_x)\), 以及相应的 p 值。

在 Stata 中,我们仅需在回归中加上 vce(bs, rep(300)) 命令即可实现自抽样法稳健型标准误计算,其中 bs 为「bootstrap」简写,rep(300) 表示重复抽样 300 次。

help bootstrap        
sysuse nlsw88, clear
reg wage hours, vce(bs,reps(300))

*---------------------过程解析(了解思路即可)-------------------
sysuse nlsw88, clear
gen bj = .         //记录抽样估计结果
forvalues j = 1/300{             // 参见 [P3_loop.do]
    preserve                       // 参见 [P4_ado.do]
        bsample       //Bootstrap 抽样, 参见 [P5_sample.do]
        qui reg wage hours
    restore
    qui replace bj = _b[hours] in `j'
}

sum bj    // 计算标准差=SE(weight)
dis "Bootstrap SE = " %6.4f r(sd)
*--------------------------------------------------------------
*-对比:
  reg wage hours, vce(bs,reps(300) noheader nodots) 
  reg wage hours, robust noheader // White s.e.

*-Notes:                | 主页: lianxh.cn |
* (1) 多数情况下,1000 次可重复抽样即可获得非常稳定的结果;
* (2) stata 中的多数命令都支持 vce(bs) 选项;
      help vce_option
      help bs
* (3) 投稿前, 请设定种子值, 以保证结果可以重现;
      reg price weight, vce(bs,reps(1000) seed(13579))
      help seed