楼主: fisk_all_star
30517 15

[问答] 数据滞后项怎么算? [推广有奖]

  • 4关注
  • 4粉丝

已卖:279份资源

硕士生

44%

还不是VIP/贵宾

-

威望
0
论坛币
709 个
通用积分
12.3106
学术水平
4 点
热心指数
4 点
信用等级
3 点
经验
3309 点
帖子
144
精华
0
在线时间
119 小时
注册时间
2013-3-13
最后登录
2016-3-27

楼主
fisk_all_star 发表于 2015-12-14 21:49:04 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
最简单的,
X1994 1995 1996 1997
2 3 4 5
那么请问X的一期滞后项是多少呢?究竟是
X-11993 1994 1995 1996
1 2 3 4
还是
X-1 1995 1996 1997 1998

3 4 5 6
啊?我的理解,一期滞后项只不过是前一期的值拿到当期适用,变量值与年份之间的对应关系应该是不变的,为甚么我看R的lag(X,1)的返回值却是将变量值提前了一期了,本来是1994年的数值跑到1993年了,这是为什么?
二维码

扫码加我 拉你入群

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

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

关键词:滞后项 对应关系 X-11 变量值 最简单

回帖推荐

suimong 发表于10楼  查看完整内容

你的理解没错,lag(ldeaths, k=1)的变动方向确实和你想要的是反了。但这是因为stats::lag的本质不是lag,是shift。stats::lag对应的数学表达式是X[t+k], 也就是说lag(ldeaths, k=1)变成了X[t+1]. 那么你要X[t-1]的话只要写lag(ldeaths, k=-1)就好了。说到底这是lag函数的命名让人容易误解。或许改名叫shift会更好(参考data.table::shift)。 四楼@蓝色的答案里用的是dplyr::lag,符合题主的想象。这是因为dplyr里有两个函数:lag ...

沙发
fisk_all_star 发表于 2015-12-14 22:09:03
这个白痴问题没人回答嘛,我实在是不理解啊?比如 Y[t]~X[t]+X[t-1] ,这里面就需要对 X 求滞后,也就是 lag( X, 1), 那么1995年的 Y = 1995年的 X + 1994 年的 X ,但是lag( X , 1 ) 却给出了 1996 年的 X 这是怎么回事呀?我认为应该是 lag(X, -1),但是我看的书里却是 lag(X, 1),论坛里的人也都在用 lag( X, 1 )但我怎么都想不明白,1995年对应的一期滞后应该是 1994年,那么就是前一期的被后一期适用,也就是在时间上是朝着时间增大的方向移动,故而是lag(X, -1)!!!求求解答!求解答!!!

藤椅
suimong 发表于 2015-12-15 00:26:01
你举的例子(Y[t]~X[t]+X[t-1])不需要用lag吧。比如你的X[t],0<=t<=10是你已有的数据,那么就不需要用lag(X,1)来求得X[t-1]的值,直接X[t-1]就可以了。

板凳
蓝色 发表于 2015-12-15 08:32:04
没有问题吧
> data <- data.frame(year=2001:2005, x=1:5)
> data <- within(data,{
+                lagx <- lag(x,1)
+ })
> data
  year x lagx
1 2001 1   NA
2 2002 2    1
3 2003 3    2
4 2004 4    3
5 2005 5    4

报纸
fisk_all_star 发表于 2015-12-15 20:58:38
蓝色 发表于 2015-12-15 08:32
没有问题吧
> data  data
我按照你的试了一遍,结果显示这个:
> data
  year x lagx
1 2001 1    1
2 2002 2    2
3 2003 3    3
4 2004 4    4
5 2005 5    5
难道我们的软件不一样吗,我用的是stats里的 lag 函数,应该是默认的,我的版本是最新的,3.2.3,结果还是这个,到底怎么回事啊?

地板
蓝色 发表于 2015-12-15 21:36:32

