Stata:面板数据的稳健回归-xtrobreg和robreg

发布时间:2022-09-05 阅读 260

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下载 - 推文合集

作者:张迪 (中南财经政法大学)
邮箱zhangdi_16@126.com


目录


1. 引言

在正式介绍 xtrobreg 命令之前,首先了解一下稳健回归 (robust regression)。稳健回归是指将稳健估计方法应用于回归模型,以拟合大部分数据结构,同时识别出潜在的离群点、强影响点或与模型假设相偏离的结构。

在回归模型中,如果误差项服从正态分布,即符合 OLS 假设,那稳健回归结果与 OLS 结果并无差别。稳健回归的主要思路是将普通最小二乘回归中的目标函数修改,并且不同的目标函数对应不同的稳健回归方法。常见的稳健回归方法有:S 估计、GS 估计、MM 估计、LMS 估计、LTS 估计方法等。

xtrobreg 命令为面板数据提供了两种不同的稳健回归方法,即稳健的一阶差分估计 (robust first-differences estimators) 和稳健的成对差别估计 (robust pairwise-differences estimators)。

2. 理论背景

适用于一般面板数据的固定效应模型为:

其中,yit 是因变量,xit=(xit(1),,xit(p))TRp 是自变量组成的向量,βRp 是估计参数组成的向量,i 是单位个体,t 是时间,αi 是个体层面不随时间变化的个体固定效应。

这些个体固定效应可以通过简单的线性 (组内) 转换分离出来,步骤如下:

  1. 计算每个个体的时间平均值:
  1. 减去 y¯i.x¯i. ,得到真实值与均值的差值 y~itx~it
  1. 将 (3) 式代入 (1) 式模型得到:
  1. 其中,y¯i.=x¯i.β+αi,由此得 (4) 式:

可以看出,通过转换消除了模型中不随着时间变化的个体层面因素的影响。在研究中,之所以控制固定效应,是为防止遗漏变量带来的内生性问题。这种将个体固定效应的分离出来的方法一举两得,既遵循了控制个体固定效应以尽可能地避免内生性问题,又能够简化模型。

除了上面介绍的取平均值来分离个体固定效应的方法,还有其他方法。xtrobreg 命令就涉及两种分离转换的方式,分别是稳健的一阶差分估计 (robust first-differences estimators) 和稳健的成对差别估计 (robust pairwise-differences estimators)。

2.1 一阶差分估计

上述方法是通过取均值的方式分离个体固定效应,一阶差分估计通过差分的方式分离,最终结果如下:

其中,i=1,,nt=1,,T。而且在严格的外生性假设下,β 始终由 LS 估计得出。

2.2 成对差别估计

成对差别估计是由 Aquaro 和 Cížek (2013) 在文章中提出,他们认为可以通过取出每个个体中的所有成对差异来消除个体固定效应 αi

其中,i=1,,nt=1,,Ts=1,,t1

xtrobreg 命令默认的转换方式是成对差别估计 Δsyit=ΔsxitTβ+Δsεit,并根据转换数据进行稳健估计。同时,为了处理成对差别转换所引起的序列相关问题,标准误默认聚类在个体层面,也允许设置其他的聚类水平。

3. 命令介绍

xtrobreg 命令是 robreg 用于面板数据估计的命令,类似于 xtregreg 的关系。robreg 命令为线性回归模型提供了许多稳健的估计量。

3.1 命令安装

我们可以使用 Stata 的官方命令 ssc install 进行安装。

ssc install xtrobreg, replace

值得注意的是,xtrobreg 的命令需要在 stata11 及以上的版本中使用,还需要安装 robreg 命令和 moremata 命令。

ssc install robreg, replace
ssc install moremata, replace // 下载链接:http://fmwww.bc.edu/repec/bocode/m/moremata.zip

3.2 命令语法

xtrobreg 命令有四种语法结构,包括估计语法、结果报告语法、预测语法和转换语法。

Estimation
    xtrobreg subcmd depvar indepvars [if] [in] [weight] [, options ]

Replaying results
    xtrobreg [, reporting_options ]

