Stata:滚动回归的五个命令-rolling

发布时间:2020-12-26 阅读 17609

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

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

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

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

作者:王俊 (中山大学)


目录


1. 滚动窗口回归

此前,连享会分享了推文「滚动吧统计量!Stata数据处理」(微信版),重点介绍了如果获取滚动窗口统计量,如均值、标准差等。

在实证中分析中,我们也经常要以某个长度的窗口进行滚动回归。例如,在计算企业风险承担水平时,我们就需要计算连续三年的经行业调整的 ROA 标准差。

本文的主要目的是介绍滚动窗口回归命令 rollregrollingrolling2asreg 的用法,以帮助大家在实证分析中更好应用该方法。

2. rollreg 命令

语法

rollreg [depvar varlist] [if exp] [in range], move(#) | add(#) |
        dropfirst(#) stub(abbrev) [ robust bw(#) kernel(choice) noconstant
        graph(summary|full) ]
  • depvar 为被解释变量;
  • varlist 为解释变量;
  • move 为移动窗口大小;
  • add 设定初始窗口大小;
  • stub 设定新变量名称。

当然,在回归之前,必须要使用 tssetxtset 声明时间序列或面板数据。

案例

webuse invest2, clear 
xtset company time
//外网无法下载时,可以访问连享会数据仓库下载
//数据地址:https://gitee.com/arlionn/data/blob/master/data01/invest2.dta

*设定移动窗口为5
rollreg market invest time, move(5) stub(mktM) 

3. rolling 命令

语法

 rolling [exp_list] [if] [in], window(#) [options] :  command
  • window(#) 设定滚动的窗口大小,相当于每次滚动过程中需要的连续数据个数;
  • recursive 设定起始点不变,每次滚动窗口加 1;
  • rrecursive 设定结束点不变,每次滚动窗口加 1;
  • clear 用滚动的结果来替换原内存,即使原来内存里的数据没有被保存;
  • stepsize(#) 设定每次滚动窗口增加的时期个数;
  • start(time_constant) 滚动的起始时间点;
  • end(time_constant) 滚动的结束时间点。

在滚动回归之前,必须要 tssetxtset 声明时间变量。当使用 rolling 命令时,window(#) 选项是必须的,其含义是每次回归的窗口大小。

案例

clear
webuse lutkepohl2, clear 
tsset qtr
rolling _b _se, window(30): regress dln_inv dln_inc dln_consump
list start end in 1/10

//外网无法下载时,可以访问连享会数据仓库下载
//数据地址:https://gitee.com/arlionn/data/blob/master/data01/lutkepohl2.dta
     +-----------------+
     |  start      end |
     |-----------------|
  1. | 1960q1   1967q2 |
  2. | 1960q2   1967q3 |
  3. | 1960q3   1967q4 |
  4. | 1960q4   1968q1 |
  5. | 1961q1   1968q2 |
     |-----------------|
  6. | 1961q2   1968q3 |
  7. | 1961q3   1968q4 |
  8. | 1961q4   1969q1 |
  9. | 1962q1   1969q2 |
 10. | 1962q2   1969q3 |
     +-----------------+

可以看出来,从 1960q1 到 1967q2 共有 30 个时间单位,之后起始点和结束点都加 1,窗口大小保持不变。

webuse lutkepohl2, clear 
tsset qtr
rolling _b _se, window(30) recursive:  ///
        regress dln_inv dln_inc dln_consump
list start end in 1/10

当设定 recursive 选项时,起始时点被固定,结束时点每次向后滚动一个单位,那么 window 的大小也就会从 30 依次加 1。在该例中,观察值一共有 92 个,而滚动回归的窗口是 30,所以回归的总次数是 92-30+1=63

     +-----------------+
     |  start      end |
     |-----------------|
  1. | 1960q1   1967q2 |
  2. | 1960q1   1967q3 |
  3. | 1960q1   1967q4 |
  4. | 1960q1   1968q1 |
  5. | 1960q1   1968q2 |
     |-----------------|
  6. | 1960q1   1968q3 |
  7. | 1960q1   1968q4 |
  8. | 1960q1   1969q1 |
  9. | 1960q1   1969q2 |
 10. | 1960q1   1969q3 |
     +-----------------+

可以看出,从 1960q1 到 1967q2 共有 30 个时间单位,而后每次回归窗口加 1,起始点不变。

webuse lutkepohl2, clear 
tsset qtr
rolling _b _se, window(30) rrecursive: ///
        regress dln_inv dln_inc dln_consump
list start end in -10/-1

//外网无法下载时,可以访问连享会数据仓库下载
//数据地址:https://gitee.com/arlionn/data/blob/master/data01/lutkepohl2.dta

当设定 rrecursive 选项时,结束时点被固定,起始时点每次滚动向前推 1 单位。

     +-----------------+
     |  start      end |
     |-----------------|
 54. | 1973q2   1982q4 |
 55. | 1973q3   1982q4 |
 56. | 1973q4   1982q4 |
 57. | 1974q1   1982q4 |
 58. | 1974q2   1982q4 |
     |-----------------|
 59. | 1974q3   1982q4 |
 60. | 1974q4   1982q4 |
 61. | 1975q1   1982q4 |
 62. | 1975q2   1982q4 |
 63. | 1975q3   1982q4 |
     +-----------------+

可以看出,1975q3 到 1982q4 是 30 个时间单位,每次回归窗口加 1,结束时点不变。

Stata 默认会以 _b 开头来命名估计出的系数,并将结果保存下来。另外,可以在 rolling 后加上 _se,那么 stata 会将每个系数的标准差以 _se 为开头存下来。

4. rolling2 命令

另外一个命令是 rolling2。这个命令的做法其实和 rolling 是差不多的,但最大的一个不同点是,rolling 在对面板数据进行滚动回归时,会分组进行滚动回归,而 rolling2 就是混合回归。

例如,利用 help rolling2 的示例数据进行演示。

*rolling 滚动回归
webuse grunfeld , clear
rolling _b _se, window(8):  ///
        regress invest mvalue kstock
count

//外网无法下载时,可以访问连享会数据仓库下载
//数据地址:https://gitee.com/arlionn/data/blob/master/data01/grunfeld.dta

grunfeld.dta 是一份面板数据,共有 10 家公司,每家公司有 20 年数据,即总共 200 个观察值。当使用上述命令进行滚动回归时,每家公司会被分开分别进行滚动回归,那么总的回归次数就是 (20-8+1)*10=130

*rolling2 滚动回归
webuse grunfeld, clear
rolling2 _b _se, window(8) onepanel:  ///
         regress invest mvalue kstock
count

当使用 rolling2 的时候,它会将整个面板数据混合回归,也就是说,从整个面板数据中滚动找出 8 年的数据来回归,那么总的回归次数就是 20-8+1=13 次。

5. asreg 命令

滚动窗口回归需要大量的循环,但在运行的时候会遇到很多数据结构问题,诸如非平衡面板数据、重复值、缺失值等。而 asreg 对不同的数据结构并不会采用一种固定的方式估计,恰恰相反,它能识别出不同类别的数据集结构,并采用合适的方法。

除此之外,asreg 命令是利用 Mata 语言来完成的。因此,asreg 在数据集特别大的时候,优势非常明显,能够节约大量的时间。同时,asreg 可以将估计结果输出到现有内存中,这就减少了再去将估计结果与原数据集合并的麻烦。

语法

asreg depvar indepvars [if] [in] ///
      [, window([rangevar] #)    ///
	     recursive minimum(#)    ///
		 by(varlist) statistics_options]
  • window(#):设定滚动窗口长度;
  • recursive:起始点固定,结束点和滚动窗口增长;
  • by:分组变量;
  • minimum(#):用来回归的最小的观察值个数。

案例

. webuse grunfeld, clear
. bys company: asreg invest mvalue kstock,  ///
               wind(year 10) min(5)

分组估计执行完后,会自动产生一组以 _ 开头的新变量:

. des _*
        
variable name    variable label
-------------------------------------------
_Nobs            No of observatons
_R2              R-squared
_adjR2           Adjusted R-squared
_b_mvalue        Coefficient of mvalue
_b_kstock        Coefficient of kstock
_b_cons          Constant of the regression

我们也可以查看一下具体估计结果:

. list company year _Nobs _R2 _b_mv in 1/10, clean

       company   year    _Nobs     _R2   _b_mva~e  
  1.         1   1935        .       .          .  
  2.         1   1936        .       .          .  
  3.         1   1937        .       .          .  
  4.         1   1938        .       .          .  
  5.         1   1939    5.000   0.995      0.054  
  6.         1   1940    6.000   0.706      0.062  
  7.         1   1941    7.000   0.576      0.065  
  8.         1   1942    8.000   0.500      0.052  
  9.         1   1943    9.000   0.507      0.052  
 10.         1   1944   10.000   0.460      0.057  

关于 asreg 更详细介绍,请参考 help asreg

6. 参考文献

  • Zivot, E., J. Wang. 2003, Rolling analysis of time series[C], Modeling financial time series with s-plus®, Springer, 299-346. -Link1- -Link2-
  • StataProfessor - Rolling window regressions in Stata -Link-
  • StataProfessor - Rolling regressions, beta, t-statistics, and SE in Stata -Link-
  • StataProfessor - Stata Rolling command vs asreg for rolling regressions: Similarities and differences -Link-

7. 相关推文

Note:产生如下推文列表的命令为:lianxh runby 滚动 分组 盈余, m
安装最新版 lianxh 命令:ssc install lianxh, replace

相关课程

连享会-直播课 上线了!
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

New! lianxh 命令发布了:
随时搜索连享会推文、Stata 资源,安装命令如下:
. ssc install lianxh
使用详情参见帮助文件 (有惊喜):
. help lianxh