Type <- c("Bark", "Redwood", "Oak")
size <- c(10,15,13)
width <- c(3,4,5)
Ratio <- size/width
df <- data.frame(Type, size, width, Ratio)
mutate(df, ratio_log = log10(Ratio))
df %>% group_by(Type) %>% shapiro.test(ratio_log)
shapiro.test(。,ratio_log)出错:未使用的参数(ratio_log)
我试图对所有类型进行夏皮罗测试,例如树皮,红木,橡木。并非所有的比率合并。我有一个更大的数据集,包含更多的比率。
答案 0 :(得分:1)
至少你需要为purrr和dplyr提供tidyverse。
我在示例中制作了更多样本,因为您需要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
应用于嵌套的data.frames(或基本上相同的东西。)到每个数据。每组帧数我们将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
答案 1 :(得分:0)
library(dplyr)
Type <- c("Bark", "Redwood", "Oak")
size <- c(10,15,13)
width <- c(3,4,5)
Ratio <- size/width
df <- data.frame(Type, size, width, Ratio)
df %>%
mutate(ratio_log = log10(Ratio)) %>%
group_by(Type) %>%
summarise(results = data_frame(shapiro.test(.$ratio_log)))
您还可以在此处查看其他解决方案:purrr map a t.test onto a split df