【问题标题】:Lagging Variables in RR中的滞后变量
【发布时间】:2010-11-21 16:00:00
【问题描述】:

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

例如:

输入

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

2 滞后,输出

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

【问题讨论】:

    标签: r time-series


    【解决方案1】:

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

    对于 (business-)daily 等不规则数据,请使用 zooxts 包,它们也可以(非常好!)处理滞后问题。为了更进一步,您可以使用 dynlmdlm 之类的包来支持具有滞后的动态回归模型。

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

    【讨论】:

      【解决方案2】:

      gtools 包中的 running 函数或多或少可以满足您的需求:

      > 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
      

      【讨论】:

      • 但是詹姆斯想要一个矩阵而不是一个列表。您可以使用 matrix(unlist(...)) 打包结果,但 embed() 函数一步完成。
      • 完全正确,这就是为什么我在 embed() 解决方案问世时支持它的原因 =)。但我认为“运行”仍然是一个有用的功能 --- 大多数时候,当我想创建 James 要求的矩阵时,我真正想做的就是在其上运行 apply。
      【解决方案3】:

      您可以使用内置的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 的 previous answer 中进行了讨论。 (请注意,我在 x 前面加上了 NA 来复制您想要的输出)。

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

      【讨论】:

      • 更一般地说:lagmatrix
      • 感谢指向嵌入函数的指针。这为我节省了大量的计算时间。
      【解决方案4】:

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

      例子:

      > 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-10-29
        • 2022-11-23
        • 2016-08-18
        • 2012-12-02
        • 2019-09-05
        • 1970-01-01
        • 2015-06-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多