总结数据中多元回归的结果 table

Summarize results of mutliple regression in a data table

我想总结一个数据中多元回归的结果table。

示例中使用的包:

library(data.table)
library(fixest)
library(broom)
library(tidyr)

示例数据

dt <- data.table(mtcars)

首先,我创建了所有将要使用的公式。

y_vars <- c("mpg","cyl")
x_vars <- c("disp", "hp")

vars <- tidyr::crossing(y_vars, x_vars)

vars$formula <- paste(vars$y_vars, "~", vars$x_vars)

formulas <- vars$formula

然后我估计所有模型并使用 tidy() 总结结果:

res <- lapply(formulas ,function(i) tidy(feols(as.formula(i),data=dt)))
data.table::rbindlist(res)

这是结果数据 table :

          term    estimate   std.error statistic      p.value
1: (Intercept)  3.18856797 0.296387718 10.758097 8.121618e-12
2:        disp  0.01299804 0.001135649 11.445474 1.802838e-12
3: (Intercept)  3.00679525 0.425485225  7.066744 7.405351e-08
4:          hp  0.02168354 0.002635142  8.228604 3.477861e-09
5: (Intercept) 29.59985476 1.229719515 24.070411 3.576586e-21
6:        disp -0.04121512 0.004711833 -8.747152 9.380327e-10
7: (Intercept) 30.09886054 1.633920950 18.421246 6.642736e-18
8:          hp -0.06822828 0.010119304 -6.742389 1.787835e-07

问题是我无法识别此摘要中的 y 变量 table。 理想情况下,我希望再有一个列采用 y 变量的值。 我查看了 tidy() 文档,但没有找到如何添加它。

知道怎么做吗?

考虑 base R 中的 Map(可以接受多个参数)

library(data.table)
rbindlist(Map(function(fmla, yvar) transform(tidy(feols(as.formula(fmla),
         data = dt)), yvar = yvar), formulas, vars$y_vars))
          term    estimate   std.error statistic      p.value yvar
1: (Intercept)  3.18856797 0.296387718 10.758097 8.121618e-12  cyl
2:        disp  0.01299804 0.001135649 11.445474 1.802838e-12  cyl
3: (Intercept)  3.00679525 0.425485225  7.066744 7.405351e-08  cyl
4:          hp  0.02168354 0.002635142  8.228604 3.477861e-09  cyl
5: (Intercept) 29.59985476 1.229719515 24.070411 3.576586e-21  mpg
6:        disp -0.04121512 0.004711833 -8.747152 9.380327e-10  mpg
7: (Intercept) 30.09886054 1.633920950 18.421246 6.642736e-18  mpg
8:          hp -0.06822828 0.010119304 -6.742389 1.787835e-07  mpg

或使用 purrr

中的 map2
library(dplyr)
library(purrr)
library(tidyr)
vars %>% 
    transmute(out = map2(y_vars, formula,
          ~ tidy(feols(as.formula(.y), data = dt)) %>%
                mutate(y_var = .x))) %>% 
    unnest(out)

-输出

# A tibble: 8 x 6
  term        estimate std.error statistic  p.value y_var
  <chr>          <dbl>     <dbl>     <dbl>    <dbl> <chr>
1 (Intercept)   3.19     0.296       10.8  8.12e-12 cyl  
2 disp          0.0130   0.00114     11.4  1.80e-12 cyl  
3 (Intercept)   3.01     0.425        7.07 7.41e- 8 cyl  
4 hp            0.0217   0.00264      8.23 3.48e- 9 cyl  
5 (Intercept)  29.6      1.23        24.1  3.58e-21 mpg  
6 disp         -0.0412   0.00471     -8.75 9.38e-10 mpg  
7 (Intercept)  30.1      1.63        18.4  6.64e-18 mpg  
8 hp           -0.0682   0.0101      -6.74 1.79e- 7 mpg