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
robust, mtitle(Homo Het_Robust) nogap
esttab homo
*-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 命令有 cluster2
、cgmreg
、vce2way
、以及 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)
"Bootstrap SE = " %6.4f r(sd)
dis
*--------------------------------------------------------------
*-对比:reg wage hours, vce(bs,reps(300) noheader nodots)
reg wage hours, robust noheader // White s.e.
*-Notes: | 主页: lianxh.cn |
* (1) 多数情况下,1000 次可重复抽样即可获得非常稳定的结果;vce(bs) 选项;
* (2) stata 中的多数命令都支持 help vce_option
help bs
* (3) 投稿前, 请设定种子值, 以保证结果可以重现;reg price weight, vce(bs,reps(1000) seed(13579))
help seed