Запустите несколько тестов chisq для одного набора данных с помощью purrr. - PullRequest
0 голосов
/ 11 мая 2018

Я очень новичок в мире 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. Паразит против L1

2. Паразит против L2

3. Паразит против L3

4. Паразит против L4

Затем я хочу создать итоговую таблицу, в которой перечислены компоненты 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 для создания чего-то похожего, но я не могу заставить его работать, но, поскольку я учусь, любой сжатый способ сделать это был бы очень признателен.

например.

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

Может кто-нибудь показать мне, как это сделать?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 11 мая 2018

Вот один из способов: получить данные в длинной форме, использовать 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…

Создано в 2018-05-11 пакетом Представ. (v0.2.0).

0 голосов
/ 11 мая 2018

Вероятно, лучше преобразовать ваши данные в длинный (аккуратный) формат, тогда вы можете использовать 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)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...