Заполнение в зоопарке не требуется, поскольку в первую очередь не требуется ручное выравнивание. Например, это регрессирует первое различие x
в его первых двух лагах, давая fm2
, а затем только в одно отставание, давая fm1
, а затем выполняет анову между ними. Обратите внимание, что здесь anova вызывает anova.dyn
, который автоматически уменьшает аргументы по сравнению с тем же вектором ответа, чтобы сделать их сопоставимыми (в противном случае вы не можете законно выполнить анову).
library(dyn)
set.seed(123)
x0 <- rnorm(10)
x <- zoo(x0)
fm2 <- dyn$lm(diff(x) ~ lag(x, -(1:2)))
fm2
## Call:
## lm(formula = dyn(diff(x) ~ lag(x, -(1:2))))
##
## Coefficients:
## (Intercept) lag(x, -(1:2))1 lag(x, -(1:2))2
##
fm1 <- dyn$lm(diff(x) ~ lag(x, -1))
anova(fm1, fm2)
## Analysis of Variance Table
##
## Model 1: diff(x) ~ lag(x, -1)
## Model 2: diff(x) ~ lag(x, -(1:2))
## Res.Df RSS Df Sum of Sq F Pr(>F)
## 1 6 7.4369
## 2 5 6.2441 1 1.1928 0.9551 0.3733
Пакет dynlm является альтернативой к дин. Это также облегчает выполнение регрессий с объектами зоопарка.
Примечание
Выше приведен вызов lag
generi c в ядре R, который в свою очередь отправляет lag.zoo
. Убедитесь, что у вас не загружен dplyr lag
, поскольку он перезаписывает R lag
версией, несовместимой с R lag
. Либо не загружайте dplyr, либо он вам нужен, тогда в достаточно свежих версиях R используется library(dplyr, exclude = c("lag", "filter"))