我想在回归中包含多个外生变量滞后。假设我有以下数据:
X = c(1, 4, 8, 9, 3, 5...)
X2 = c(4, 6, 7, 9, 7, 8...)
我想使用X2
的滞后来预测X
。有谁知道为什么包允许我这样做?我尝试过使用统计信息中的dynlm
和lag()
。
谢谢
答案 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