代码之家  ›  专栏  ›  技术社区  ›  user6883405

在R中的多元回归中加入AR(1)项

  •  1
  • user6883405  · 技术社区  · 7 年前

    我正在运行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变量

      x = df[,505:507]
      
    2. 所有indep var

      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\u滞后 需要调用,每个回归一个。

    1 回复  |  直到 7 年前
        1
  •  1
  •   Antonios    7 年前

    我不确定你的滞后项,它似乎实际上是下一个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))