r 从 lapply 模型摘要中筛选和汇总结果

r filter and aggregate results from lapply model summary

我正在尝试使用 dlply 过滤和汇总在数据集子集上执行的多个回归模型的结果。

这就是我 运行 我的模型:

library(plyr)

data("mtcars")

models = dlply(mtcars, .(cyl), function(df) lm(mpg ~ hp,data=df))
lapply(models, summary)

现在我正在组合不同模型(气缸 4、6、8)的结果,如下所示:

rbind(
  c("Cylinder 4", coef(lapply(models, summary)$`4`)[2,]),
  c("Cylinder 6", coef(lapply(models, summary)$`6`)[2,]),
  c("Cylinder 8", coef(lapply(models, summary)$`8`)[2,])
)

有没有更有效的总结方法?

我们可以使用 broom 中的 tidy,而不是使用 summarycoef。我们也可以直接将模型数据通过管道传输到 map2_df.

library(tidyverse)

dlply(mtcars, .(cyl), function(df)
  lm(mpg ~ hp, data = df)) %>%
  map2_df(
    .,
    names(.),
    ~ tidy(.x)[2,] %>% mutate(Cylinder = paste0("Cylinder ", .y)) %>% tibble::column_to_rownames("Cylinder")
  )

输出

  term  estimate std.error statistic p.value Cylinder
  <chr>    <dbl>     <dbl>     <dbl>   <dbl> <chr>   
1 hp    -0.113      0.0612    -1.84   0.0984 4       
2 hp    -0.00761    0.0266    -0.286  0.786  6       
3 hp    -0.0142     0.0139    -1.02   0.326  8