R中的滞后回归:确定最佳滞后量

问题描述 投票:0回答:1

我有一个变量被认为是另一个变量的良好预测因子,但有一些滞后性。我不知道这个滞后的变量是什么,想从数据中估计它。

下面是一个例子。

library(tidyverse)

data <- tibble(
  id = 1:100,
  y = dnorm(1:100, 30, 20) * 1000,
  x.shifted = y / 10 + runif(100) / 10,
  x.actual = lag(x.shifted, 30)
)

data %>% 
  ggplot(aes(id, x.shifted)) +
  geom_point() +
  geom_point(aes(id, x.actual), color = 'blue') +
  geom_point(aes(id, y), color = 'red')

这个模型 lm(y ~ x.actual, data) 会不太合适,但该模型 lm(y ~ x.shifted, data) 会是。在这里,我知道x一定是偏移了-30天,但是想象一下,我不知道,我只知道它在-30和+30之间。

我想到的直接方法是运行61个回归模型,从将x移位-30天的模型到将其移位+30天的模型,然后选择AIC或BIC最好的模型。然而,(a)这是否是正确的方法,(b)是否有R包已经可以做到这一点,并找到最佳的滞后?

r linear-regression
1个回答
1
投票

你所描述的是 交叉相关 的两个变量。在R中,你可以很容易地用 ccf.

然而,如果只是为了获得最佳滞后,我们可以简化为一个单行本,利用 sapply 以将所需的滞后数输入到该系统中。cor 函数,然后使用 which.max 来寻找最高的相关性。

which.max(sapply(1:50, function(i) cor(data$x.actual, lag(data$y, i), use = "complete")))
#> [1] 30
© www.soinside.com 2019 - 2024. All rights reserved.