如何使用 for 循环进行 运行 回归?

How can I use a for loop to run regression?

我当前的数据集如下:

N = 10000
wage <- rnorm(N)
educ <- rnorm(N)
age  <- rnorm(N)
tce  <- rnorm(N)

work <- rbinom(n = N, size = 1, prob = 0.05)
manu <- rbinom(n = N, size = 1, prob = 0.05)

id <- sample(10, N, replace = TRUE)

df <- data.frame(wage, educ, age, tce, work, manu, id)

wageworkmanu是我的因变量,其余变量是我的自变量。

目前,我正在重复语法,但只是像这样更改结果变量:

library(fixest)

model1 <- feols(work ~ educ + age + tce | id, data = df)

model2 <- feols(manu ~ educ + age + tce | id, data = df)

model2 <- feols(wage~ educ + age + tce | id, data = df)

有没有一种方法可以使用 for 循环来 运行 这样的回归?

此外,在 运行 回归后,我还想绘制回归系数:

library(modelsummary)

modelplot(
 list(model1, model2, model3)
 )

但是,由于 for 循环不创建新对象,我该如何绘制系数?

我无法使用提供的代码复制您的示例。不过,您可以使用这样的循环:

variable <- c("work", "manu", "wage")
datalist <- list()

for(i in variable) {
  formula <- as.formula(paste(i, " ~ educ + age + tce | id"))
  model <- feols(formula, data = df)
  datalist[[i]] <- model
}

每个条件的模型将保存在一个列表中,您可以访问该列表或将其作为对象提取。

多重估计是 fixest 中的一个 built-in 功能。使用 c(v1, v2) 到 运行 跨多个因变量的回归。顺便说一句,这也比循环快得多。

est_multi = feols(c(work, manu, wage) ~ educ + age + tce | id, df)
etable(est_multi)
#>                          model 1          model 2           model 3
#> Dependent Var.:             work             manu              wage
#>                                                                    
#> educ            -0.0060 (0.0031) -0.0009 (0.0023)   0.0204 (0.0139)
#> age              0.0018 (0.0028)  0.0003 (0.0030)   0.0092 (0.0053)
#> tce             -0.0013 (0.0027)  0.0036 (0.0020) -0.0174. (0.0075)
#> Fixed-Effects:  ---------------- ---------------- -----------------
#> id                           Yes              Yes               Yes
#> _______________ ________________ ________________ _________________
#> S.E.: Clustered           by: id           by: id            by: id
#> Observations              10,000           10,000            10,000
#> R2                       0.00117          0.00038           0.00175
#> Within R2                0.00083          0.00031           0.00082
#> ---
#> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

请注意,如果您在向量中有变量名称,您可以直接将它们插入公式中,这要归功于 dot-square-bracket operator:

depvars = c("work", "manu", "wage")
est_multi_bis = feols(.[depvars] ~ work ~ educ + age + tce | id, df)

您可以在 dedicated vignette.

中找到一些关于多重估计的文档