回归与子集和基线规范+不同的变量

时间:2014-09-01 18:24:10

标签: r regression

我想对基线规范中的变量和随后的七个附加变量(即8个回归)进行回归。我想为data.frame的两个子集和附加变量的两个子集执行此操作。

然后,我想通过子集组合保存这些8x2x2 = 32回归的输出stargazer(所以4个文件)。你可以想象这是一个巨大的打字工作。关于SO的一些答案与此相关(例如使用ddply,但我对组合很困难,尤其是在每次回归中基线变量保持不变的事实。

以下是我将基线变量(控件)和其他变量的数量减少到两个的数据:

Two.Year <- 1:4
Length <- 4:8
NumAck <- 8:12
degree_max <- 15:19
degree_median <- 16:20
katz_max <- 19:23
katz_median <- 23:27
Year <- rep(c("early","late"), each=2)

Master <-as.data.frame(cbind(
 Two.Year, Length, NumAck, degree_max, degree_median, katz_max, katz_median, Year
 ))

这两个子集由变量Year中的级别定义。

基线回归

lm(Two.Year ~ Length + NumAck,
  Data=subset(Master, subset=Publication.Year==early)
  )

第二个和第三个是以_max结尾的所有变量,因此lm(Two.Year ~ Length + NumAck + degree_max, Data=Master)lm(Two.Year ~ Length + NumAck + katz_max, Data=Master)。这给出了第二个子集,定义为以_max结尾的所有变量和以_median结尾的变量。到目前为止,我使用grepl("_median", names(Master))grepl("_max", names(Master))提取了这些内容。

如上所述,我想保存分组子集的输出。也就是说,从(I)早期和最大,(II)早期和中位数,(III)晚期和最大和(IV)晚期和中位数的所有回归。

到目前为止,我试过

Master.subset <- split(Master, Master$time)
ols <- ddply( Master[ Master$time %in% c('early','late'), ], "time",
  function(Master) coefficients(lm(Two.Year~., data=Master)))

然后使用stargazer()保存ols。从这里开始,我不知道如何选择变量子集,而不是构建实际数据框子集,也不知道如何使用基线变量。

我该怎么做?任何提示都非常感谢!

1 个答案:

答案 0 :(得分:0)

这是我最终做的。

首先,我定义了用于三个循环的变量:

# Write baseline model
baseline <- "Two.Year ~ Length + numAck"
# Write the model specific variables
measure <- c("degree", "katz")
# Write variable which determines the subset
timepoints <- c("early", "late")

我构造了三个嵌套循环,以便在循环中正确定义变量子集,data.frame子集和公式子集。在第二个循环结束时,我将输出写入文件usinger stargazer

# Output matrix
ols <- matrix()
# First loop for the time
for (tmpnt in considered_time) {
  # Estimate baseline model which is constant in tmpnt
  ols$baseline <- lm(as.formula(baseline),
    data=subset(Master, timepoint==tmpnt)
    )
  ols <- ols[-1] # for some reason the first column in ols is empty
  # Second loop for the variable subset
  for (type in c("median", "max", "mean")) {
    # Third loop for the estimation of all the other models
    for (msr in measures) {
      ols[[msr]] = lm(as.formula(paste(baseline, paste(msr, type, sep="_"), sep="+")),
        data=subset(Master, timepoint==tmpnt)
        )
      }
    # Write output to file
    stargazer(ols,
     title=paste("Regression output for ",tmpnt," subsample using ",type),    
     )
   }
 }