Stata:聚类标准误代码介绍

发布时间:2023-03-29 阅读 1399

Stata连享会   主页 || 视频 || 推文 || 知乎 || Bilibili 站

温馨提示: 定期 清理浏览器缓存,可以获得最佳浏览体验。

New! lianxh 命令发布了:
随时搜索推文、Stata 资源。安装:
. ssc install lianxh
详情参见帮助文件 (有惊喜):
. help lianxh
连享会新命令:cnssc, ihelp, rdbalance, gitee, installpkg

课程详情 https://gitee.com/lianxh/Course

课程主页 https://gitee.com/lianxh/Course

⛳ Stata 系列推文:

PDF下载 - 推文合集

作者:谢泽荟 (中山大学)
邮箱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. 引言

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

当干扰项满足独立同分布 (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

相关课程

免费公开课

最新课程-直播课

专题 嘉宾 直播/回看视频
最新专题 文本分析、机器学习、效率专题、生存分析等
研究设计 连玉君 我的特斯拉-实证研究设计-幻灯片-
面板模型 连玉君 动态面板模型-幻灯片-
面板模型 连玉君 直击面板数据模型 [免费公开课,2小时]
  • Note: 部分课程的资料,PPT 等可以前往 连享会-直播课 主页查看,下载。

课程主页

课程主页

关于我们

  • Stata连享会 由中山大学连玉君老师团队创办,定期分享实证分析经验。
  • 连享会-主页知乎专栏,700+ 推文,实证分析不再抓狂。直播间 有很多视频课程,可以随时观看。
  • 公众号关键词搜索/回复 功能已经上线。大家可以在公众号左下角点击键盘图标,输入简要关键词,以便快速呈现历史推文,获取工具软件和数据下载。常见关键词:课程, 直播, 视频, 客服, 模型设定, 研究设计, stata, plus, 绘图, 编程, 面板, 论文重现, 可视化, RDD, DID, PSM, 合成控制法

连享会小程序:扫一扫,看推文,看视频……

扫码加入连享会微信群,提问交流更方便

✏ 连享会-常见问题解答:
https://gitee.com/lianxh/Course/wikis

New! lianxhsongbl 命令发布了:
随时搜索连享会推文、Stata 资源,安装命令如下:
. ssc install lianxh
使用详情参见帮助文件 (有惊喜):
. help lianxh