将一系列回归的结果顺序存储到数据框中

时间:2019-04-29 20:20:13

标签: r function regression

假设我想运行一系列回归,就像这样:

summary(lm(mpg ~ cyl, data = mtcars))
summary(lm(mpg ~ disp, data = mtcars))
summary(lm(mpg ~ wt, data = mtcars))

我想创建一个数据框,其中包含每个输出的估计值和标准误差,最好包含变量名。因此最终输出应如下所示:

Variable  Beta  Coeff
cyl       -2.8  .32
disp      -.04  .004
wt        -5.3  .56

我认为它将需要一个功能。有什么想法吗?

2 个答案:

答案 0 :(得分:4)

一种简单的方法是在purrr中使用broomtidyverse软件包。

library(purrr)
library(broom)
cols <- c("cyl", "disp", "wt")

map_df(cols, ~lm(reformulate(.x, "mpg"), data=mtcars) %>% tidy())
#   term        estimate std.error statistic  p.value
#   <chr>          <dbl>     <dbl>     <dbl>    <dbl>
# 1 (Intercept)  37.9      2.07        18.3  8.37e-18
# 2 cyl          -2.88     0.322       -8.92 6.11e-10
# 3 (Intercept)  29.6      1.23        24.1  3.58e-21
# 4 disp         -0.0412   0.00471     -8.75 9.38e-10
# 5 (Intercept)  37.3      1.88        19.9  8.24e-19
# 6 wt           -5.34     0.559       -9.56 1.29e-10

这为您提供了一些额外的信息,但是您可以根据需要轻松地使用dplyr对其进行过滤。

答案 1 :(得分:1)

一个选项是遍历感兴趣的列,pastelm中创建一个公式,tidy输出,slice离开第一行,{ {1}}感兴趣的列

select

或使用library(broom) library(tidyverse) map_df(c("cyl", "disp", "wt"), ~ lm(paste0("mpg ~ ", .x), data = mtcars) %>% tidy %>% slice(-1) %>% select(Variable = term, Beta = estimate, Coeff = std.error)) # A tibble: 3 x 3 # Variable Beta Coeff # <chr> <dbl> <dbl> #1 cyl -2.88 0.322 #2 disp -0.0412 0.00471 #3 wt -5.34 0.559

base R