如何使用 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)
wage
、work
和manu
是我的因变量,其余变量是我的自变量。
目前,我正在重复语法,但只是像这样更改结果变量:
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.
中找到一些关于多重估计的文档
我当前的数据集如下:
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)
wage
、work
和manu
是我的因变量,其余变量是我的自变量。
目前,我正在重复语法,但只是像这样更改结果变量:
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.
中找到一些关于多重估计的文档