【问题标题】:Saving and accessing results from regression in a loop在循环中保存和访问回归结果
【发布时间】:2014-02-12 14:25:18
【问题描述】:

我正在尝试通过for loop 中的pml 包进行几个面板数据回归,然后保存结果,以便我可以在每个回归结果上使用summary。但是,我似乎无法弄清楚如何在保存结果的list 上使用summary。这是我尝试过的:

library(plm)

########### Some toy data #################

Id <- c(rep(1:4,3),rep(5,2))
Id <- Id[order(Id)]
Year <- c(rep(2000:2002,4),c(2000,2002))

z1 <- rnorm(14)
z2 <- rnorm(14)
z3 <- rnorm(14)
z4 <- rnorm(14)

CORR <- rbind(c(1,0.6,0.5,0.2),c(0.6,1,0.7,0.3),c(0.5,0.7,1,0.4),c(0.2,0.3,0.4,1))
CholCORR <- chol(CORR)
DataTest <- as.data.frame(cbind(z1,z2,z3,z4)%*%CholCORR)
names(DataTest)<-c("y","x1","x2","x3")
DataTest <- cbind(Id, Year, DataTest)

############################################

for(i in 2001:2002){

  Data <- DataTest[(DataTest$Year <= i), ]
  TarLV <- plm(diff(y) ~ lag(x1) + x2 + x3, data = Data, model="pooling", index = c("Id","Year"))
  if(i==2001){
    Res1St <- TarLV
  } else {
    Res1St <- c(Res1St,TarLV)
  }
}

sapply(Res1St, function(x) summary(x))

但是,我得到错误:

Error in tapply(x, effect, func, ...): Arguments must have same length

我可能不会以非常明智的方式保存回归结果,for loop 可能可以避免,我只是不知道如何。任何帮助表示赞赏!

【问题讨论】:

    标签: r for-loop lapply


    【解决方案1】:

    将 plm 对象存储在列表中。因此,在循环之前创建一个空对象 (out),然后将其填充到循环中。

    out <- NULL
    yr <- 2001:2002
    for(i in seq_along(yr)){
      take <- DataTest[(DataTest$Year <= yr[i]), ]
      out[[i]] <- plm(diff(y) ~ lag(x1) + x2 + x3, data = take, model="pooling", index = c("Id","Year"))
    
    }
    
    lapply(out, summary)
    

    在这里我还做了其他更改:

    • 循环遍历 1,2, 3, ... ,而不是 2001, 2002
    • 不想覆盖 DataTests -> 重命名为 take

    【讨论】:

    • 谢谢 - 不,DataTest 绝对不应该被覆盖。
    猜你喜欢
    • 2016-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-17
    • 2020-04-07
    • 2021-05-04
    • 2015-07-20
    • 1970-01-01
    相关资源
    最近更新 更多