我想对基线规范中的变量和随后的七个附加变量(即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。从这里开始,我不知道如何选择变量子集,而不是构建实际数据框子集,也不知道如何使用基线变量。
我该怎么做?任何提示都非常感谢!
答案 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),
)
}
}