当前位置: 首页 > news >正文

【stata】求滚动波动情况

0.计算对象

计算 t t t t + 1 t+1 t+1 t + 2 t+2 t+2 这三起滚动波动情况
V o l i , t = l n ( ∑ n = t n = t + 2 ( g n − g ˉ ) 2 3 ) Vol_{i,t} = ln(\sqrt{\frac{\sum_{n=t}^{n=t+2}(g_{n}-\bar{g})^2}{3}}) Voli,t=ln(3n=tn=t+2(gngˉ)2 )

e . g e.g e.g: 假设 2008-2010的value分别为【6.264004 】、 【11.11958】 、 【18.7657】
三年均值 g ˉ \bar{g} gˉ等于【12.049761】

此处数据与stata模拟数据一致,便于对比手动计算结果代码计算结果是否一致,
进而证明代码的有效性。

. di (6.264004  + 11.11958 + 18.7657) / 3
12.049761

V o l i , 2008 = l n ( ∑ n = 2008 n = 2010 ( g n − g ˉ ) 2 3 ) Vol_{i,2008} = ln(\sqrt{\frac{\sum_{n=2008}^{n=2010}(g_{n}-\bar{g})^2}{3}}) Voli,2008=ln(3n=2008n=2010(gngˉ)2 )
V o l i , 2008 = l n ( ( 6.26 − 12.05 ) 2 + ( 11.12 − 12.05 ) 2 + ( 18.77 − 12.05 ) 2 3 ) Vol_{i,2008} = ln(\sqrt{\frac{(6.26-12.05)^2 + (11.12-12.05)^2 + (18.77-12.05)^2 }{3}}) Voli,2008=ln(3(6.2612.05)2+(11.1212.05)2+(18.7712.05)2 )
V o l i , 2008 = l n ( 79.5474 3 ) Vol_{i,2008} = ln(\sqrt{\frac{79.5474 }{3}}) Voli,2008=ln(379.5474 )
V o l i , 2008 = l n ( 26.5158 ) Vol_{i,2008} = ln(\sqrt{26.5158}) Voli,2008=ln(26.5158 )
V o l i , 2008 = l n ( 5.1493495 ) Vol_{i,2008} = ln(5.1493495) Voli,2008=ln(5.1493495)
V o l i , 2008 = 1.63 Vol_{i,2008} = 1.63 Voli,2008=1.63

1.模拟数据

clear
set seed 123
set obs 10// ssc install egenmore,replace
egen id = repeat(),v(1/2)
sort id 
egen year = repeat(),v(2008/2012)
gen value = uniform() * 20
replace year = year - 1 if id == 2list id year value

运行结果

Number of observations (_N) was 0, now 10.(5 real changes made)+----------------------+| id   year      value ||----------------------|1. |  1   2008   6.264004 |2. |  1   2009   11.11958 |3. |  1   2010    18.7657 |4. |  1   2011   14.72644 |5. |  1   2012   3.848151 ||----------------------|6. |  2   2007   3.902801 |7. |  2   2008    19.0192 |8. |  2   2009   5.808908 |9. |  2   2010   16.38165 |10. |  2   2011   9.764193 |+----------------------+

2.根据unit id 拆分成多个dta

egen count = group(id)
su count,d
global dim = r(max)forv i = 1/$dim{preservekeep if count == `i'drop countsave temp`i'.dta,replace restore
}

3.对于每一个unit滚动求和

先定义滚动3年
然后求这3年内的value的平均 g ˉ \bar{g} gˉ
再用逐年的数值减去均值,
而后求平方项 / 3
最后取对数

forv id = 1/$dim{
use temp`id'.dta,replace
su year ,dglobal row_year = 3  // 三年滚动求和global range_low = r(min)
global range_high = r(max) - $row_year + 1forv i = $range_low/$range_high{local j = `i' + $row_year - 1gen cond_bin = (year >= `i' & year <= `j')egen m_`i' = mean(value) if cond_bin == 1ereplace m_`i' = mean(m_`i')gen rolling_`i' = (value - m_`i')^2 if cond_bin == 1ereplace rolling_`i' = total(rolling_`i') if cond_bin == 1replace rolling_`i' = ln(sqrt(rolling_`i' / $row_year))drop cond_bin
}
keep id rolling*
forv i = $range_low/$range_high{ereplace rolling_`i' = mean(rolling_`i')
}
duplicates drop id ,force 
reshape long rolling_,i(id) j(year)
save rolling_`id'.dta,replace
}

4.合并/清除数据

use rolling_1.dta,replace
forv id = 2/$dim{append using rolling_`id'.dta
}
forv i = 1/$dim{erase temp`i'.dtaerase rolling_`i'.dta
}
save rolling.dta,replace 

5.运行结果

use rolling.dta,clear
list id year roll in 1/6

结果对比可以看到,id=1时,year=2008时,代码计算结果也为1.63,与手动计算结果一致,证明了代码的有效性

     +----------------------+| id   year   rolling_ ||----------------------|1. |  1   2008   1.638221 |2. |  1   2009   1.138851 |3. |  1   2010   1.840516 |4. |  2   2007   1.905365 |5. |  2   2008   1.741902 |6. |  2   2009   1.472856 |+----------------------+
http://www.lryc.cn/news/338720.html

相关文章:

  • The C programming language (second edition,KR) exercise(CHAPTER 2)
  • rust实现循环链表
  • 2. Spring的创建和Bean的存取
  • 策略模式【行为模式C++】
  • php中session相关知识(目前了解部分)
  • 从零实现诗词GPT大模型:GPT是怎么生成内容的?
  • 8路HDMI+8路AV高清视频流媒体编码器JR-3218HD
  • LangChain入门:14.LLMChain:最简单的链的使用
  • 深入理解k8s kube-proxy
  • Spark-机器学习(1)什么是机器学习与MLlib算法库的认识
  • java的正则表达式校验,包含了中国几乎所有运营商手机号码的校验格式
  • C#简单工厂模式的实现
  • .NET 设计模式—观察者模式(Observer Pattern)
  • EasyUI Jquery 学习笔记 ——DataGrid(数据网格)与 Tree(树)详细版
  • JAVA发票验真接口、票据ocr、数电票在线查验真伪
  • el-date-picker调用回车事件
  • js学习总结
  • MES实施优势有哪些?MES制造执行系统的主要内容
  • ChatGPT 和 Elasticsearch:使用 Elastic 数据创建自定义 GPT
  • 废品回收 小程序+APP
  • 下载好了annaconda,但是在创建一个新的Conda虚拟环境报错
  • 如何安装MacOS的虚拟机?mac安装虚拟机的步骤 虚拟机安装MacOS VMware Fusion和Parallels Desktop19
  • Flutter 中 AutomaticKeepAliveClientMixin 的介绍及使用
  • 注意力机制篇 | YOLOv8改进之清华开源ACmix:自注意力和CNN的融合 | 性能速度全面提升
  • Go语言支持重载吗?如何实现重写?
  • Spring中基于事件监听驱动 和 线程池的异步任务
  • C++ 优先级队列用法详解与模拟实现
  • Linux进阶之旅:深入探索Linux的高级功能
  • 【Java】内存可见性问题是什么?
  • Guava里一些比较常用的工具