查看原文
其他

Stata:聚类标准误代码介绍

连享会 连享会 2023-10-24

👇 连享会 · 推文导航 | www.lianxh.cn

连享会课程 · 2023 五一论文班

作者:谢泽荟 (中山大学)
邮箱:xiezh39@mail2.sysu.edu.cn

编者按:本文部分内容参考自下文,特此致谢!
Source:Abadie A, Athey S, Imbens G W, et al. When should you adjust standard errors for clustering?[J]. The Quarterly Journal of Economics, 2023, 138(1): 1-35. PDF

温馨提示: 文中链接在微信中无法生效。请点击底部「阅读原文」。或直接长按/扫描如下二维码,直达原文:


目录

  • 1. 引言

  • 2. 是否聚类?聚类到什么层面?

  • 3. Stata 代码汇总

    • 3.1 一维聚类标准误

    • 3.2 二维聚类标准误

    • 3.3 crhdreg 命令

    • 3.4 wcbregress 命令

  • 4. 相关推文



1. 引言

标准误在统计推断中发挥着至关重要的作用,直接影响着系数的显著性和置信区间,并最终影响到假设检验的结论。因此,正确地估计标准误在实证分析的过程中显得尤为重要。

当干扰项满足独立同分布 (iid) 条件时, OLS 所估计的标准误是无偏的。但是当误差项之间存在相关性时,OLS 所估计的标准误是有偏的,不能很好地反映估计系数的真实变异性 (Petersen, 2009),故需要对标准误进行调整。在多种调整标准误的方式中,聚类调整标准误 (cluster) 是一种有效的方法 (Petersen, 2009)。

本文主要对是否聚类和聚类到什么层面这两个问题进行简要讨论,并对 Stata 中聚类调整标准误的实操代码进行汇总。

2. 是否聚类?聚类到什么层面?

聚类调整标准误的基本思想是放宽了随机误差项独立同分布的假定,允许组内个体的干扰项之间存在相关性,但不同组个体的干扰项之间彼此不相关。

尽管聚类后的标准误往往与聚类前存在较大差异,从而影响统计推断,但并非所有情况都需要聚类调整标准误。如果从大量人口中随机抽取单位样本,并且是否接受处理 (treatment) 在单位水平上是随机分配的,则不需要对最小二乘估计量的标准误进行聚类。即使结果变量存在组内相关性,聚类也不合适。在这种情况下,聚类可能会导致标准误过于保守 (增大),置信区间过宽。

当处理 (treatment) 的分配机制或抽样过程存在聚类性,则需要在该层面对标准误进行聚类。例如,某一政策的实施与否在地级市层面的决策,且抽样过程也是以地级市为单位 (尽管研究的个体单位可能是地级市中的企业),那么标准误就应该聚类到地级市层面。

针对面板数据的固定效应模型,聚类层面与固定效应模型并没有对应关系。一般而言聚类层级越高,对于相关性矩阵所施加的参数假设越少,结果越稳健。因此,如果本身控制了个体固定效应或者双向固定效应,为了结果更稳健,应该聚类到更高层面,例如村庄或县级。

3. Stata 代码汇总

3.1 一维聚类标准误

对标准误进行一维聚类调整:

* 截面数据,在公司层面进行聚类,以下两种写法等价
reg y x, cluster(id)
reg y x, vce(cluster id)

* 面板数据,在公司层面进行聚类,以下三种写法等价
xtset id year
xtreg y x, fe cluster(id)
xtreg y x, fe vce(cluster id)
xtreg y x, fe robust

3.2 二维聚类标准误

对标准误进行二维聚类调整,有以下几种方式:

lxhuse nlswork, clear

* cluster2 (Petersen-2009, RFS)
// 该命令没有帮助文件,所有功能都可以用 cgmreg 和 vce2way 代替
// 因此,建议日后不必使用该命令
cluster2 ln_wage $x, fcluster(idcode) tcluster(year)

