Stata连享会 主页 || 视频 || 推文 || 知乎 || Bilibili 站
温馨提示: 定期 清理浏览器缓存,可以获得最佳浏览体验。
New!
lianxh
命令发布了:
随时搜索推文、Stata 资源。安装:
. ssc install lianxh
详情参见帮助文件 (有惊喜):
. help lianxh
连享会新命令:cnssc
,ihelp
,rdbalance
,gitee
,installpkg
⛳ Stata 系列推文:
作者:张迪 (中南财经政法大学)
邮箱:zhangdi_16@126.com
目录
在正式介绍 xtrobreg
命令之前,首先了解一下稳健回归 (robust regression)。稳健回归是指将稳健估计方法应用于回归模型,以拟合大部分数据结构,同时识别出潜在的离群点、强影响点或与模型假设相偏离的结构。
在回归模型中,如果误差项服从正态分布,即符合 OLS 假设,那稳健回归结果与 OLS 结果并无差别。稳健回归的主要思路是将普通最小二乘回归中的目标函数修改,并且不同的目标函数对应不同的稳健回归方法。常见的稳健回归方法有:S 估计、GS 估计、MM 估计、LMS 估计、LTS 估计方法等。
xtrobreg
命令为面板数据提供了两种不同的稳健回归方法,即稳健的一阶差分估计 (robust first-differences estimators) 和稳健的成对差别估计 (robust pairwise-differences estimators)。
适用于一般面板数据的固定效应模型为:
其中,
这些个体固定效应可以通过简单的线性 (组内) 转换分离出来,步骤如下:
可以看出,通过转换消除了模型中不随着时间变化的个体层面因素的影响。在研究中,之所以控制固定效应,是为防止遗漏变量带来的内生性问题。这种将个体固定效应的分离出来的方法一举两得,既遵循了控制个体固定效应以尽可能地避免内生性问题,又能够简化模型。
除了上面介绍的取平均值来分离个体固定效应的方法,还有其他方法。xtrobreg
命令就涉及两种分离转换的方式,分别是稳健的一阶差分估计 (robust first-differences estimators) 和稳健的成对差别估计 (robust pairwise-differences estimators)。
上述方法是通过取均值的方式分离个体固定效应,一阶差分估计通过差分的方式分离,最终结果如下:
其中,
成对差别估计是由 Aquaro 和 Cížek (2013) 在文章中提出,他们认为可以通过取出每个个体中的所有成对差异来消除个体固定效应
其中,
xtrobreg
命令默认的转换方式是成对差别估计
xtrobreg
命令是 robreg
用于面板数据估计的命令,类似于 xtreg
与 reg
的关系。robreg
命令为线性回归模型提供了许多稳健的估计量。
我们可以使用 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
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 ]
xtrobreg subcmd depvar indepvars [if] [in] [weight] [, options ]
其中,subcmd
包括 robreg
命令的所有子命令,如 ls
、q
、m
、s
、mm
、lts
、lqs
、lms
等。这几个命令的具体含义可在 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_options
:robreg
命令的所有选项。其他说明:
xtset
命令;indepvars
可以是因子变量,如 i.varname
、i.varname#i.varname
等;pweigh
方法,除非指定 fd
方法,否则组中的权重必须是常量。xtrobreg [, reporting_options ]
其中,reporting_options
选择项与 robreg
命令一致,具体如下:
level(#)
:设置置信区间,默认置信区间为 level(95)
。noheader
:设置表标题;notable
:设置表内结果;all
:报告所有结果 (与 robreg s
和 robreg mm
相关)。display_options
:其他的标准报告选项,详细内容使用 help estimation options
命令查看。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
。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 为组的平均大小 (未加权)。对于成对差别法,权重等于 fd
) 的情况下,权重等于 wexp;keep(varlist)
:数据中保留的变量。这些变量在组内必须是常量,除非指定了fd;clear
:清除当前内存数据。其他说明:
xtset
命令;pweigh
和 iweights
方法。 除非指定 fd
方法,否则组中的权重必须是常量。
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
结果中的
(2) robreg s price mpg weight headroom foreign
和 robreg 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 估计法处理离群值的方法存在差异,最小二乘估计纳入了更多的离群值,会对线性曲线的斜率产生影响,影响到最后的拟合值大小。
xtrobreg
命令与 robreg
命令一样,是应对数据集中可能存在的离群值进行诊断和稳健回归的命令。接下来将通过简单的回归,分析和比较 robreg
命令在稳健回归的作用。
. 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% 的离群值,因此,此处随机生产离群值模拟实际应用中可能会遇到的数据类型。但是添加离群值之后,三种方法的拟合值差异较大:
. 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
命令思想内核保持一致。
根据前面列举的示例,我们可以看出 xtrobreg
命令和 robreg
命令既有共性,也有其特殊的使用场合。
相同点:
ls
、q
、m
、s
、mm
、lts
、lqs
、lms
估计方法。不同点:
robreg
命令一般用于截面数据的线性稳健性回归,可以在模型中加个体固定效应和时间效应等虚拟变量。xtrobreg
命令用于处理面板数据;robreg
命令直接使用 ls
、q
、m
等方法对模型进行稳健估计。xtrobreg
命令先对数据进行处理,拆分出个体固定效应,再进一步使用以上方法对模型进行稳健估计。二者联系:xtrobreg
和 robreg
命令通过 xtrobreg convert
命令联系起来,具体分两步:
xtrobreg convert
命令分离出个体固定效应,而且永久转换了数据,不能恢复 ( xtrobreg
命令在回归之后会恢复原始数据,即使数据再次成为包含个体固定效应的原始数据,不影响后续的任何回归分析操作);robreg
命令进行稳健估计。以上分两步回顾的结果与 xtrobreg
命令直接进行稳健估计的结果基本保持一致。
Note:产生如下推文列表的 Stata 命令为:
lianxh 离群值 权重 固定效应, m
安装最新版lianxh
命令:
ssc install lianxh, replace
免费公开课
最新课程-直播课
专题 | 嘉宾 | 直播/回看视频 |
---|---|---|
⭐ 最新专题 | 文本分析、机器学习、效率专题、生存分析等 | |
研究设计 | 连玉君 | 我的特斯拉-实证研究设计,-幻灯片- |
面板模型 | 连玉君 | 动态面板模型,-幻灯片- |
面板模型 | 连玉君 | 直击面板数据模型 [免费公开课,2小时] |
⛳ 课程主页
⛳ 课程主页
关于我们
课程, 直播, 视频, 客服, 模型设定, 研究设计, stata, plus, 绘图, 编程, 面板, 论文重现, 可视化, RDD, DID, PSM, 合成控制法
等
连享会小程序:扫一扫,看推文,看视频……
扫码加入连享会微信群,提问交流更方便
✏ 连享会-常见问题解答:
✨ https://gitee.com/lianxh/Course/wikis
New!
lianxh
和songbl
命令发布了:
随时搜索连享会推文、Stata 资源,安装命令如下:
. ssc install lianxh
使用详情参见帮助文件 (有惊喜):
. help lianxh