【问题标题】:Lagged Regression of a time series时间序列的滞后回归
【发布时间】:2021-10-04 02:43:20
【问题描述】:

我有一个时间序列,我尝试使用滞后回归量对因变量进行回归。我知道我可以使用以下公式延迟一次观察:

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))

是否有可能使用从 1 到 12 个观察值的滞后回归器创建 12 个回归模型的函数,或者我是否需要进行 12 个单独的回归才能获得 OLS 回归的解决方案?

【问题讨论】:

    标签: r time-series regression zoo


    【解决方案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
    

    reprex package (v2.0.0) 于 2021 年 7 月 28 日创建

    【讨论】:

      【解决方案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 
      

      【讨论】:

        猜你喜欢
        • 2013-08-20
        • 2012-08-25
        • 1970-01-01
        • 2021-07-06
        • 1970-01-01
        • 2017-02-11
        • 2017-12-08
        • 1970-01-01
        • 2014-10-08
        相关资源
        最近更新 更多