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

文摘   教育   2024-09-09 22:03   山西  

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

🍓 课程推荐:2024 空间计量专题
主讲老师:范巧 (兰州大学)
课程时间:2024 年 10 月 2-4 日 (三天)
课程咨询:王老师 18903405450(微信)

 课程特色 · 2024空间计量

👉 一、从“零基础”到“高水平”的课程设计

  • 兼顾基础知识、主流模型与前沿模型
  • 既考虑软件安装、程序编写以及空间权重矩阵设计等 基础知识 讲授,更强调时空面板地理加权回归模型、贝叶斯空间计量模型、矩阵指数模型、空间计量交互模型与空间面板似不相关回归模型等 前沿模型 的传授。

👉 二、“保姆级”的空间计量代码

  • 编写与校准所有模型的MATLAB代码,简化实操环节
  • 模型的估计与检验等 仅按照提供的Excel数据版式 搜集与整理原始数据,即可一次性出结果并作图

👉 三、“最多上新” 的内容体系

  • 新增 矩阵指数模型、短面板空间似不相关模型、空间计量交互模型、贝叶斯空间计量模型等
  • 新增 前沿应用案例,包括空间计量与索洛余值法、随机前沿分析与数据包络分析等的互嵌研究,阐释基于空间计量的产业空间结构优化评价方法。
  • 新增 Dagum空间基尼系数、核密度估计、空间马尔科夫链与空间收敛性等内容,阐释现实研究中对空间收敛性的应用“谬误”。


作者:王俊 (中山大学)
邮箱:wangj676@mail2.sysu.edu.cn


目录

  • 1. 滚动窗口回归

  • 2. rollreg 命令

  • 3. rolling 命令

  • 4. rolling2 命令

  • 5. asreg 命令

  • 6. 参考文献

  • 7. 相关推文



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


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

  • 专题:数据处理
    • 滚动吧统计量!Stata数据处理
    • Stata数据处理:用-astile-快速创建分组
    • 穿透财务障眼法:盈余管理指标测算及 Stata 实操
  • 专题:Stata绘图
    • Stata绘图:用-bytwoway-实现快速分组绘图
  • 专题:Stata程序
    • Stata:runby - 一切皆可分组计算!
  • 专题:结果输出
    • sumup:快速呈现分组统计量
  • 专题:回归分析
    • Stata:各类盈余管理指标估算方法
    • Stata: 如何检验分组回归后的组间系数差异?
    • 残差是个宝:盈余管理、过度投资、超额收益怎么算?
    • Stata: 获取分组回归系数的三种方式


🍓 课程推荐:2024 空间计量专题
主讲老师:范巧 (兰州大学)
课程时间:2024 年 10 月 2-4 日 (三天)
课程咨询:王老师 18903405450(微信)


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


🍏 关于我们

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

连享会
连玉君老师团队分享,主页:lianxh.cn。白话计量,代码实操;学术路上,与君同行。
 最新文章