查看原文
其他

Stata:堆叠回归及组间差异联合检验

连享会 连享会 2023-10-24

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

连享会 · 效率分析专题

作者:李烨阳 (浙江大学)
邮箱:li_yeyang95@163.com

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

编者按:本文主要参考自下文,特此致谢!
Source:Oberfichtner M, Tauchmann H. Stacked linear regression analysis to facilitate testing of hypotheses across OLS regressions[J]. The Stata Journal, 2021, 21(2): 411-429.  -PDF-


目录

  • 1. 引言

  • 2. 命令应用场景

  • 3. 堆叠数据回归

  • 4. 命令介绍

  • 5. 应用实例

  • 6. 相关推文




1. 引言

在连享会之前的推文中,已经对组间系数差异检验方法进行了较为系统的介绍,相关推文如下:

推文主要介绍的方法
Stata: 如何检验分组回归后的组间系数差异?系统性方法总结
引入交叉项
基于似无相关模型的检验方法
基于组合检验的方法
Stata:虚拟变量交乘项生成和检验的简便方法引入交叉项
Stata:分组回归系数比较的新思路基于自抽样获得组间系数差的经验分布
自己动手做组间系数差异检验-bootstrap-bdiff基于组合检验的方法
基于自抽样获得组间系数差的经验分布

在此基础上,本文主要介绍 Stata 的外部命令 stackreg, 它通过堆叠数据回归分析和聚类稳健标准误估计的方法,进行基于似无相关模型的组间系数检验。与之前重点介绍的单方程的组间系数差异检验不同,该命令适用于方程组的组间系数差异联合显著性检验,同时该命令支持面板数据和多维聚类标准误,但只适用于普通最小二乘法。

2. 命令应用场景

stackreg 命令的核心功能是通过堆叠数据,来估计一个拥有多个因变量和相同自变量集的线性方程组。其中,方程组可以通过如下模型来刻画:

针对组间系数差异检验的问题,stackreg 命令的主要应用场景是对协变量进行平衡性检验 (此时 只有处理的分组变量),以及断点回归中的前定协变量的处理效应检验 (此时 是关于驱动变量的函数)。在这种情境下,如果单独对每个方程的组间系数差异进行显著性检验 (即平衡性检验),会存在多重假设检验偏误,造成错误拒绝原假设 (第 I 类错误) 的概率增大。

为了解决这一跨方程的联合显著性假设检验的问题,可以使用似无相关模型。一个常用的实操策略是使用 suest 命令。与 stackreg 相比,suest 在模型设定上具有更高的灵活性,例如可以组合不同模型类型 (OLS、Probit 等),而 stackreg 只允许 OLS。但 stackreg 在 OLS 回归方面更具有专精优势,它可以实现固定效应估计,允许多维聚类标准误,支持跨方程的参数约束。

3. 堆叠数据回归

堆叠数据回归分析 (stacked regression analysis) 需要先将数据堆叠并构造构造虚拟变量进行区分,然后在堆叠数据中运行一次回归命令得到联合估计结果。这里我们首先介绍何为 “堆叠数据”。假设待估计的方程组为:

原始数据的格式如下:
















堆叠数据是指将因变量数据从 wide 格式转化为 long 格式 (通过使用 reshapesreshape 命令实现)。在这里,我们对数据进行如下操作:

  • 将堆叠后的因变量命名为 y
  • 原始数据中的每一个样本生成一个唯一标识,储存在变量 tempid 中;
  • 用变量 exp 来标识每一份堆叠的数据 (即不同因变量对应的数据);
  • 生成变量 one,该变量的数值均赋值为 1,用于联合估计时更方便地区分不同方程的截距项。

转换后的数据格式为:







11


1
21


1
31


1
12


1
22


1
32


1

这样,我们就可以在 Stata 中通过运行一次回归命令实现联合估计。代码基础格式如下:

reg y i.exp#c.xm i.exp#c.xn i.exp#c.one, noconstant

通过堆叠数据进行一次回归得到的系数点估计,与在原始数据中分别估计每一个方程得到的系数点估计是一致的。即上述命令得到的系数点估计与在原始数据中运行下面的命令是一致的:

reg ya xm xn
reg yb xm xn
reg yc xm xn