* cgmreg (CGM2011, Mitchell Petersen's -cluster2.ado- 的升级版)
// 需手动下载:https://sites.google.com/site/judsoncaskey/data
// help cgmreg
cgmreg ln_wage $x, cluster(idcode year)
est store m4

* vce2way (CGM2011, 支持 Panel data, xtreg 等命令)
// ssc install vce2way
// help vce2way
vce2way reg ln_wage $x, cluster(idcode year)
est store m5

* vcemway (Gu and Yoo-2019, 该命令在 vce2way 的基础上扩展到多维)
// ssc install vcemway
// help vcemway
vcemway reg ln_wage $x, cluster(idcode year)
est store m6

* 结果对比
local m "m1 m2 m3 m4 m5 m6"
local mt "OLS Robust 1Clus 2_cgmreg 2_vce2way 2_vcemway"
esttab `m', mtitle(`mt') nogap b(%4.3f) se(%6.4f) brackets ///
star(* 0.1 ** 0.05 *** 0.01) s(N r2) compress

3.3 crhdreg 命令

* 命令安装
ssc install crhdreg, replace
* 语法结构
crhdreg depvar indepvarlist1 indepvarlist2 [if] [in] [, cluster1(varname) cluster2(varname)
iv(varname) dimension(real) folds(real) resample(real) median alpha(real) tol(real) maxiter(real)]

其中,

  • depvar:指定回归的被解释变量。
  • indepvarlist1:指定回归的内生解释变量。
  • indepvarlist2:指定回归的外生解释变量,通常是控制变量。
  • cluster1(varname):设置聚类变量。在单向或双向聚类中构建第一个聚类维度。不调用这个选项会自动导致执行更高维的 LS 回归或无聚类的高维 IV 回归。
  • cluster2(varname):设置聚类变量。在单向或双向聚类中构建第二个聚类维度。如果调用了 cluster1 而没有调用 cluster2,那么命令会执行的只有一种聚类方式 (以 cluster1 选项设置的变量为主) 的高维 LS 回归或高维 IV 回归。
  • iv(varname):设置 indepvarlist1 的工具变量。当这一选项不被调动时,该命令将执行高维 LS 回归。
  • dimension(real):设置 indepvarlist1 中变量的数量,这些变量的系数将显示在输出表中。默认值是 dimension(1)。它必须是一个正整数,不大于包含在 indepvarlist1indepvarlist2 中的变量总数。
  • folds(real):设置双重/偏置机器学习中交叉拟合的折叠次数 K。在无聚类或单向聚类的情况下,默认值为 folds(5)。在双向聚类的情况下,默认值是 folds(3)。它必须是一个大于 1 的正整数。
  • resample(real):设置双重/偏倚机器学习的精细样本调整的重采样次数。默认值是 resample(10)。它必须是一个正整数。
  • median:设置指示器,表示有限样本调整使用重新抽样的估计值的中位数。不调用这个选项会导致使用重新抽样的估计值的平均值。
  • alpha(real):设置弹性网络算法中的惩罚权重。默认值是 alpha(1),弹性网络算法是 LASSO (最小绝对收缩和选择操作)。如果这个选项被设置为 alpha(0),那么弹性网络算法就变成了岭回归模型。此外,这个参数必须是一个介于 0 和 1 之间的实数。
  • tol(real):设置公差作为弹性网络算法的数值解的停止标准。默认值是 tol(0.000001)。这个参数必须是严格的正实数。
  • maxiter(real):设置弹性网数值解的最大迭代次数。默认值是 maxiter(1000)。这个参数必须是一个自然数。

以 Calvi et al. (2021) 使用是否加入美国退休金401k计划对个人净固定资产的影响进行举例。

401k 计划是指美国 1978 年《国内税收法》新增的第 401 条 k 项条款的规定,指代一种由雇员、雇主共同缴费建立起来的完全基金式的养老保险制度。但是,个人选择养老保险会与家庭、年龄相关。相似家庭规模的人群更容易同时选择是否参与养老保险制度,同一年龄层的个体也更容易同时选择是否加入养老保险计划。

如果只使用稳健性标准误,就有可能忽视个体之间的相关性,导致结果有偏。而如果只针对单一层面的相关性进行聚类,又有可能未能完全考虑另一层面的个体相关对回归结果造成的偏误。

因此,针对这种情况,Chiang et al. (2022) 提出了双向稳健性标准误的估算方式,通过 crhdreg 命令估计加入 401 计划对个人净固定资产所造成的影响。

. * 导入数据
. bcuse 401ksubs, clear

. * 被解释变量是个人净固定资产 (nettfa),
. * 解释变量是是否加入 401 计划 (p401k),
. * 控制变量是个人年度收入
. crhdreg nettfa p401k inc
. est store eq_LS
. crhdreg nettfa p401k inc, cluster1(fsize) // 引入聚类在家庭规模变量 (fsize) 的标准误
. est store eq_c1
. crhdreg nettfa p401k inc, cluster2(age) // 引入聚类在年龄层面 (age) 的标准误
. est store eq_c2
. crhdreg nettfa p401k inc, cluster1(fsize) cluster2(age)
. // 引入聚类在家庭规模层面 (fsize) 的标准误、以及聚类在年龄层面 (age) 的标准误
. est store eq_c1c2
. crhdreg nettfa p401k inc, iv(e401k) cluster1(fsize) cluster2(age)
. //考虑到 p401k 可能存在内生性,假设 e401k 是合适的工具变量
. est store eq_iv
. esttab eq_*

-----------------------------------------------------------------------------------
(1) (2) (3) (4) (5)
-----------------------------------------------------------------------------------
p401k 13.20*** 10.57*** 13.20*** 13.34** 8.501
(6.98) (4.85) (6.99) (2.95) (1.73)
-----------------------------------------------------------------------------------
N 9275 9275 9275 9275 9275
-----------------------------------------------------------------------------------
t statistics in parentheses
* p<0.05, ** p<0.01, *** p<0.001

3.4 wcbregress 命令

在估计参数的聚类标准误差时,必须考虑总样本内不同样本群之间的相关性。但是,在许多程序中默认忽略这种相关性,这会使计算出的 OLS 标准误大大低于真实的 OLS 标准误。为了解决这个问题,应使用允许异方差或聚类间误差相关性存在的聚类稳健标准误 (CRVE)。

需要注意的是,该稳健标准误使用的前提假设是样本中的样本簇数量要相当大,一般来说要超过 30 组。当使用 CRVE 方法但样本簇的数量较小 (小于 30) 时,如果使用传统的 Wald 检验来检验系数有效性,可能会产生过度拒绝的问题。为了解决这个问题,我们引入新命令 wcbregress

wcbregress 可以选择使用 CRVE 方法进行参数的稳健性求解,同时还会返回用 Wild Cluster Bootstrap 方法对参数进行的有效性检验的结果。这个命令依赖于 Stata 内置的 regress 命令,因此 regress 的大多数选项都与 wcbregress 兼容。

* 命令安装
ssc install wcbregress, replace
* 语法结构
wcbregress depvar varlist [if] [in] [weight] [, options]

其中,depvar 被解释变量,varlist 不进入选择模型的解释变量。options 具体如下:

  • group(varname):用于生成各变量簇的变量名称;
  • robust:稳健地使用 CRVE 方法求解系数;
  • vce(vcetype):获得稳健标准误;
  • nonconstant(varname):进行无常数项回归;
  • hascons:使用用户提供的常数项进行回归;
  • tsscons:计算一系列常数项的平方和;
  • level(#):设置置信区间,默认是 95%;
  • seed(#):设置随机数种子;
  • detail:显示中间命令输出;
  • rep(#):用于计算标准误差或置信区间的 bootstrap 复制数,默认是 500。
. sysuse auto.dta, clear
. wcbregress price mpg headroom trunk weight, group(rep78) level(99)

Wild Cluster Bootstrap Linear regression
Number of obs = 74.000
Replications = 200.000
R-squared = 0.323
Adj R-squared = 0.283
Root MSE = 2497.033
----------------------------------------------------------------------------------------
Panel A: Point Estimates and Wild Cluster Bootstrap Std. Err.
----------------------------------------------------------------------------------------
| Bootstrap Normalized
price | Coef. Std. Err. z P>|z| [ 99% Conf. Interval ]
--------------------+-------------------------------------------------------------------
mpg | -54.7915 66.9427 -0.82 0.413 -168.339 58.756
headroom |-726.5434 243.1408 -2.99 0.003 -1150.295 -302.792
trunk | 23.0425 104.3392 0.22 0.825 -150.260 196.345
weight | 2.0119 1.1985 1.68 0.093 -0.080 4.104
_cons |3114.9403 4283.5837 0.73 0.467 -4541.290 10771.170
----------------------------------------------------------------------------------------
Panel B: Wild Cluster Bootstrap t-tests and Confidence Intervals
----------------------------------------------------------------------------------------
| Bootstrap [ 99% Conf. Interval ]
price | P>|t*| [ Symmetric CI ] [ Asymmetric CI ]
--------------------+-------------------------------------------------------------------
mpg | 0.520 -177.168 67.585 -177.168 67.585
headroom | 0.030 -1471.480 18.393 -1471.480 18.393
trunk | 0.790 -336.623 382.708 -350.185 382.708
weight | 0.500 -6.348 10.372 -4.879 10.372
_cons | 0.560 -12662.700 18892.580 -13886.579 18892.580
----------------------------------------------------------------------------------------

4. 相关推文

Note:产生如下推文列表的 Stata 命令为:
lianxh 聚类, m
安装最新版 lianxh 命令:
ssc install lianxh, replace

  • 专题:Stata命令
    • Stata:允许时间效应序列相关的面板二维聚类标准误-xtregtwo
    • Stata:双重机器学习-多维聚类标准误的估计方法-crhdreg
    • Stata:聚类分析-cluster
  • 专题:数据处理
    • Stata:原始聚类自助法(wild cluster bootstrap)-boottest
  • 专题:回归分析
    • 聚类异质性:使用summclust进行统计推断
    • Stata:聚类标准误的纠结
    • Stata:聚类调整标准误笔记
    • Stata:聚类调整后的标准误-Cluster-SE
    • 小样本下OLS估计的纠偏聚类标准误
  • 专题:面板数据
    • Stata:面板聚类标准误-自动确定最优聚类层级和数量-xtregcluster
    • wcbregress:面板聚类标准误

课程推荐:基于机器学习的因果推断方法
主讲老师:司继春
🍓 课程主页https://gitee.com/lianxh/YGqjp

New! Stata 搜索神器:lianxhsongbl  GIF 动图介绍
搜: 推文、数据分享、期刊论文、重现代码 ……
👉 安装:
. ssc install lianxh
. ssc install songbl
👉  使用:
. lianxh DID 倍分法
. songbl all

🍏 关于我们

  • 连享会 ( www.lianxh.cn,推文列表) 由中山大学连玉君老师团队创办,定期分享实证分析经验。
  • 直通车: 👉【百度一下: 连享会】即可直达连享会主页。亦可进一步添加 「知乎」,「b 站」,「面板数据」,「公开课」 等关键词细化搜索。


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存