11

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

例如:

输入

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

2 滞后,输出

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

4 回答 4

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

embed()Joshua Reich在之前的回答中讨论过。(请注意,我在 x 前面加上了 NA 来复制您想要的输出)。

它的名字不是特别好,但它对于涉及滑动窗口的操作非常有用且功能强大,例如滚动和和移动平均线。

于 2009-08-21T18:29:57.437 回答
9

class为您的对象使用适当的;基础 R 具有可操作ts的功能。lag()请注意,这些ts对象来自“增量”或“频率”不变的时间:如宏观经济系列中的月度或季度数据。

对于不规则的数据,例如 (business-)daily,使用zooxts包,它们也可以处理(非常好!)滞后。要从那里走得更远,您可以使用dynlmdlm之类的包来允许具有滞后的动态回归模型。

时间序列、计量经济学、金融的任务视图都有进一步的指示。

于 2009-08-21T14:13:49.017 回答
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
于 2009-08-21T16:24:46.257 回答
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
于 2015-06-29T18:41:20.013 回答