Stata: 获取分组回归系数的三种方式

发布时间:2020-03-08 阅读 875

Stata 连享会   主页 || 视频 || 推文

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

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

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

于颂阳(中山大学)
邮箱:nkyusongyang@163.com


目录


在回归分析中,经常需要做多分组的回归,如:分别按年度、行业进行回归。我们可以选择重复使用 regress 命令,或使用 forvaluesforeach 等循环语句实现这一需求,但当组别较多时工作将会变得非常繁复或复杂。

本文为大家总结了快捷地计算分组回归统计量的三种方式:runbyasregstatsby

本文将使用 Stata 手册中的 grunfeld 数据对三种命令进行举例说明。该数据源于 Grunfeld & Griliches (1960, "Is aggregation necessarily bad?") 。模型使用公司前期市场价值和固定资产价值两个因素解释了公司的总投资支出。样本包括了 10 家公司 1935-1954 年 20 年间的数据。

文中涉及三个核心变量:invest - 总投资支出;mvalue - 前期市场价值;kstock - 前期固定资产价值。

 

1. runby 命令

runby 命令的本质仍然是使用 forvaluesforeach 等循环语句执行分组计算。但便利之处在于我们无需书写完整的循环语句,只需提供核心计算公式即可。因此,我们首先使用 program define 语句定义一个简单的小程序,然后内嵌到 runby 语句之中。

1.1 命令简介

