R中的哪些包允许用于时间序列分析的滞后变量?

时间:2017-06-22 10:49:04

标签: r

我想在回归中包含多个外生变量滞后。假设我有以下数据:

X = c(1, 4, 8, 9, 3, 5...)
X2 = c(4, 6, 7, 9, 7, 8...)

我想使用X2的滞后来预测X。有谁知道为什么包允许我这样做?我尝试过使用统计信息中的dynlmlag()

谢谢

3 个答案:

答案 0 :(得分:1)

这在X2的前2个滞后上用截距(fit2)执行X的普通线性回归,在第一个滞后上用截距(fit1)和恰好在截距(fit0)上。请注意,在R中,通常使用负数来滞后,为方便起见,我们定义了Lag函数,该函数使用正数表示滞后。 lag.zoo允许向量滞后,因此Lag(z2,1:2)有两列,两列各有一列。

library(dyn)

X = c(1, 4, 8, 9, 3, 5)
X2 = c(4, 6, 7, 9, 7, 8)

z <- zoo(X)
z2 <- zoo(X2)

Lag <- function(x, k = 1) lag(x, k = -k)
fit2 <- dyn$lm(z ~ Lag(z2, 1:2))
fit1 <- dyn$lm(z ~ Lag(z2))
fit0 <- dyn$lm(z ~ 1)

例如,这是fit2。

> fit2
Call:
lm(formula = dyn(z ~ Lag(z2, 1:2)))

Coefficients:
  (Intercept)  Lag(z2, 1:2)1  Lag(z2, 1:2)2  
      19.3333        -1.4242        -0.4242  

这是三个拟合的比较,表明一个和两个滞后拟合并不比仅使用截距明显更好;但是,通过将第一个延迟添加到仅限拦截模型,剩余的平方和会有相当大的下降,因此您可能希望忽略统计显着性并始终使用第一个滞后。

> anova(fit0, fit1, fit12)
Analysis of Variance Table

Model 1: z ~ 1
Model 2: z ~ Lag(z2)
Model 3: z ~ Lag(z2, 1:2)
  Res.Df     RSS Df Sum of Sq      F Pr(>F)
1      3 22.7500                           
2      2  8.4211  1   14.3289 2.1891 0.3784
3      1  6.5455  1    1.8756 0.2865 0.6871

也可以用ts类代替zoo类;但是,lag.ts不支持向量滞后,因此每个术语都必须单独写出来。 Lag来自上方。

tt <- ts(X)
tt2 <- ts(X2)

fits12_ts <- dyn$lm(tt ~ Lag(tt2) + Lag(tt2, 2))

答案 1 :(得分:0)

library(zoo)
set.seed(1111)
x <- as.zoo(rnorm(10, 0, 0.02))
y <- lag(x, 2, na.pad = TRUE)
cbind(x, y)

答案 2 :(得分:0)

不需要外部R库,我想说

X2 = c(4, 6, 7, 9, 7, 8)

lag = 2
lagged_data <- function(x) c(tail(X2, -x), rep(NA, x))
lagged_data(lag)
# [1]  7  9  7  8 NA NA