打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

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

🍎  我的甲壳虫:经典论文精讲 (6小时),嘉宾:连玉君

时间:2020 年 3月9日 | 3月10日,19:00-22:00. 「课程详情」


目 录

  • 1. runby 命令

    • 1.1 命令简介

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

  • 2. asreg 命令

    • 2.1 命令简介

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

  • 3. statsby 命令

    • 3.1 命令简介

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

  • 4. 总结

    • 相关资料


在回归分析中,经常需要做多分组的回归,如:分别按年度、行业进行回归。我们可以选择重复使用 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 |
|----------------------------------------|

连享会-直播平台上线了!

http://lianxh.duanshu.com

长按二维码观看最新直播课。

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 回归外其他指定命令的循环执行,以得到特定的分组统计量。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
盈余管理、过度投资怎么算?分组回归获取残差
【新消息】stata中如何同时控制时间、行业、企业固定效应?
Stata:面板VAR模型(pvar2命令)
求助:面板数据模型的选择?
互助问答第237期:有关组间系数检验的STATA程序问题
五种常用回归方法及其应用举例 | 调查问卷分析 | 问卷调查资料
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服