runby program_name , by(varlist) [ verbose useappend status allocate(#) ]

其中,program_name 为先前定义的程序,by(varlist) 用于设定分组变量,例如公司、年度、行业分类等。具体内容可参见 Stata 的 help 文件:help runby

1.2 实例:使用 runby 命令获得分组统计量和回归估计系数

以计算「每年度的平均投资支出」为例:

命令如下:

 *-安装命令
. ssc install runby, replace
 *-定义程序
. capture program drop one_mean
. program define one_mean
.    egen invest_mean=mean(invest)
. end
 *-Note:选中上述程序,按快捷键 Ctrl+R 将其读入内存

*-调入数据
. webuse grunfeld, clear

*-分组计算平均投资支出
. runby one_mean, by(year)

--------------------------------------
Number of by-groups    =            20
by-groups with errors  =             0
by-groups with no data =             0
Observations processed =           200
Observations saved     =           200
--------------------------------------

结果呈现如下:

 *-列示结果
. sort company
. list comp year invest* if year<1938, sepby(company)

     +------------------------------------+
     | company   year   invest   invest~n |
     |------------------------------------|
     |       1   1935    317.6     72.746 |
     |       1   1936    391.8    101.607 |
     |       1   1937    410.6    122.481 |
     |------------------------------------|
     |       2   1936    355.3    101.607 |
     |       2   1937    469.9    122.481 |
     |       2   1935    209.9     72.746 |
     |------------------------------------|
     |       3   1937     77.2    122.481 |
     |       3   1935     33.1     72.746 |
     |       3   1936       45    101.607 |
     |------------------------------------|

以计算「分年度的前期市场价值和固定资产价值估计系数」为例:

命令如下:

*-安装命令
. ssc install runby, replace

*-定义程序
. capture program drop one_reg
. program define one_reg
.    reg invest mvalue kstock, nocons
.    gen est_mvalue = _b[mvalue]
.    gen est_kstock = _b[kstock]
. end
*-Note:选中上述程序,按快捷键 Ctrl+R 将其读入内存

*-调入数据
. webuse grunfeld, clear

*-分组计算估计系数
. runby one_reg, by(year)

结果呈现如下:

 *-列示结果
. sort company
. list comp year est_mvalue est_kstock if year<1938, sepby(company)

      +----------------------------------------+
     | company   year   est_mva~e   est_kst~k |
     |----------------------------------------|
     |       1   1936   .08724322     .032088 |
     |       1   1935   .10264161   .00018481 |
     |       1   1937   .07615372   .20014886 |
     |----------------------------------------|
     |       2   1937   .07615372   .20014886 |
     |       2   1935   .10264161   .00018481 |
     |       2   1936   .08724322     .032088 |
     |----------------------------------------|
     |       3   1937   .07615372   .20014886 |
     |       3   1936   .08724322     .032088 |
     |       3   1935   .10264161   .00018481 |
     |----------------------------------------|

2. asreg 命令

runby 命令根据核心计算公式进行循环的结构为我们减轻了分组统计时编程的负担,但在计算回归系数的过程中我们仍需先定义一个回归程序,然后进行分组回归。相比之下,asreg 命令更为友好,回归的循环命令可以直接进行分组回归,得到估计系数、残差和拟合值等系列变量。

2.1 命令简介

该命令的语法结构如下:

asreg depvar indepvars [if] [in] [, window(rangevar #)  ///
      noconstant recursive minimum(#) by(varlist) ///
      {statistics_options} newey(#) fmb ///
      save(file name) first]

其中,by(varlist) 用于指定分组变量,例如 by(year, industry)minimum 用于指定在分组回归中,执行每组回归所需的最小观察值数量。具体内容可参见对应的帮助文件:help asreg

2.2 实例:使用 asreg 命令获得分组回归估计系数

以计算"分年度的前期市场价值和固定资产价值估计系数"为例:

命令如下:

*-安装命令
. ssc install asreg, replace

*-调入数据
. webuse grunfeld, clear

*-分组计算估计系数
. asreg invest mvalue kstock, by(year)

结果呈现如下:

 *-列示结果
. list comp year _Nobs  _adjR2 _b_mvalue _b_kstock  if year<1938, sepby(company)

     +-------------------------------------------------------+
     | company   year   _Nobs   _adjR2   _b_mva~e   _b_kst~k |
     |-------------------------------------------------------|
  1. |       1   1935      10    0.827      0.102     -0.002 |
  2. |       1   1936      10    0.610      0.084     -0.054 |
  3. |       1   1937      10    0.568      0.077      0.218 |
     |-------------------------------------------------------|
 21. |       2   1935      10    0.827      0.102     -0.002 |
 22. |       2   1936      10    0.610      0.084     -0.054 |
 23. |       2   1937      10    0.568      0.077      0.218 |
     |-------------------------------------------------------|
 41. |       3   1935      10    0.827      0.102     -0.002 |
 42. |       3   1936      10    0.610      0.084     -0.054 |
 43. |       3   1937      10    0.568      0.077      0.218 |
     |-------------------------------------------------------|

 

3. statsby 命令

statsby 命令与 runby 命令类似,同样为根据核心计算公式进行循环的结构,不同的在于 runby 命令将核心计算公式放在了自定义的程序中,而 statsby 命令中直接放在了语句结构中的 command 部分。

3.1 命令简介

该命令的语法结构如下:

 statsby exp_list , by(varname): command

其中,exp_list 用于指定返回值即要统计的参数,by(varname) 同上用于指定分组变量,例如by(year, industry) , command 用于指定回归命令。具体内容可参见 Stata 的 help 文件:help statsby

3.2 实例:使用 statsby 命令获得分组回归估计系数

以计算"分年度的前期市场价值和固定资产价值估计系数"为例:

命令如下:

*-调入数据
.  webuse grunfeld, clear

*-分组计算估计系数
.  statsby, by(year): reg invest mvalue kstock

呈现结果如下:

 *-列示结果
. list year _b_mvalue _b_kstock _eq2_stat_1 _eq2_stat_2

     +---------------------------------------------------+
     | year   _b_mva~e   _b_kstock   _eq2_s~1   _eq2_s~2 |
     |---------------------------------------------------|
  1. | 1935   .1024979   -.0019948    .865262   .8267655 |
  2. | 1936   .0837074   -.0536413   .6963937    .609649 |
  3. | 1937   .0765138    .2177224   .6637627   .5676949 |
  4. | 1938   .0680178    .2691146   .7055773   .6214565 |
  5. | 1939   .0655219    .1986646   .8266015   .7770591 |
     |---------------------------------------------------|
  6. | 1940    .095399    .2022906   .8392551    .793328 |
  7. | 1941   .1147638     .177465   .8562148   .8151334 |
  8. | 1942   .1428251     .071024    .857307   .8165376 |
  9. | 1943   .1186095    .1054119    .842064   .7969394 |
 10. | 1944   .1181642    .0722072    .875515   .8399478 |
     |---------------------------------------------------|
 11. | 1945   .1084709    .0502208   .9067973    .880168 |
 12. | 1946   .1379482    .0054134   .8947517   .8646807 |
 13. | 1947    .163927   -.0037072   .8912394    .860165 |
 14. | 1948   .1786673   -.0425555   .7888235   .7284874 |
 15. | 1949   .1615962   -.0369651   .8632568   .8241873 |
     |---------------------------------------------------|
 16. | 1950   .1762168   -.0220956   .8577138   .8170606 |
 17. | 1951   .1831405   -.1120569    .873773   .8377081 |
 18. | 1952   .1989208    -.067495   .8461224   .8021574 |
 19. | 1953   .1826739    .0987533   .8892606   .8576207 |
 20. | 1954   .1345116    .3313746   .8984501   .8694358 |

 

4. 总结

本文中所介绍的三种命令runbyasregstatsby 均可完成分组回归这一需求。

但在具体执行过程中,asreg 命令最为便捷,是专门用于分组回归得到特定统计量的命令,在应用过程中要注意该命令回归后返回值的变量名与regress 命令有所不同。

runby 命令与 statsby 命令类似,是对特定命令的循环执行,在进行分组回归时即是对regress 命令在不同组别的循环执行。相比asreg 命令,runby 命令与statsby 命令还可以实现除 OLS 回归外其他指定命令的循环执行,以得到特定的分组统计量。

相关资料

相关课程

连享会-直播课 上线了!
http://lianxh.duanshu.com

免费公开课:


课程一览

支持回看,所有课程可以随时购买观看。

专题 嘉宾 直播/回看视频
最新专题 DSGE, 因果推断, 空间计量等
Stata数据清洗 游万海 直播, 2 小时,已上线
研究设计 连玉君 我的特斯拉-实证研究设计-幻灯片-
面板模型 连玉君 动态面板模型-幻灯片-
面板模型 连玉君 直击面板数据模型 [免费公开课,2小时]

Note: 部分课程的资料,PPT 等可以前往 连享会-直播课 主页查看,下载。


关于我们

  • Stata连享会 由中山大学连玉君老师团队创办,定期分享实证分析经验。直播间 有很多视频课程,可以随时观看。
  • 连享会-主页知乎专栏,300+ 推文,实证分析不再抓狂。
  • 公众号推文分类: 计量专题 | 分类推文 | 资源工具。推文分成 内生性 | 空间计量 | 时序面板 | 结果输出 | 交乘调节 五类,主流方法介绍一目了然:DID, RDD, IV, GMM, FE, Probit 等。
  • 公众号关键词搜索/回复 功能已经上线。大家可以在公众号左下角点击键盘图标,输入简要关键词,以便快速呈现历史推文,获取工具软件和数据下载。常见关键词:课程, 直播, 视频, 客服, 模型设定, 研究设计, stata, plus, 绘图, 编程, 面板, 论文重现, 可视化, RDD, DID, PSM, 合成控制法

连享会主页  lianxh.cn
连享会主页 lianxh.cn

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

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

✏ 连享会学习群-常见问题解答汇总:
https://gitee.com/arlionn/WD