R中的滞后变量

时间:2009-08-21 13:23:57

标签: r time-series

在R中为任意变量(即不是常规时间序列)制作滞后变量矩阵的最有效方法是什么

例如:

输入

x <- c(1,2,3,4) 

2滞后,输出

[1,NA, NA]
[2, 1, NA]
[3, 2,  1]
[4, 3,  2]

4 个答案:

答案 0 :(得分:21)

你可以使用内置的embed()函数实现这一点,其中第二个'维度'参数等同于你所谓的'滞后':

x <- c(NA,NA,1,2,3,4)
embed(x,3)

## returns
     [,1] [,2] [,3]
[1,]    1   NA   NA
[2,]    2    1   NA
[3,]    3    2    1
[4,]    4    3    2
Joshua Reich在previous answer中讨论了{p> embed()。 (注意,我在前面添加了x和NAs来复制你想要的输出)。

它没有特别好的命名,但它对于涉及滑动窗口的操作非常有用和强大,例如滚动总和和移动平均值。

答案 1 :(得分:8)

为对象使用正确的class; base R具有ts,其具有lag()功能。请注意,这些ts对象来自“delta”或“frequency”的时间,其中常量:月度或季度数据,如宏观经济系列。

对于诸如(business-)每日的不规则数据,使用zooxts包也可以处理(非常好!)滞后。为了更进一步,你可以使用像dynlmdlm这样的软件包,允许使用滞后的动态回归模型。

关于时间序列,计量经济学,财务的任务观点都有进一步的指示。

答案 2 :(得分:2)

running包中的gtools函数或多或少地符合您的要求:

> require("gtools")
> running(1:4, fun=I, width=3, allow.fewer=TRUE)

$`1:1`
[1] 1

$`1:2` 
[1] 1 2

$`1:3` 
[1] 1 2 3

$`2:4` 
[1] 2 3 4

答案 3 :(得分:1)

最适合我的方法 是使用lag包中的dplyr函数。

示例:

> require(dplyr)
> lag(1:10, 1)
 [1] NA  1  2  3  4  5  6  7  8  9
> lag(1:10, 2)
 [1] NA NA  1  2  3  4  5  6  7  8