使用purrr在一个数据集上运行多个chisq-tests

时间:2018-05-11 19:59:24

标签: r purrr broom

我对R的世界很新。我有以下测试数据:

A<-tibble(parasite=sample(0:1,10,rep=TRUE),L1=sample(0:1,10,rep=TRUE),
L2=sample(0:1,10,rep=TRUE),L3=sample(0:1,10,rep=TRUE), 
L4=sample(0:1,10,rep=TRUE))

看起来像:

   parasite L1 L2 L3 L4 
1         0  0  1  0  0 
2         1  0  1  1  1 
3         1  1  1  0  1 
4         0  1  1  1  0 
5         1  1  1  1  0 
...10 rows total 

我想做的是运行4次chisq测试:

1.parasite vs L1

2.parasite vs L2

3.parasite vs L3

4.parasite vs L4

然后我想生成一个汇总tibble,它列出了每个表的Y分量(L1,L2 ......),chisq值和pvalues(在合理范围内舍入)。喜欢:

variable  chisq  pvalue 
L1        1.475    0.0892 
L2       18.453    0.0000E8 
L3        2.4781   0.0012 
L4        0.6785   0.2755 

我已经看到使用map来做类似的事情,但是我无法让它工作,但是因为我正在学习,所以任何简洁的方法都会非常感激。

e.g。

map(~chisq.test(.x, data$column)) %>% 
  tibble(names = names(.), data = .) %>% 
  mutate(stats = map(data, tidy)) 
unnest(data,stats) 

有人能告诉我怎么做吗?

谢谢!

2 个答案:

答案 0 :(得分:0)

将数据重塑为长(整齐)格式可能更好,然后您可以使用nest()分组执行测试。例如

A %>% 
  gather("variable", "measure", -parasite) %>% 
  group_by(variable)%>% 
  nest(-variable) %>% 
  mutate(stats = map(data, ~broom::tidy(chisq.test(.$parasite, .$measure)))) %>% 
  select(-data) %>% 
  unnest()

替代方案,您可以使用do()

A %>% 
  gather("variable", "measure", -parasite) %>% 
  group_by(variable) %>% 
  do(broom::tidy(chisq.test(.$parasite, .$measure)))

答案 1 :(得分:0)

以下是一种方法:将数据转换为长形,在分组数据框上使用do来调用chisq.test,然后使用broom整理该输出。

library(tidyverse)

set.seed(1)
A <-tibble(parasite=sample(0:1,10,rep=TRUE),
                     L1=sample(0:1,10,rep=TRUE),
                    L2=sample(0:1,10,rep=TRUE),
                    L3=sample(0:1,10,rep=TRUE), 
                    L4=sample(0:1,10,rep=TRUE))

A %>%
    gather(key = variable, value = value, -parasite) %>%
    group_by(variable) %>%
    do(chisq.test(.$parasite, .$value) %>% broom::tidy())
#> # A tibble: 4 x 5
#> # Groups:   variable [4]
#>   variable statistic p.value parameter method                             
#>   <chr>        <dbl>   <dbl>     <int> <chr>                              
#> 1 L1        0.         1             1 Pearson's Chi-squared test         
#> 2 L2        2.93e-32   1.000         1 Pearson's Chi-squared test with Ya…
#> 3 L3        0.         1             1 Pearson's Chi-squared test         
#> 4 L4        2.34e- 1   0.628         1 Pearson's Chi-squared test with Ya…

reprex package(v0.2.0)创建于2018-05-11。