Тиреверс нужен как минимум для мурлыканья и dplyr.
И я сделал больше образцов в примере, так как вам нужен вектор для shapiro.test
, а не одно отношение. Итак, здесь 100 выборок из нормального, биномиального и равномерного распределения.
library(tidyverse)
Type <- c("Bark", "Redwood", "Oak")
size <- c(10,15,13)
width <- c(3,4,5)
Ratio <- c(rnorm(100),
rbinom(100, size = 2, prob = 0.2),
runif(100))
Поместите их в data.frame
# Need minimum sample size for shapiro test
df <- data.frame(Type = rep(Type, each = 100),
Size = rep(size, each = 100),
width = rep(size, each = 100),
Ratio)
Тогда вы можете использовать ratio_log, в этом случае я взял на себя смелость просто использовать тот же коэффициент. Вы можете группировать по Type
и использовать nest
для вложения data.frame данных в группу.
df %>%
mutate(ratio_log = Ratio) %>%
group_by(Type) %>%
mutate(N_Samples = n()) %>%
nest()
# A tibble: 3 x 2
Type data
<fct> <list>
1 Bark <tibble [100 x 5]>
2 Redwood <tibble [100 x 5]>
3 Oak <tibble [100 x 5]>
Затем вы можете использовать функцию map
вместе с mutate
, чтобы в основном выполнить lapply
, примененную к вложенным элементам данных. Кадрам (или тибблам, то же самое по существу здесь). К каждому элементу данных. Кадрам для каждой группы, к которой мы применяем Функция shapiro.test
соответствует значениям в столбце ratio_log
.
# Use purrr::nest and purrr::map to do shapiro tests per group
df.shapiro <- df %>%
mutate(ratio_log = Ratio) %>%
group_by(Type) %>%
mutate(N_Samples = n()) %>%
nest() %>%
mutate(Shapiro = map(data, ~ shapiro.test(.x$ratio_log)))
# A tibble: 3 x 3
Type data Shapiro
<fct> <list> <list>
1 Bark <tibble [100 x 5]> <S3: htest>
2 Redwood <tibble [100 x 5]> <S3: htest>
3 Oak <tibble [100 x 5]> <S3: htest>
Теперь у вас есть вложенные shapiro.test
результаты, примененные к каждой группе.
Для получения соответствующих параметров вы можете использовать glance
из пакета broom
. Затем unnest
результат функции glance
.
# Use broom::glance and purrr::unnest to get all relevant statistics
library(broom)
df.shapiro.glance <- df.shapiro %>%
mutate(glance_shapiro = Shapiro %>% map(glance)) %>%
unnest(glance_shapiro)
Type data Shapiro statistic p.value method
<fct> <list> <list> <dbl> <dbl> <fct>
1 Bark <tibble [100 x 5]> <S3: htest> 0.967 1.30e- 2 Shapiro-Wilk normality test
2 Redwood <tibble [100 x 5]> <S3: htest> 0.638 2.45e-14 Shapiro-Wilk normality test
3 Oak <tibble [100 x 5]> <S3: htest> 0.937 1.31e- 4 Shapiro-Wilk normality test