Последовательное сохранение результатов серии регрессий в кадре данных. - PullRequest
2 голосов
/ 29 апреля 2019

Предположим, я хочу запустить серию регрессий, например:

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 ]

4 голосов
/ 29 апреля 2019

Один простой способ - использовать пакеты purrr и broom в tidyverse.

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 голос
/ 29 апреля 2019

Одним из вариантов будет цикл по интересующим столбцам, paste для создания формулы в lm, tidy на выходе, slice в первой строке и 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

t(sapply(c("cyl", "disp", "wt"), function(x) 
   summary(lm(paste0("mpg ~ ", x), data = mtcars))$coefficients[-1, 1:2]))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...