Запаздывающая регрессия временного ряда

#r #time-series #regression #zoo

Вопрос:

У меня есть временной ряд, и я пытаюсь регрессировать зависимые переменные с помощью регрессора с задержкой. Я знаю, что могу сделать это за запаздывание в одно наблюдение со следующей формулой:

 library(dyn)

set.seed(123)
y <- numeric(100)
y[1] <- 2
for (i in 2:100) {
  u <- rnorm(1, mean = 0, sd = 1)
  y[i] <- 1   0.5 * y[i-1]   u
}

z <- zoo(y)
model <- dyn$lm(z ~ lag(z, -1))
 

Существует ли возможность для функции, которая создает 12 регрессионных моделей с запаздывающим регрессором от 1 до 12 наблюдений, или мне нужно сделать 12 отдельных регрессий, чтобы получить решения регрессии OLS?

Ответ №1:

Ниже я показываю итерацию с циклом for и с. purrr::map

 # OP's code
library(dyn)
#> Loading required package: zoo
#> 
#> Attaching package: 'zoo'
#> The following objects are masked from 'package:base':
#> 
#>     as.Date, as.Date.numeric
set.seed(123)
y <- numeric(100)
y[1] <- 2
for (i in 2:100) {
  u <- rnorm(1, mean = 0, sd = 1)
  y[i] <- 1   0.5 * y[i-1]   u
}
z <- zoo(y)

# for-loop version 
x <- list()
for(i in 1:12){
  x[[i]] <- dyn$lm(z ~ lag(z, -i))
}
x[[9]]
#> 
#> Call:
#> lm(formula = dyn(z ~ lag(z, -i)))
#> 
#> Coefficients:
#> (Intercept)   lag(z, -i)  
#>      2.3920      -0.1101

# purrr-based version
library(purrr)
x <- map(1:12, ~ dyn$lm(z ~ lag(z, -.x)))
x[[9]]
#> 
#> Call:
#> lm(formula = dyn(z ~ lag(z, -.x)))
#> 
#> Coefficients:
#> (Intercept)  lag(z, -.x)  
#>      2.3920      -0.1101
 

Создано 2021-07-28 с помощью пакета reprex (версия 2.0)

Ответ №2:

Альтернатива без purrr :

 x <- lapply(1:12, function(x) dyn$lm(z ~ lag(z, - x)))
x_2[[9]]
#> 
#> Call:
#> lm(formula = dyn(z ~ lag(z, -x)))
#> 
#> Coefficients:
#> (Intercept)   lag(z, -x)  
#>      2.3920      -0.1101