这里主要为了解释堆叠数据的实现原理,并没有对标准误进行相应校正处理。具体如何实现多维聚类,如何对标准误进行校正,读者可以参考 Oberfichtner 和 Tauchmann (2021)。如果是对面板数据进行固定效应回归分析,则需要先对数据进行去中心化处理 (在 Stata 中可以通过 xtdata 命令实现),处理后可以按照上述步骤进行后续分析。

需要注意的是,stackregxtstackreg 命令本身并不能进行组间系数差异的联合显著性检验,而只是为联合显著性检验奠定基础。在运行 stackregxtstackreg 命令之后,可以通过运行 testtestparm 命令进行跨方程的联合显著性检验。

4. 命令介绍

命令安装:

net sj 21-2 st0641 // 查看程序包
net install st0641.pkg, replace // 安装程序文件
net get st0641.pkg, replace // 下载作者提供的 dofiles 和 data

命令语法:

stackreg depvars = indepvars [if] [in] [weight] [, options]
xtstackreg depvars = indepvars [if] [in] [weight] [, options]

其中,depvars 指因变量列表,indepvars 指自变量列表,均可以包括因子变量。详细内容可以在 Stata 中输入 help stackreg 进行查询。可选项包括:

  • fe:对面板数据 (需要先通过 xtset 命令声明) 进行固定效应估计。xtstackreg 等价于 stackreg 加入 fe 选项;
  • noconstant:去掉常数项;
  • constraints(numlist):加入线性约束。需要先通过 constraint 声明线性约束的形式;
  • nocommon:允许由于某因变量有缺失值导致的不同因变量对应方程的观测值有差异。若不加入该选项,则默认只选取没有缺失值的样本纳入回归估计;
  • cluster(clustvarlist):声明聚类标准误的聚类表示变量。运行多维聚类 (需安装 cgmreg 外部命令)。若不加入该选项,则默认使用原始观测值的标识符作为聚类变量 (即上表中的变量 tempid);
  • df(adjust|raw|areg):自由度调整类型,默认 df(adjust)
  • wald:加入该选项后,后续运行 testtestparm 命令提供 Wald 检验而不是 F 检验;
  • sreshape: 加入该选项后,在数据堆叠步骤中使用 sreshape 命令,默认使用 reshape 命令;
  • level(#):调整显著性水平;
  • edittozero(#):指定估计方差协方差的元素在何种程度上接近 0 时将其设置为 0,默认值为 edittozero (1)
  • omitted:加入该选项后,由于共线性而省略的变量将显示在结果中并标记为 omitted;
  • emptycells:加入该选项后,因子变量交互作用的空单元格将显示在结果中并标记为 empty;
  • display_options:与输出格式有关的选项,详见 help estimation options##display_options

5. 应用实例

这里我们对 stackreg 帮助文件中提供的例 1 进行详细说明,更多应用实例可以参考帮助文件。数据来源为 Kiel 和 McClain  (1995) 所提供数据的一个子集,包括马萨诸塞州 (North Andover) 1978 和 1981 年的住房价格与特征。

谣传垃圾焚化炉在 1979 年建立,因此将 1978 年作为基准年。在 1981 年开始建造垃圾焚化炉,到 1981 年底垃圾焚化炉会准备运营。基准回归采用了双重差分方法,研究建造垃圾焚化炉对房价的影响。变量 rprice 代表房价,变量 y81 代表指示年份是否为 1981 年的虚拟变量,变量 nearinc 代表住房是否靠近垃圾焚化炉的虚拟变量。agec.age#c.ageintstarealandroomsbaths 是一组包含因子变量形式的协变量。

. use http://fmwww.bc.edu/ec-p/data/wooldridge/kielmc, clear
. reg rprice age c.age#c.age intst area land rooms baths y81##nearinc

通过 stackregtestparm 命令进行协变量平衡性检验。即协变量 y81nearinc 交乘项回归系数是否具有显著性差异,也就是 DID 方法中 post 与 treat 交乘项回归系数是否具有显著性差异。堆叠数据回归和联合显著性检验的命令如下:

. stackreg age c.age#c.age intst area land rooms baths = y81##nearinc // 堆叠数据回归

Stacked linear regression Number of obs = 321
------------------------------------------------------------------------------
| Clust. Robust
| Coefficient std. err. t P>|t| [95% conf. interval]
-------------+----------------------------------------------------------------
age |
y81 | -4.248 3.718 -1.14 0.254 -11.562 3.066
nearinc | 27.038 5.752 4.70 0.000 15.721 38.355
y81#nearinc | -7.588 7.670 -0.99 0.323 -22.678 7.503
_cons | 12.748 3.234 3.94 0.000 6.386 19.110
-------------+----------------------------------------------------------------
c.age#c.age |
y81 | -1021.601 590.497 -1.73 0.085 -2183.348 140.146
nearinc | 1401.814 942.009 1.49 0.138 -451.499 3255.127
y81#nearinc | -147.613 1065.374 -0.14 0.890 -2243.636 1948.410
_cons | 1432.650 560.521 2.56 0.011 329.879 2535.422
-------------+----------------------------------------------------------------
intst |
y81 | -2975.371 925.218 -3.22 0.001 -4795.650 -1155.091
nearinc | -1.56e+04 823.295 -19.01 0.000 -1.73e+04 -1.40e+04
y81#nearinc | 3325.371 1263.156 2.63 0.009 840.232 5810.509
_cons | 22024.390 601.913 36.59 0.000 20840.183 23208.597
-------------+----------------------------------------------------------------
area |
y81 | 276.548 80.609 3.43 0.001 117.957 435.139
nearinc | -240.113 119.971 -2.00 0.046 -476.145 -4.081
y81#nearinc | -148.891 192.206 -0.77 0.439 -527.038 229.257
_cons | 2074.756 45.928 45.17 0.000 1984.396 2165.116
-------------+----------------------------------------------------------------
land |
y81 | -1.23e+04 4863.831 -2.53 0.012 -2.19e+04 -2748.863
nearinc | -3.07e+04 7135.934 -4.31 0.000 -4.48e+04 -1.67e+04
y81#nearinc | 13641.960 7938.129 1.72 0.087 -1975.555 29259.475
_cons | 52569.057 4645.291 11.32 0.000 43429.888 61708.226
-------------+----------------------------------------------------------------
rooms |
y81 | -0.065 0.101 -0.64 0.525 -0.264 0.135
nearinc | -0.794 0.159 -5.00 0.000 -1.106 -0.481
y81#nearinc | 0.179 0.226 0.79 0.430 -0.266 0.624
_cons | 6.829 0.072 94.87 0.000 6.688 6.971
-------------+----------------------------------------------------------------
baths |
y81 | 0.086 0.091 0.95 0.344 -0.092 0.264
nearinc | -0.655 0.111 -5.90 0.000 -0.874 -0.437
y81#nearinc | -0.118 0.186 -0.64 0.525 -0.483 0.247
_cons | 2.512 0.061 41.51 0.000 2.393 2.631
------------------------------------------------------------------------------

. testparm y81#nearinc // 联合显著性检验

( 1) [age]1.y81#1.nearinc = 0
( 2) [c.age#c.age]1.y81#1.nearinc = 0
( 3) [intst]1.y81#1.nearinc = 0
( 4) [area]1.y81#1.nearinc = 0
( 5) [land]1.y81#1.nearinc = 0
( 6) [rooms]1.y81#1.nearinc = 0
( 7) [baths]1.y81#1.nearinc = 0

F( 7, 320) = 2.71
Prob > F = 0.0096

可以看出,结果拒绝了协变量在政策实施前后没有系统性差异的原假设。

6. 相关推文

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

  • 专题:Stata教程
    • Stata:自己动手做组间系数差异检验-bootstrap-bdiff
  • 专题:Stata命令
    • 品头论足-distcomp:组间分布差异检验
  • 专题:数据处理
    • Stata数据处理:用-astile-快速创建分组
  • 专题:Stata绘图
    • Stata绘图-可视化:组间差异比较散点图
    • Stata绘图-组间差异可视化:不良事件火山图、点阵图
    • forest-森林图:分组回归系数可视化
    • Stata绘图:用-bytwoway-实现快速分组绘图
  • 专题:Stata程序
    • Stata:runby - 一切皆可分组计算!
  • 专题:结果输出
    • sumup:快速呈现分组统计量
  • 专题:回归分析
    • Stata:分组回归系数比较的新思路
    • Stata: 如何检验分组回归后的组间系数差异?
    • Stata: 获取分组回归系数的三种方式
  • 专题:倍分法DID
    • 倍分法:DID是否需要随机分组?

课程推荐:因果推断实用计量方法
主讲老师:丘嘉平教授
🍓 课程主页https://gitee.com/lianxh/YGqjp

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

🍏 关于我们

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


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

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