Звучит как работа для map()
от мурлыканья вместе с тидиром unnest()
!
В следующий раз было бы полезно создать воспроизводимый пример , но вот тот, с которого мы можем начать.
library(tidyverse)
train <- data_frame(metric = c("mpg",
"disp"),
formula = list(as.formula("mpg ~ ."),
as.formula("disp ~ ."))) %>%
mutate(model = map(formula, ~lm(.x, data = mtcars)))
train
#> # A tibble: 2 x 3
#> metric formula model
#> <chr> <list> <list>
#> 1 mpg <S3: formula> <S3: lm>
#> 2 disp <S3: formula> <S3: lm>
Обратите внимание, что я настроил столбец с именем метрики, которую мы будем использовать в качестве прогнозируемых величин в моделях, а затем столбцы, содержащие формулы для моделирования. Вы могли бы стать еще более привлекательным с paste()
там и mutate()
и не перепечатывать названия предсказанных величин. Затем используйте purrr map()
, чтобы подобрать модель для каждой из предсказанных величин. Теперь у вас есть столбец, содержащий модели.
Затем пришло время проверить все ваши коэффициенты регрессии. Обратите внимание, как map()
принимает свои аргументы: сначала количество, которое вы отображаете (модели), затем функция, которую вы применяете к каждой из этих моделей (функция из clubSandwich), затем, наконец, другие аргументы, которые необходимо передать к этой функции.
tests <- train %>%
mutate(coeffs = map(model, clubSandwich::coef_test, "CR2", "Satterthwaite", "All", mtcars$cyl))
tests
#> # A tibble: 2 x 4
#> metric formula model coeffs
#> <chr> <list> <list> <list>
#> 1 mpg <S3: formula> <S3: lm> <coef_test_clubSandwich [11 × 4]>
#> 2 disp <S3: formula> <S3: lm> <coef_test_clubSandwich [11 × 4]>
Мы сделали это! Последний шаг - использование тидира unnest()
, чтобы мы могли легко получить все эти величины из тестов коэффициента регрессии.
tests %>%
unnest(coeffs)
#> # A tibble: 22 x 5
#> metric beta SE df p_Satt
#> <chr> <dbl> <dbl> <dbl> <dbl>
#> 1 mpg 12.3 16.3 1.52 0.550
#> 2 mpg -0.111 1.44 2.00 0.945
#> 3 mpg 0.0133 0.0159 1.34 0.526
#> 4 mpg -0.0215 0.0330 1.82 0.588
#> 5 mpg 0.787 0.493 2.05 0.248
#> 6 mpg -3.72 2.05 1.33 0.270
#> 7 mpg 0.821 0.388 1.34 0.228
#> 8 mpg 0.318 1.55 1.74 0.859
#> 9 mpg 2.52 1.25 1.73 0.202
#> 10 mpg 0.655 1.84 1.73 0.761
#> # ... with 12 more rows
Создано в 2018-04-26 пакетом представ (v0.2.0).