【问题标题】:Performing a multivariate dynlm on xts object在 xts 对象上执行多元 dynlm
【发布时间】:2020-02-11 13:52:51
【问题描述】:

我正在尝试在 xts 对象中执行此操作,但出现错误。使用的库和数据有:

#Libraries
library(xts)
library(dynlm)

#Data
index <- seq.Date(from = Sys.Date() - 999, to = Sys.Date(), by = "days")
x <- xts(1:1000, order.by = index)
y <- xts(2001:3000, order.by = index)
z <- xts(3001:4000, order.by = index)
data <- merge(x,y,z)

我正在尝试执行这种动态回归

dynlm(x ~ L(y) + L(z,4), data = data)

有什么想法吗?或者我应该将信息转换为数据框并从那里开始工作。 提前致谢!

【问题讨论】:

    标签: r time-series regression


    【解决方案1】:

    一种方法是使用 dyn 包。 (请确保未加载 dplyr,因为 dplyr 会使用与 R 的其余部分不兼容的自己的版本覆盖 lag。)

    library(dyn)
    dyn$lm(x ~ lag(y) + lag(z, 4), data = data)
    

    给予:

    Call:
    lm(formula = dyn(x ~ lag(y) + lag(z, 4)), data = data)
    
    Coefficients:
    (Intercept)       lag(y)    lag(z, 4)  
          -1999            1           NA  
    

    【讨论】:

      【解决方案2】:

      dynlm 似乎不适用于“xts”对象。

      格洛腾迪克给出的一个解决方案建议使用不同的包(可行)。

      另一种解决方案是将对象更改为动物园。

      尽管如此,这令人困惑,因为我最初工作的对象是 class: "xts" "zoo";并且 dynlm 无法识别“动物园”部分。

      将其更改为“动物园”后,如果有人想继续使用此软件包,一切正常。

      #Libraries
      library(xts)
      library(dynlm)
      
      #Data
      index <- seq.Date(from = Sys.Date() - 999, to = Sys.Date(), by = "days")
      x <- xts(1:1000, order.by = index)
      y <- xts(2001:3000, order.by = index)
      z <- xts(3001:4000, order.by = index)
      data <- merge(x,y,z)
      
      data.zoo <- zoo(data, order.by = index(data))
      
      dynlm(x ~ L(y) + L(z,4), data = data.zoo)
      

      给予

      Time series regression with "zoo" data:
      Start = 2017-05-23, End = 2020-02-12
      
      Call:
      dynlm(formula = x ~ L(y) + L(z, 4), data = data.zoo)
      
      Coefficients:
      (Intercept)         L(y)      L(z, 4)  
            -1999            1           NA  
      
      

      奇怪的是,得到的截距是不同的。

      【讨论】:

      • 它们不同的原因是我忘记了 lag.xts 的工作方向与在 R 的基础上滞后,所以使用 lag.xts 滞后一个是 lag(y, 1) 而在基数 R 它是滞后(y,-1)。我认为这是 xts 中的设计错误。如果他们想使用不同的约定,他们真的应该使用不同的名称,而不是滞后。无论如何,我已经确定了我的答案。请注意,如果您想将数据转换为动物园,您可以使用 as.zoo(data)。
      猜你喜欢
      • 2011-02-18
      • 2020-08-11
      • 2012-12-02
      • 1970-01-01
      • 2017-09-16
      • 1970-01-01
      • 1970-01-01
      • 2020-06-13
      • 1970-01-01
      相关资源
      最近更新 更多