library(dplyr)

7
蓝色 发表于 2015-12-15 21:39:53
rm(list=ls())
library(dplyr)
data <- data.frame(year=2001:2005, x=1:5)
data <- within(data,{
               lagx <- lag(x,n=2)
})
data
data

8
fisk_all_star 发表于 2015-12-15 22:11:00
到底是怎么回事啊,我给大家看过咯例子,
  1. > ldeaths
  2.       Jan  Feb  Mar  Apr  May  Jun  Jul  Aug  Sep  Oct  Nov  Dec
  3. 1974 3035 2552 2704 2554 2014 1655 1721 1524 1596 2074 2199 2512
  4. 1975 2933 2889 2938 2497 1870 1726 1607 1545 1396 1787 2076 2837
  5. 1976 2787 3891 3179 2011 1636 1580 1489 1300 1356 1653 2013 2823
  6. 1977 3102 2294 2385 2444 1748 1554 1498 1361 1346 1564 1640 2293
  7. 1978 2815 3137 2679 1969 1870 1633 1529 1366 1357 1570 1535 2491
  8. 1979 3084 2605 2573 2143 1693 1504 1461 1354 1333 1492 1781 1915
  9. > lag(ldeaths,1)
  10.       Jan  Feb  Mar  Apr  May  Jun  Jul  Aug  Sep  Oct  Nov  Dec
  11. 1973                                                        3035
  12. 1974 2552 2704 2554 2014 1655 1721 1524 1596 2074 2199 2512 2933
  13. 1975 2889 2938 2497 1870 1726 1607 1545 1396 1787 2076 2837 2787
  14. 1976 3891 3179 2011 1636 1580 1489 1300 1356 1653 2013 2823 3102
  15. 1977 2294 2385 2444 1748 1554 1498 1361 1346 1564 1640 2293 2815
  16. 1978 3137 2679 1969 1870 1633 1529 1366 1357 1570 1535 2491 3084
  17. 1979 2605 2573 2143 1693 1504 1461 1354 1333 1492 1781 1915     
  18. >
复制代码

1974年的数据往1973年的方向移动,不是太奇怪了嘛,滞后应该是应该是朝时间增大的方向移动,这样对应时,当期才能跟前一期配对,可是这里是向时间减少的方向移动,#4楼也是跟我说的一样的,朝时间增大的方向移动,可是软件里却不是这样,怎么回事????你们自己运行下看看!!!

9
fisk_all_star 发表于 2015-12-15 22:22:15
suimong 发表于 2015-12-15 00:26
你举的例子(Y[t]~X[t]+X[t-1])不需要用lag吧。比如你的X[t],0
但是,X的一期滞后项不就应当是X[t-1]嘛,比如考察第6期的X那么此时一期滞后项不就应当是前一期的值即第5期的值吗,还有一个问题, lag( x, 1) 是不是就是 x 的一期滞后项,我看他的表现不像是啊,数据运动的方向跟设想的相反啊!

10
suimong 发表于 2015-12-16 01:44:48
fisk_all_star 发表于 2015-12-15 22:22
但是,X的一期滞后项不就应当是X[t-1]嘛,比如考察第6期的X那么此时一期滞后项不就应当是前一期的值即第5 ...
你的理解没错,lag(ldeaths, k=1)的变动方向确实和你想要的是反了。但这是因为stats::lag的本质不是lag,是shift。stats::lag对应的数学表达式是X[t+k], 也就是说lag(ldeaths, k=1)变成了X[t+1]. 那么你要X[t-1]的话只要写lag(ldeaths, k=-1)就好了。说到底这是lag函数的命名让人容易误解。或许改名叫shift会更好(参考data.table::shift)。

四楼@蓝色的答案里用的是dplyr::lag,符合题主的想象。这是因为dplyr里有两个函数:lag和lead。因此这里的lag是真正意义上的滞后。

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-19 03:12