如何按函数分组进行shapiro测试 类型库(dplyr) 类型库(dplyr) 键入

如何按函数分组进行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

至少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]>

至少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