如何按函数分组进行shapiro测试 类型库(dplyr) 类型库(dplyr) 键入
至少purrr和dplyr需要tidyverse 我在示例中制作了更多的示例,因为您需要shapiro.test的向量,而不是单个比率。这里有100个样本,来自正态分布,二项分布和均匀分布如何按函数分组进行shapiro测试 类型库(dplyr) 类型库(dplyr) 键入,r,dplyr,normal-distribution,R,Dplyr,Normal Distribution,至少purrr和dplyr需要tidyverse 我在示例中制作了更多的示例,因为您需要shapiro.test的向量,而不是单个比率。这里有100个样本,来自正态分布,二项分布和均匀分布 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, w
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)))
然后,您可以使用map
函数和mutate
来基本上执行lappy
应用于嵌套的data.frames(或tibbles,本质上在这里是一样的)。对于每组的每个data.frames,我们将shapiro.test
函数应用于ratio\u log
列中的值
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]>
至少purrr和dplyr需要tidyverse 我在示例中制作了更多的示例,因为您需要shapiro.test的向量,而不是单个比率。这里有100个样本,来自正态分布,二项分布和均匀分布
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)))
然后,您可以使用map
函数和mutate
来基本上执行lappy
应用于嵌套的data.frames(或tibbles,本质上在这里是一样的)。对于每组的每个data.frames,我们将shapiro.test
函数应用于ratio\u log
列中的值
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]>
shapiro.test的最小样本量需要在3到5000之间。您能举一个具有所有比率的较大数据帧的示例吗?您的错误是因为您没有将存储
ratio\u log
添加到df
中。下面的代码是一个解决方案:df%mutate(ratio\u log=log10(ratio))
。对于Shapiro测试,请添加一个合适的示例Shapiro.Test的最小样本量为3到5000。您能举一个具有所有比率的较大数据帧的示例吗?您的错误是因为您没有将存储ratio\u log
添加到df
中。下面的代码是一个解决方案:df%mutate(ratio\u log=log10(ratio))
。对于Shapiro测试,请添加一个合适的示例谢谢Lodewic,这正是我需要的解决方案,它像一个符咒一样工作。谢谢Lodewic,这正是我需要的解决方案,它像一个符咒一样工作。
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]>
# 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>
# 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