楼主: lijian1981112
9200 10

如何用stata求得某变量的偶数项移动平均数 [推广有奖]

  • 1关注
  • 4粉丝

已卖:114份资源

博士生

58%

还不是VIP/贵宾

-

威望
0
论坛币
110 个
通用积分
2.0009
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
4880 点
帖子
177
精华
0
在线时间
270 小时
注册时间
2006-7-4
最后登录
2020-9-30

楼主
lijian1981112 发表于 2012-12-6 20:28:05 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
想请教一下,如何使用stata命令求得某个变量的移动平均数
在汉米尔顿的书上有这样一个命令

egen newvar= ma(y), nomiss t(7)
即建立一个新变量,等于跨距为7的y的移动平均数,用较短、未对中的平均数取代起点值和终点值。
这是奇数项移动,可以跑出结果

但是当我想偶数项移动时求移动平均数时,括号里是4时
egen newvar= ma(y), nomiss t(4)

跳出警告,说“t() must be odd and >= 3”

请问如何想偶数项移动,该用什么函数?
二维码

扫码加我 拉你入群

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

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

关键词:Stata 移动平均 tata 平均数 如何用 移动 平均数 如何

沙发
lijian1981112 发表于 2012-12-6 20:42:18
在线等,急

藤椅
h3327156 发表于 2012-12-6 22:00:26
警告是对的,您如果用egen,那么确实“t() must be odd and >= 3”
况且书上也告诉您 Any odd-number span >=3 could be uesd…
总之您设定偶数就会收到警告了…

您如果想执行您问题中的做法,两个方法 【书上都有暗示】
一是采 gen
二是采tsmooth ma
不过不管那种方法,都扯到您想怎么平均

以下是利用Stata手册的例子
webuse friedman2, clear
tsset time
egen newvar= ma( consump),nomiss t(3)
tssmooth ma newvar2= consump, window(1 1 1)
*您应当可以发现上述的newvar与newvar2是一样的,
*有趣的是tssmooth ma会秀出如同书上的gen法的式子

tssmooth ma newvar3= consump, window(2 0 2)
*上述这只是提供给您参考,您应当再看执行后的式子,
*我不知道您想怎么4个的平均,您应当自己决定好,然后在选项window下修改

板凳
lijian1981112 发表于 2012-12-6 22:36:33
h3327156 发表于 2012-12-6 22:00
警告是对的,您如果用egen,那么确实“t() must be odd and >= 3”
况且书上也告诉您 Any odd-number span ...
非常感谢您的热心回复,我也发现
tssmooth ma newvar2= consump, window(1 1 1)得到的结果t(3)结果是一样。

但是偶数项移动求平均问题,我感觉window函数还是没有解决。请您看下面这个情况:

根据《统计学》对偶数项移动平均数法的计算规则

面对一个时间序列y---Y1,Y2,Y3,Y4,Y5,Y6.......
以所移动平均的项数为4项为例,移动平均数的计算是:
M2.5=1/4(Y1+Y2+Y3+Y4)
M3.5=1/4(Y2+Y3+Y4+Y5)
M4.5=1/4(Y3+Y4+Y5+Y6)
...................................
此时需要对一次移动平均数再做一次项数为2的移动平均,即计算二次移动平均数来作为长期趋势值

M3=1/2(M2.5+M3,5) ,作为第3期的趋势值
M4=1/2(M3.5+M4.5), 作为第4期的趋势值

以上是《统计学》中对偶数项移动平均计算方法的描述。

我就想如何用stata命令解决这个问题。

报纸
lijian1981112 发表于 2012-12-6 22:47:26
经过摸索,我发现其实就是用tssmooth做两次即可

tssmooth ma  consump4= consump, window(1 1 2) ----表示4次移动平均数

在对 consump4再做一次两项移动平均即可
tssmooth ma  consump42= consump4, window(1 1)

这样就实现了统计学中给定的偶数项移动平均数的求解

地板
h3327156 发表于 2012-12-6 22:57:53
lijian1981112 发表于 2012-12-6 22:47
经过摸索,我发现其实就是用tssmooth做两次即可

tssmooth ma  consump4= consump, window(1 1 2) ----表 ...
谢谢!
因为我不懂 "偶数项移动的移动平均" 这个是什么,更不用说计算。
总之学习了!


7
lijian1981112 发表于 2012-12-6 22:58:55
就剩下一个问题请教了,软件生成的新数列中的缺失项是怎么来的。比如3项移动时,新数列的
第一项是1/3(y1+y2+y3)对应的是原数列中第2项的趋势值。
但是stata报告的结果也给出了第一项,请问stata补充的数据是怎么来的?