Prediction
    predict [type] newvar [if] [in] [, predict_options ]

Convert data
    xtrobreg convert depvar [indepvars] [if] [in] [weight] [, convert_options ]

3.2.1 估计语法

xtrobreg subcmd depvar indepvars [if] [in] [weight] [, options ]

其中,subcmd 包括 robreg 命令的所有子命令,如 lsqmsmmltslqslms 等。这几个命令的具体含义可在 help robreg 中看到,具体为:

  • ls:最小二乘估计法;
  • q:分位数估计法;
  • m:广义最大似然估计法;
  • s:最小残差尺估计法;
  • mm:矩估计法;
  • lts:最小截尾平方估计法;
  • lqs:最小分位数平方估计法;
  • lms:最小中位数平方估计法。

options 选择项如下:

  • fd:使用一阶差分法 (first differences)。默认方法是成对差别估计法 (pairwise differences),对于最小二乘回归,成对差别估计量等于固定效应估计量。选项 fd 需要设置时间变量;
  • gmin(#):每组的最少观察次数为 #。数量 # 大于等于 2,默认为 gmin(2)。观察值小于 # 的组将被排除在估计样本之外;
  • gmax(#):每组的最大观察次数为 #。数量 # 大于等于 2,默认是不施加限制。观察值超过 # 的组将被排除在估计样本之外;
  • cluster(clustvar):基于函数的标准错误指定一个自定义的聚类变量。默认是在面板组上聚类;
  • vce(vcetype):使用 bootstrap 或者 jackknife 进行方差估计;
  • robreg_optionsrobreg 命令的所有选项。

其他说明:

  • 必须设置面板变量,使用 xtset 命令;
  • indepvars 可以是因子变量,如 i.varnamei.varname#i.varname 等;
  • 组中权重:计算方法是 pweigh 方法,除非指定 fd 方法,否则组中的权重必须是常量。

3.2.2 结果报告语法

xtrobreg [, reporting_options ]

其中,reporting_options 选择项与 robreg 命令一致,具体如下:

  • level(#):设置置信区间,默认置信区间为 level(95)
  • noheader:设置表标题;
  • notable :设置表内结果;
  • all:报告所有结果 (与 robreg srobreg mm 相关)。
  • display_options:其他的标准报告选项,详细内容使用 help estimation options 命令查看。

3.2.3 预测语法

predict [type] newvar [if] [in] [, predict_options ]

其中,predict_options 选择项如下:

  • xb:生成拟合值 a + xb,且此为默认值;
  • ue:生成复合残差 u_i + e_it
  • xbu:生成含固定效应的估计值 a + xb + u_i
  • u:生成固定效应 u_i
  • e:生成特殊误差项 e_it

3.2.4 转换语法

xtrobreg convert depvar [indepvars] [if] [in] [weight] [, convert_options ]

其中,convert_options 选择项如下:

  • fd:生成一阶差分值 (first differences),而不是生成成对差别值 (pairwise differences),默认情况下是生成成对差别值;
  • gmin(#):每组的最少观察次数为 #。数量 # 大于等于 2,默认为 gmin(2)。观察值小于 # 的组将被排除在估计样本之外;
  • gmax(#):每组的最大观察次数为 #。数量 # 大于等于 2,默认是不施加限制。观察值超过 # 的组将被排除在估计样本之外;
  • wvar(newvarname):权重变量的新名称。默认名称为 _weight。wexp 为权重表达式,如果忽略了权重,则 wexp=1。设 n_g 为组内的观察次数,设 n_avg 为组的平均大小 (未加权)。对于成对差别法,权重等于 wexp×navgng。在一阶差分 (选项 fd) 的情况下,权重等于 wexp;
  • keep(varlist):数据中保留的变量。这些变量在组内必须是常量,除非指定了fd;
  • clear:清除当前内存数据。

其他说明:

  • 必须设置面板变量,使用 xtset 命令;
  • 组中权重:计算方法是 pweighiweights 方法。 除非指定 fd 方法,否则组中的权重必须是常量。

4. stata 实操

4.1 robreg 命令

robreg 命令也是应对数据集中可能存在的离群值进行诊断和稳健回归的命令。接下来将通过简单的回归,分析和比较 robreg 命令在不同的稳健回归方法中的作用,xtrobreg 命令也拥有类似的稳健回归思路。

. clear all
. sysuse auto, clear
. reg price mpg weight headroom foreign
. est store ols
. robreg ls price mpg weight headroom foreign
. est store ls
. robreg s price mpg weight headroom foreign
. est store s
. robreg mm price mpg weight headroom foreign
. est store mm
. estout *, drop(scale: S: _cons) cells(b(star fmt(3)) t(par fmt(2))) ///
>     collabels(none) stats(hausman_p) style(smcl)

----------------------------------------------------------------------------
                      ols              ls               s              mm   
----------------------------------------------------------------------------
main                                                                        
mpg                15.031          15.031         -62.281         -37.867   
                   (0.21)          (0.19)         (-1.81)         (-0.89)   
weight              3.753***        3.753***        0.835           0.884*  
                   (5.90)          (4.71)          (1.03)          (2.06)   
headroom         -641.846        -641.846*       -252.217        -224.919   
                  (-1.94)         (-2.25)         (-1.50)         (-1.86)   
foreign          3648.619***     3648.619***     1230.326        1450.328** 
                   (5.44)          (5.60)          (1.56)          (3.06)   
----------------------------------------------------------------------------
hausman_p                                           0.033           0.612   
----------------------------------------------------------------------------

其中,关于效率值和 Hausman test 的结果为:

* robreg s price mpg weight headroom foreign 的结果:
S regression (28.7% efficiency)
Hausman test of S against LS:    chi2(4) = 10.494712      Prob > chi2 = 0.0329

* robreg mm price mpg weight headroom foreign 的结果:
MM regression (85% efficiency)
Hausman test of MM against S:    chi2(4) = 2.6856261      Prob > chi2 = 0.6117

回归结果显示:(1) LS 估计法和 reg 的回归系数保持一致,但是从结果数据面板中可以看出 robreg ls 结果中的 t 值更小,拥有更稳健的标准误,更好地考虑到组内扰动项相关的问题,拟合结果更可靠。

(2) robreg s price mpg weight headroom foreignrobreg mm price mpg weight headroom foreign 结果中有 Hausman test 的结果,如下列所示。这意味着,robreg subcmd 除了做模型拟合分析,还将两两模型的拟合结果做了比较。上述 Hausman test 结果表明,S 估计量和 LS 估计量的 Hausman test 表明存在相关的异常值;再看回归结果表,S 估计法和 LS 估计法拟合的回归系数差距很大,进一步说明存在相关的异常值。

. * 做出离群值的散点图
. robreg ls price mpg weight headroom foreign
. predict outlier, outlier
. two scatter price weight if outlier==0 || scatter price weight if outlier==1
. drop outlier

. robreg s price mpg weight headroom foreign
. predict outlier, outlier
. two scatter price weight if outlier==0 || scatter price weight if outlier==1
. drop outlier

. robreg mm price mpg weight headroom foreign
. predict outlier, outlier
. two scatter price weight if outlier==0 || scatter price weight if outlier==1

从上到下依次为 LS 估计法、S 估计法、MM 估计法的离群值散点图。可以看出,S 和 MM 稳健估计法对于离群值的处理相近,得出的拟合值也相近。而这两种方法与最小二乘法估计 LS 估计法处理离群值的方法存在差异,最小二乘估计纳入了更多的离群值,会对线性曲线的斜率产生影响,影响到最后的拟合值大小。

4.2 xtrobreg 命令

xtrobreg 命令与 robreg 命令一样,是应对数据集中可能存在的离群值进行诊断和稳健回归的命令。接下来将通过简单的回归,分析和比较 robreg 命令在稳健回归的作用。

4.2.1 离群值的处理

. clear all
. xtarsim y x1 eta, n(200) t(4) g(0) b(1) r(0) sn(5) seed(1234) // xtarsim创建面板数据集用于蒙特卡洛实验
. est clear 
. drawnorm x2 x3                     // 从多元正态分布中抽取样
. replace y=y+x2+x3 
. xtreg y x*, cluster(ivar) fe 
. est store FE_Clean                 // FE估计
. xtrobreg s y x* 
. est store PWDSE_Clean              // S估计
. xtrobreg mm y x* 
. est store PWDMME_Clean             // MM估计

. replace x1=x1+10 if uniform()>0.9  // 制造污染样本

. xtreg y x*, cluster(ivar) fe 
. est store FE_Contaminated          // FE估计
. xtrobreg s y x* 
. est store PWDS_Contaminated        // S估计
. xtrobreg mm y x* 
. est store PWDMM_Contaminated       // MM估计

. estout *, drop(scale: S: _cons) cells(b(star fmt(3)) t(par fmt(2))) ///
>     collabels(none) stats(hausman_p) style(smcl)

------------------------------------------------------------------------------------------------------------
                 FE_Clean     PWDSE_Clean    PWDMME_Clean    FE_Contami~d    PWDS_Conta~d    PWDMM_Cont~d   
------------------------------------------------------------------------------------------------------------
main                                                                                                        
x1                  0.997***        1.016***        0.993***        0.353***        0.999***        0.996***
                  (51.87)         (29.87)         (51.14)         (11.46)         (38.84)         (47.10)   
x2                  0.956***        0.975***        0.958***        0.914***        0.997***        0.979***
                  (23.15)         (11.98)         (21.72)          (9.45)         (16.67)         (21.22)   
x3                  0.950***        0.920***        0.920***        1.044***        0.865***        0.881***
                  (19.56)         (12.79)         (19.58)         (11.92)         (13.50)         (17.64)   
------------------------------------------------------------------------------------------------------------
hausman_p                           0.883           0.649                           0.000           0.904   
------------------------------------------------------------------------------------------------------------

其中,关于效率值和 Hausman test 的结果为:

* xtrobreg s y x* 的结果:
Pairwise-differences S regression (28.7% efficiency)
Hausman test of S against LS:    chi2(3) = .65730748      Prob > chi2 = 0.8832     

* xtrobreg mm y x* 的结果:
Pairwise-differences MM regression (85% efficiency)
Hausman test of MM against S:    chi2(3) =  1.645461      Prob > chi2 = 0.6491     

* xtrobreg s y x* 的结果:
Pairwise-differences S regression (28.7% efficiency)
Hausman test of S against LS:    chi2(3) = 350.31698      Prob > chi2 = 0.0000

* xtrobreg mm y x* 的结果:
Pairwise-differences MM regression (85% efficiency)
Hausman test of MM against S:    chi2(3) = .56784717      Prob > chi2 = 0.9038

回归结果显示:(1) 在未添加离群值之前的样本中,三种方法的拟合值将近,而且 Hausman test 的结果表明不拒绝原假设,与回归拟合值相近的结论相互印证。

(2) Hampel 等人研究表明一个常规的数据集合中可能存在着 1%-10% 的离群值,因此,此处随机生产离群值模拟实际应用中可能会遇到的数据类型。但是添加离群值之后,三种方法的拟合值差异较大:

  • S 估计和 MM 估计结果明显优于 FE 估计结果;
  • S 估计和 LS 估计的 Hausman test 的结果表明拒绝原假设;
  • MM 估计 和 S 估计的Hausman test 的结果表明不拒绝原假设;
  • MM 估计 和 S 估计的拟合值相近而且比较稳健;
  • FE 估计法未有效处理离群值,所得拟合值并不是无偏估计量。

4.2.2 数据转换

. clear all
. xtarsim y x1 eta, n(200) t(4) g(0) b(1) r(0) sn(5) seed(1234) // xtarsim创建面板数据集用于蒙特卡洛实验
. est clear 
. drawnorm x2 x3                    // 从多元正态分布中抽取样本 
. replace y=y+x2+x3
. replace x1=x1+10 if uniform()>0.9 // 制造污染样本
. save 抽样样本.dta,replace

. use 抽样样本.dta,clear
. xtrobreg ls y x*, noconstant cluster(ivar)
. est store LS_1           // FE估计
. xtrobreg s y x*, noconstant cluster(ivar)
. est store S_1            // S估计
. xtrobreg mm y x*, noconstant cluster(ivar)
. est store MM_1           // MM估计

. use 抽样样本.dta,clear
. xtrobreg convert y x*, wvar(wt)
. robreg ls y x* [pw=wt], noconstant cluster(ivar)
. est store LS_2           // FE估计
. robreg s y x* [pw=wt], noconstant cluster(ivar)
. est store S_2            // S估计
. robreg mm y x* [pw=wt], noconstant cluster(ivar)
. est store MM_2           // MM估计

. estout *, drop(scale: S: _cons) cells(b(star fmt(3)) t(par fmt(2))) ///
>     collabels(none) stats(hausman_p) style(smcl)

------------------------------------------------------------------------------------------------------------
                     LS_1             S_1            MM_1            LS_2             S_2            MM_2   
------------------------------------------------------------------------------------------------------------
main                                                                                                        
x1                  0.358***        1.017***        1.006***        0.358***        1.017***        1.006***
                  (11.77)         (41.13)         (46.32)         (11.77)         (41.13)         (46.32)   
x2                  0.866***        0.986***        0.973***        0.866***        0.986***        0.973***
                   (8.94)         (17.21)         (22.22)          (8.94)         (17.21)         (22.22)   
x3                  0.991***        0.908***        0.928***        0.991***        0.908***        0.928***
                  (10.61)         (16.67)         (19.25)         (10.61)         (16.67)         (19.25)   
------------------------------------------------------------------------------------------------------------
hausman_p                           0.000           0.801                           0.000           0.801   
------------------------------------------------------------------------------------------------------------

结果表明:直接用 xtrobreg subcmd 命令对模型进行稳健估计与用 xtrobreg convert 命令转换之后再使用 robreg subcmd 命令进行稳健估计的拟合值基本保持一致。这是因为 xtrobreg convert 命令通过转换将个体固定效应分离了,随后再使用 rebreg subcmd 命令进行稳健估计,与 xtrobreg subcmd 命令思想内核保持一致。

5. xtrobreg 和 robreg 对比

根据前面列举的示例,我们可以看出 xtrobreg 命令和 robreg 命令既有共性,也有其特殊的使用场合。

相同点:

  • 都是进行处理离群值,进行稳健估计的方法;
  • 都能使用 lsqmsmmltslqslms 估计方法。

不同点:

  • 处理的数据类型不同:robreg 命令一般用于截面数据的线性稳健性回归,可以在模型中加个体固定效应和时间效应等虚拟变量。xtrobreg 命令用于处理面板数据;
  • 对离群值的处理方式不同:robreg 命令直接使用 lsqm 等方法对模型进行稳健估计。xtrobreg 命令先对数据进行处理,拆分出个体固定效应,再进一步使用以上方法对模型进行稳健估计。

二者联系:xtrobregrobreg 命令通过 xtrobreg convert 命令联系起来,具体分两步:

  • 分离个体固定效应:使用 xtrobreg convert 命令分离出个体固定效应,而且永久转换了数据,不能恢复 ( xtrobreg 命令在回归之后会恢复原始数据,即使数据再次成为包含个体固定效应的原始数据,不影响后续的任何回归分析操作);
  • 稳健估计:在上一步的基础上用 robreg 命令进行稳健估计。

以上分两步回顾的结果与 xtrobreg 命令直接进行稳健估计的结果基本保持一致。

6. 参考文献

  • Verardi, V., B. Jenn, 2021, xtrobreg: A new command for pairwise difference robust panel estimators. -PDF-
  • Aquaro, M., and P. Cížek (2013). One-step robust estimation of fixed-effects panel data models. Computational Statistics and Data Analysis (57): 536-548. -PDF-
  • Adams, J., D. Hayunga, S. Mansi, D. Reeb, and Verardi V. (2019). Identifying and treating outliers in finance. Financial Management 48(2): 345-384. -PDF-

7. 相关推文

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