如何创建多个不同的滞后

Posted

技术标签:

【中文标题】如何创建多个不同的滞后【英文标题】:How to create multiple different lags 【发布时间】:2015-01-16 02:47:03 【问题描述】:

我正在尝试在代表多个滞后的数据框中创建新变量。我现在有一个时间序列“序列”,我想创建 10 个不同的变量,每个变量代表“序列”的某个滞后。因此,生成的数据框将具有原始变量“系列”,加上 10 个名为 (1, 2, 3, 4, ... 10) 的变量,这些变量代表该滞后数。我目前正在 for 循环中尝试这个:

for (i in 1:max.lag)
  lag.death$"i" <- lag(tscampos, i)

但是读完这里之后,我怀疑我可能想使用其中一个应用函数?有任何想法吗?

【问题讨论】:

当你超出时间范围时,你想用零填充边吗? *apply 可能是一个解决方案,但如果我是你,我宁愿编写一个函数来在你需要的任何时候为你完成这项工作,而不是存储 10 个相同系列的滞后版本.. 等一下 ;) 等一下,你说的是实际的 R 的lag 函数吗?如果是,则此函数返回一个滞后的“时间序列对象”,该对象一旦卡在 data.frame 中,就与原始对象完全相同。如果你真的需要存储 10 个滞后版本的“系列”,那么将它们放入一个带有 lapply(0:9,lag,x=lag.death$series) 的列表中。 我以前也遇到过这个问题。当我想在分析中使用滞后时,我倾向于考虑为我需要的每个滞后添加新变量。但是,我发现对于我们在时间序列中使用的大多数 R 函数,它具有处理滞后的能力,并且您会在函数中找到滞后数作为选项。因此,您需要的只是原始变量以及代表时间序列的日期。 【参考方案1】:

你去吧:这个功能可以让你在需要时获得你的系列的滞后版本。 ('比我找到的将同一系列的每个滞后副本存储在 10 个不同的列中更好)

lag.death = data.frame(series = floor(runif(10,0,100)));
lag.death$serie

lagit4me = function(serie,lag)
    n = length(serie);
    pad = rep(0,lag);
    return(c(pad,serie)[1:n]);



lagit4me(lag.death$serie,1);
lagit4me(lag.death$serie,3);

'然后可以对其进行调整以允许负滞后等。

(但如果你真的需要它:)

allIn1 = lapply(0:10,lagit4me,serie=lag.death$series);
allIn1 = data.frame(allIn1);
names(allIn1) = 0:10;
allIn1

享受:)

【讨论】:

仅供参考,您不需要任何这些分号 不,我没有,'只是一种习惯。我喜欢看到我的说明结束 :) 谢谢。我确实需要将滞后存储为新变量。第二个代码块没有为我运行 - 尝试将 allIn1 分配为数据框会引发错误(参数暗示不同的行数) 这是因为我没有让lagit4me 能够检查滞后系列的最终长度,它必须始终是n,但如果滞后很大,可能会更多。我今晚会添加这张支票,或者你可能会在之前这样做;) 给你(功能编辑),现在更好用了吗?【参考方案2】:

您也可以使用 purrr::map(),类似于上面的 lapply()。这使用 dplyr::lag(),而不是 lagit4me()

library(dplyr)
library(purrr)

num.lags <- 0:10 

list.lags <- 
  purrr::map(
    .x = num.lags,
    .f = ~ dplyr::lag(series, .x)
  )

注意,您需要命名列表元素以强制转换为 data_frame

chr.lags <- paste0("lag_", num.series.lags)
names(list.model.subset.lags) <- chr.lags

tbl.model.subset.lags <- 
  dplyr::bind_rows(list.model.subset.lags)

这会产生一个包含 11 个变量、输入变量 (lag_0) 和 10 个滞后变量(带有 NA)的 tbl

print(tbl.model.subset.lags)

【讨论】:

以上是关于如何创建多个不同的滞后的主要内容,如果未能解决你的问题,请参考以下文章

iPhone UIViewController 滞后

如何将此 postgresql 滞后语句移植到 mysql?

如何在 Python Pandas 回归模型中使用滞后时间序列变量?

当我用鼠标向下滚动时,如何防止 WordPress 网站滞后?

如何解决内存泄漏问题?

如何正确缓存 webaudio 对象?