全部版块 我的主页
论坛 提问 悬赏 求职 新闻 读书 功能一区 经管百科 爱问频道
376 2
2024-05-07
大佬们,求问:数据是一家公司在2011-2013年的日回报率。我要用6个月滚动回归估计月度系数,使用了
  • gen ym = mofd(date)
  • format ym %tm
  • rangestat (reg) y x, interval(ymnew -6 -1) by(Stkcd)但是回归结果并不是按6个月估计的呢?reg_nobs也不是30*6=180呀,它一直在变化呀,我是哪里出现问题了呢?谢谢啦

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2024-5-14 16:00:27
我用的rolling来跑滚动回归,供参考。
rolling _b,  window(加你的估计窗口数): reg y x control, option
具体见help rolling
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2024-7-14 11:48:57
你的问题在于使用滚动窗口进行回归时可能没有正确地处理数据或指定参数。`range`命令在`stata`中用于定义要分析的数据范围,但是当你指定`interval(ymnew -6 -1)`时,你实际上是在告诉Stata从当前月份向前回溯6个月(包括当前月)来选择数据点。

然而,你的`reg_nobs`值的变化可能是因为每个月的交易日数量不同。一个月可能有20个交易日,而另一个月可能有23个交易日。因此,在一个6个月滚动窗口中使用的观测数将在每次移动时发生变化。此外,如果在某段时期内没有足够的数据(例如假期或周末),这也会影响到观察的数量。

解决方法:
1. 确保你的日期变量(date)已经转换为适当的时间序列格式。
2. 使用`tsset date`命令指定时间序列的结构和排序依据。
3. 在使用`rangestat`之前,确保你已经对数据进行了适当的排序。你可以通过`sort Stkcd date`命令来实现。

然而,在处理滚动窗口回归时,一种常见的方法是直接用Stata的循环机制来管理这个过程:

```
tsset date
forvalues i = 1/36 {
    qui reg y x if date >= td(1jan2011+6m*i'-1) & date <= td(1jul2011+6m*i')
    mat b = e(b)
    scalar b_`i' = el(b,1,1)
}
```

这个循环将从2011年1月开始,每次向后移动六个月,并为每个窗口进行回归。这将确保你使用了正确的时间范围和观察数。

但请注意,上述代码是一个示例,你需要根据你的数据集调整起始日期、结束日期以及变量名。此外,你可能需要在循环中添加一些错误处理机制来避免由于缺失值或不足的观测值而引起的运行失败。
请确保修改`td(1jan2011+6m*i'-1)`和`td(1jul2011+6m*i')`中的日期,以适应你的数据集的时间范围。这里的`i'`是循环变量,在每次迭代中递增。

最后,请检查一下你是否在命令的开始部分正确地设置了日期格式,并对你的日期列使用了时间序列处理(例如 `tsset date`)。
```stata
format date %td
tsset date
```
确保这些基础步骤已经完成,然后再进行循环回归分析。

此文本由CAIE学术大模型生成,添加下方二维码,优先体验功能试用



二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群