8
h3327156 发表于 2012-12-6 23:17:10
lijian1981112 发表于 2012-12-6 22:58
就剩下一个问题请教了,软件生成的新数列中的缺失项是怎么来的。比如3项移动时,新数列的
第一项是1/3(y1+ ...
按理应当是假设为零的样子。
手册上是写
tssmooth ma gives any missing observations a coefficient of zero in both the uniformly weighted
and weighted moving-average filters. This simply means that missing values or missing periods are
excluded from the moving average.

所以如果您有这项疑虑的话,可能还是想办法用最原始的gen计算比较好
webuse friedman2, clear
tsset time
egen newvar= ma( consump),nomiss t(3)
tssmooth ma newvar2= consump, window(1 1 1)
g newvar3=(1/3)*( consum[_n-1] + 1* consump[_n] +  consump[_n+1])

应当可以看出最后一个的不同
已有 1 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
Sunknownay + 100 + 8 + 1 + 1 + 1 热心帮助其他会员

总评分: 经验 + 100  论坛币 + 8  学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

9
蓝色 发表于 2012-12-7 01:44:29
你自己看看下面那几个数据产生的过程,就能知道移动平均的问题。

clear
set obs 4
gen x=_n

tsset x
**********************************
*对比这两个命令结果的差异
*tssmooth ma x4_a_1=x,window(2 1 1)
*tssmooth ma x4_b_1=x,window(1 1 2)

************************************************************
tssmooth ma x4_a_1=x,window(2 1 1)
gen         x4_a_2=    (x[_n-2]+x[_n-1]+x[_n]+x[_n+1])/4

gen         x4_a_lag2=x[_n-2]
gen         x4_a_lag1=x[_n-1]
gen         x4_a_lag0=x[_n-0]
gen         x4_a_lead1=x[_n+1]

gen        x4_a_3=     (x4_a_lag2+x4_a_lag1+x4_a_lag0+x4_a_lead1)/4
egen       x4_a_4=rmean(x4_a_lag2 x4_a_lag1 x4_a_lag0 x4_a_lead1)
list x4_a_1 x4_a_2 x4_a_3 x4_a_4


**************************************************************
tssmooth ma x4_b_1=x,window(1 1 2)
gen         x4_b_2=    (x[_n-1]+x[_n]+x[_n+1]+x[_n+2])/4

gen         x4_b_lag1=x[_n-1]
gen         x4_b_lag0=x[_n-0]
gen         x4_b_lead1=x[_n+1]
gen         x4_b_lead2=x[_n+2]

gen        x4_b_3=     (x4_b_lag1+x4_b_lag0+x4_b_lead1+x4_b_lead2)/4
egen       x4_b_4=rmean(x4_b_lag1 x4_b_lag0 x4_b_lead1 x4_b_lead2)
list x4_b_1 x4_b_2 x4_b_3 x4_b_4

**************************************************************

10
蓝色 发表于 2012-12-7 01:45:13
. clear

. set obs 4
obs was 0, now 4

. gen x=_n

.
. tsset x
        time variable:  x, 1 to 4
                delta:  1 unit

. **********************************
. *对比这两个命令结果的差异
. *tssmooth ma x4_a_1=x,window(2 1 1)
. *tssmooth ma x4_b_1=x,window(1 1 2)
.
. ************************************************************
. tssmooth ma x4_a_1=x,window(2 1 1)
The smoother applied was
     (1/4)*[x(t-2) + x(t-1) + 1*x(t) + x(t+1)]; x(t)= x

. gen         x4_a_2=    (x[_n-2]+x[_n-1]+x[_n]+x[_n+1])/4
(3 missing values generated)

.
. gen         x4_a_lag2=x[_n-2]
(2 missing values generated)

. gen         x4_a_lag1=x[_n-1]
(1 missing value generated)

. gen         x4_a_lag0=x[_n-0]

. gen         x4_a_lead1=x[_n+1]
(1 missing value generated)

.
. gen        x4_a_3=     (x4_a_lag2+x4_a_lag1+x4_a_lag0+x4_a_lead1)/4
(3 missing values generated)

. egen       x4_a_4=rmean(x4_a_lag2 x4_a_lag1 x4_a_lag0 x4_a_lead1)

. list x4_a_1 x4_a_2 x4_a_3 x4_a_4

     +-----------------------------------+
     | x4_a_1   x4_a_2   x4_a_3   x4_a_4 |
     |-----------------------------------|
  1. |    1.5        .        .      1.5 |
  2. |      2        .        .        2 |
  3. |    2.5      2.5      2.5      2.5 |
  4. |      3        .        .        3 |
     +-----------------------------------+


.
.
. **************************************************************
. tssmooth ma x4_b_1=x,window(1 1 2)
The smoother applied was
     (1/4)*[x(t-1) + 1*x(t) + x(t+1) + x(t+2)]; x(t)= x

. gen         x4_b_2=    (x[_n-1]+x[_n]+x[_n+1]+x[_n+2])/4
(3 missing values generated)

.
. gen         x4_b_lag1=x[_n-1]
(1 missing value generated)

. gen         x4_b_lag0=x[_n-0]

. gen         x4_b_lead1=x[_n+1]
(1 missing value generated)

. gen         x4_b_lead2=x[_n+2]
(2 missing values generated)

.
. gen        x4_b_3=     (x4_b_lag1+x4_b_lag0+x4_b_lead1+x4_b_lead2)/4
(3 missing values generated)

. egen       x4_b_4=rmean(x4_b_lag1 x4_b_lag0 x4_b_lead1 x4_b_lead2)

. list x4_b_1 x4_b_2 x4_b_3 x4_b_4

    +-----------------------------------+
     | x4_b_1   x4_b_2   x4_b_3   x4_b_4 |
     |-----------------------------------|
  1. |      2        .        .        2 |
  2. |    2.5      2.5      2.5      2.5 |
  3. |      3        .        .        3 |
  4. |    3.5        .        .      3.5 |
     +-----------------------------------+

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

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