【问题标题】:Linear regression with multiple lag independent variables具有多个滞后自变量的线性回归
【发布时间】:2017-07-15 20:01:06
【问题描述】:

我正在尝试对多个滞后自变量进行线性回归。我正在尝试自动化指定滞后数的部分,即 1、3、5 等。将自动更新下面的代码并提供在上一步中定义的滞后结果。 我没有任何“滞后”自动操作的代码如下。在这种情况下,我指定了 2 个滞后:

base::summary(stats::lm(ABX_2000$Returns ~ stats::lag(as.ts(ABX_2000$Returns),1) + 
                              stats::lag(as.ts(ABX_2000$Returns),2)))

此代码有效!

我定义了一个函数如下::

# function to accept multiple lags
lm_lags_multiple <- function(ds,lags=2){
  base::summary(stats::lm(ds ~ paste0("stats::lag(as.ts(ds,k=(", 1:lags, ")))", collapse = " + ")))
}
# run function
lm_lags_multiple(ds=ABX_2000$Returns,lags=2)

在运行上述函数时,我收到一条错误消息:

可变长度不同。

我不知道如何解决这个错误? R 中是否有与 Python 中等效的 lambda 函数?

【问题讨论】:

  • 滞后向量比原始向量短,按滞后量计算。您可能需要用零填写滞后系列的开头,以使它们具有相同的长度。
  • 你好@AndrewGustar。我对 R 很陌生,不知道如何解决这个问题。 paste0 函数 [paste0("stats::lag(as.ts(ds,k=(", 1:lags, ")))", collapse = " + ")] 返回 [1] "stats::lag( as.ts(ds,k=(1))) + stats::lag(as.ts(ds,k=(2)))"。将此结果分配给变量会导致相同的错误。感谢您的帮助。

标签: r lm


【解决方案1】:

让我们试试这段代码:

lm_lags_multiple <- function(ds,lags=2){
  lst <- list()
  for (i in 1:lags){
    lst[i] <- paste0("stats::lag(as.ts(ABX_2000$Returns),",i,")")
  }
  base::summary(stats::lm(as.formula(paste0("ds ~",paste(Reduce(c,lst), collapse = "+")))))
}

请不要忘记告诉我们它是否有效 :)

【讨论】:

  • 谢谢。我必须解决另一个问题,但很高兴知道解决方案
猜你喜欢
  • 2020-05-20
  • 2021-11-28
  • 2018-07-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-06
  • 1970-01-01
  • 2018-07-13
相关资源
最近更新 更多