【问题标题】:Adding AR(1) term to multiple regressions in R将 AR(1) 项添加到 R 中的多重回归
【发布时间】:2018-03-01 20:29:20
【问题描述】:

我正在运行 503 个单独的回归,每个回归都有一个单独的因变量,有 3 个自变量和 1 个 AR(1) 项。

数据:

# fake data 
set.seed(333)
df <- data.frame(seq(as.Date("2017/1/1"), as.Date("2017/2/19"), "days"),
                 matrix(runif(50*506), nrow = 50, ncol = 506))

names(df) <- c("Date", paste0("var", 1:503), c("mktrf", "smb", "hml"))

我使用名为 lagpad 的函数如下创建 AR(1) 过程:

lagpad <- function(x, k=1) {
  i<-is.vector(x)
  if(is.vector(x)) x<-matrix(x) else x<-matrix(x,nrow(x))
  if(k>0) {
    x <- rbind(matrix(rep(NA, k*ncol(x)),ncol=ncol(x)), matrix(x[1:(nrow(x)-k),], ncol=ncol(x)))
  }
  else {
    x <- rbind(matrix(x[(-k+1):(nrow(x)),], ncol=ncol(x)),matrix(rep(NA, -k*ncol(x)),ncol=ncol(x)))
  }
  if(i) x[1:length(x)] else x
}

然后我存储回归所需的变量:

  1. 所有的 dep var

    x = df[,505:507]
    
  2. 所有独立变量

    y <- df[,2:504]
    
  3. AR(1) 流程

    y_lag <- lagpad(y, -1)
    
  4. 适合所有模型

    list_models_AR= lapply(y, function(y) 
           with(x, lm(y ~ mktrf +  smb + hml + y_lag, na.action = na.exclude)))
    

在这种情况下,我无法弄清楚如何使用lapply,因为需要调用 y_lag 的多个组件,每个回归都有一个组件。

【问题讨论】:

  • 可能类似于:lapply(1:503, function(n) {ly &lt;- y[[n]]; lpy=lagpad[[n]]; lm( y ~ .+lpy, data=x)})。明智地分析这看起来像是一团糟。多重比较是一个统计泥潭。

标签: r linear-regression lapply lm autoregressive-models


【解决方案1】:

我不确定您的滞后项,它似乎实际上是下一个 y 列。如果是这样,您可以按如下方式创建 502 模型:

list_models_AR= lapply(1:(ncol(y)-1), function(i) lm(y[,i]~x[,1] +  x[,2] + x[,3] +y[,i+1], na.action=na.exclude))

【讨论】:

  • 为什么我要使用 y[,i+1] 而不是 y_lag[,i]?你能解释一下 y[,I+1] 在做什么吗?
  • 复制您的代码我得到y_lag 是一个包含 550 个元素的列表以及一个警告。列表中的每个元素都等于您的df 的进一步元素,例如y_lag == df[,2]。因此,我将等效表达式放入循环 lapply 中。最终名单中的 502 款车型为y[,1]~x[,1] + x[,2] + x[,3] +y[,2] ... y[,502]~x[,1] + x[,2] + x[,3] +y[,503]
猜你喜欢
  • 2021-09-14
  • 2021-01-21
  • 2013-05-05
  • 2023-04-10
  • 2015-07-19
  • 1970-01-01
  • 2020-05-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多