【发布时间】:2019-11-22 11:19:34
【问题描述】:
我需要在同一个数据集上估计多个线性模型,并将回归结果全部放在一张表中。对于可重现的示例,这里是使用mtcars 的简化:
formula_1 = "mpg ~ disp"
formula_2 = "mpg ~ log(disp)"
formula_3 = "mpg ~ disp + hp"
目前,我的方法是:
- 创建一个包含所有公式的列表。
- 使用
purrr:map()估计所有lm模型。 - 使用
stargazer::生成输出表。
library(tidyverse)
library(stargazer)
formula_1 = "mpg ~ disp"
formula_2 = "mpg ~ log(disp)"
formula_3 = "mpg ~ disp + hp"
lst <- list(formula_1, formula_2, formula_3)
models<- lst %>% map(~lm(., mtcars))
stargazer(models, type = "text")
这给了我正在寻找的输出:
#>
#> =========================================================================================
#> Dependent variable:
#> ---------------------------------------------------------------------
#> mpg
#> (1) (2) (3)
#> -----------------------------------------------------------------------------------------
#> disp -0.041*** -0.030***
#> (0.005) (0.007)
#>
#> log(disp) -9.293***
#> (0.787)
#>
#> hp -0.025*
#> (0.013)
#>
#> Constant 29.600*** 69.205*** 30.736***
#> (1.230) (4.185) (1.332)
#>
#> -----------------------------------------------------------------------------------------
#> Observations 32 32 32
#> R2 0.718 0.823 0.748
#> Adjusted R2 0.709 0.817 0.731
#> Residual Std. Error 3.251 (df = 30) 2.579 (df = 30) 3.127 (df = 29)
#> F Statistic 76.513*** (df = 1; 30) 139.350*** (df = 1; 30) 43.095*** (df = 2; 29)
#> =========================================================================================
#> Note: *p<0.1; **p<0.05; ***p<0.01
简单问题:
当有很多公式时,如何将所有公式放入一个列表中?如果只有 3 个公式,则下面的行有效,但在要估计的模型很多时显得笨拙。
lst <- list(formula_1, formula_2, formula_3)
第二个问题:
有没有更好的方法来完成整个任务,比如使用broom 或其他方法?或者purrr:map()是一个合理的解决方案?
【问题讨论】:
-
您可以将所有公式放在一个 tibble 中,然后使用
mutate(models = map(forumulas, ...)。至于生成所有公式,您可以通过构建一个函数来完成一些花哨的工作,该函数接受您的 IV、DV 和一些修改函数,然后将公式粘贴在一起。
标签: r tidyverse purrr lm stargazer