Tidyverse: ANOVA для каждого уровня фактора - PullRequest
0 голосов
/ 02 октября 2018

Я хочу выполнить ANOVA для каждого уровня фактора.Я могу сделать это с dplyr::do, но хотел бы также с purrr.Любой намек, пожалуйста.

library(tidyverse)

df1 <- mtcars
df1$cyl  <- factor(df1$cyl)
df1$gear <- factor(df1$gear)

fm1 <-
  df1 %>%
  dplyr::group_by(gear) %>%
  dplyr::do(m1 = summary(aov(mpg ~ cyl, data = .)))

fm1$m1

> fm1$m1
[[1]]
            Df Sum Sq Mean Sq F value Pr(>F)  
cyl          2  69.03   34.52   4.596  0.033 *
Residuals   12  90.11    7.51                 
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

[[2]]
            Df Sum Sq Mean Sq F value Pr(>F)  
cyl          1  137.3   137.3   8.123 0.0172 *
Residuals   10  169.0    16.9                 
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

[[3]]
            Df Sum Sq Mean Sq F value Pr(>F)  
cyl          2  167.4   83.68   16.74 0.0564 .
Residuals    2   10.0    5.00                 
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

fm2 <-
  df1 %>%
  dplyr::group_by(gear) %>%
  tidyr::nest() %>%
  dplyr::mutate(m2 = purrr::map(.x = data, .f = ~ summary(aov(mpg ~ cyl, data = .)))) %>%
  tidyr::unnest()

1 Ответ

0 голосов
/ 02 октября 2018

Вы можете использовать вложенный фрейм данных, а затем сохранить все сводки в новом столбце списка:

library(tidyverse)

df1 <- mtcars

df_aov <- df1 %>%
  dplyr::group_by(gear) %>%
  tidyr::nest() %>%
  dplyr::mutate(.data = .,
                aov_results = data %>% purrr::map(.x = ., .f = ~ summary(aov(mpg ~ cyl, data = .))))

df_aov$aov_results[[1]]
#>             Df Sum Sq Mean Sq F value Pr(>F)  
#> cyl          1  137.3   137.3   8.123 0.0172 *
#> Residuals   10  169.0    16.9                 
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Создано в 2018-10-02 пакетом Представить (v0.2.1)

...