楼主: 苏玄777
7368 3

[编程问题求助] 如何滚动时间窗口求相关系数 [推广有奖]

  • 1关注
  • 0粉丝

大专生

30%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
118 点
帖子
8
精华
0
在线时间
89 小时
注册时间
2015-12-15
最后登录
2020-5-29

楼主
苏玄777 发表于 2018-7-20 08:20:08 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
2010年的ΔACCO 与ΔCFO相关系数用08年09年10年三年数据计算出来,2011年的ΔACCO 与ΔCFO相关系数用09年10年11年数据计算出来;每个t年的ΔACCO 与ΔCFO相关系数都是用t-2年t-1年t年数据计算出来。请问用stata如何编写程序
clear
input long stkcd int year float(ΔACCO ΔCFO)
2 2008   -.3090124     .2148343
2 2009  -.06869491    .07794617
2 2010    .0749478   -.06134686
2 2011  -.01279954 -.0005399585
2 2012 .0009788461  -.003139315
2 2013 .0006075762   -.00750001
2 2014  -.09391301    .08199203
2 2015   .06853287    -.0555096
2 2016  -.03447585   .033163782
2 2017  -.03704573   .034378596
4 2008  -.05628811    .04243891
4 2009  -.15788975    .26925993
4 2010    .3853872    -.3285901
4 2011   -.1960037     .1560428
4 2012   .01971974   -.01565773
4 2013    .1867557   -.19854183
4 2014  -.13005705    .08622274
4 2015 -.035981238    .05023271
4 2016  -.24427193     .3436758
4 2017    .2164631    -.3065112
5 2008  .027180355   -.08998048
5 2009  -.12860553    .09377557
5 2010   .05162149  -.001210285
5 2011 -.065397404    .02223703
5 2012  -.06798149    .11549327
5 2013    .1968319    -.2270282
5 2014 .0019738823     .0769329
5 2015  -.10774732    .01927834
5 2016    .1985194    -.0962711
5 2017  -.02517476   -.01155869
end

二维码

扫码加我 拉你入群

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

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


沙发
黃河泉 在职认证  发表于 2018-7-20 15:51:28
请先 ssc install rangestat,然后试试
  1. rangestat (corr) ΔACCO ΔCFO, interval(year -2 0) by(stkcd)
  2. replace corr_x = . if corr_nobs < 3
复制代码
已有 1 人评分论坛币 热心指数 收起 理由
逐梦的太阳 + 5 + 5 热心帮助其他会员

总评分: 论坛币 + 5  热心指数 + 5   查看全部评分

藤椅
苏玄777 发表于 2018-7-20 16:33:56
黃河泉 发表于 2018-7-20 15:51
请先 ssc install rangestat,然后试试
非常感谢!

板凳
赵安豆 发表于 2024-6-30 20:40:30
在Stata中实现滚动窗口计算相关系数,可以利用循环和`corr`命令。但考虑到数据的预处理和窗口的滑动特性,我们需要先整理数据并使用`by:`语句或`rolling`函数来实现这一功能。

下面是一个基本的示例代码框架,假设你的数据已经被正确输入,并且你已经定义了变量`ΔACCO` 和 `ΔCFO`。此代码将计算一个滚动窗口的相关系数,窗口大小为3年:

```stata
clear all

* 输入数据(示例中省略)
input long stkcd int year float ΔACCO ΔCFO
2 2008 -.3090124 .2148343
2 2009 -.06869491 .07794617
2 2010 .0749478 -.06134686
...
end

* 将数据按年份排序,确保时间序列的正确性
tsset year, yearly

* 定义一个变量用于存储每三年窗口的相关系数结果
gen corr_coef = .

* 使用循环遍历年份,从第三年开始,因为需要前两年的数据来计算第一个相关系数。
local start_year = 2010 // 或者是数据中最早年的后第二年。

forvalues i = `start_year'(1)2017 { // 假设你的最后一年是2017
    qui replace corr_coef = corr ΔACCO ΔCFO if year >= (`i'-2) & year <= `i'
}

* 上面的命令可能会报错,因为在某些窗口中可能没有数据。我们可以用更复杂的方法来确保在计算相关系数之前有足够的观测值。
local start_year = 2010
forvalues i = `start_year'(1)2017 {
    qui sum ΔACCO if year >= (`i'-2) & year <= `i' // 检查窗口内是否有数据点
    if r(N) == 3 { // 确保三年的数据都存在
        qui corr ΔACCO ΔCFO if year >= (`i'-2) & year <= `i'
        replace corr_coef = r(rho) if year == `i' // 将相关系数存储在对应年份
    }
}

* 查看结果,你可以在每个t年的`corr_coef`列中看到三年窗口的相关系数。
list stkcd year ΔACCO ΔCFO corr_coef if year >= 2010 & year <= 2017

```

请注意,在实际使用时,你需要根据你的数据结构调整上述代码。如果数据量很大或需要处理更复杂的情况(如缺失值),你可能需要进一步优化和调整代码以确保计算的准确性。

此外,`tsset`命令是为时间序列数据分析准备数据的常见步骤,它告诉Stata变量`year`是一个年份,并且你的数据按年排序。这在进行循环或其他时间序列分析时非常有用。

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



您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注jltj
拉您入交流群
GMT+8, 2025-12-29 07:25