Используйте R dplyr / purrr для получения выходных матриц хи-квадрат по группам - PullRequest
0 голосов
/ 25 марта 2019

Я бы хотел получить выходные матрицы хи-квадрат (например, стандартизированные остатки, ожидаемые значения) по группам, используя элементы тидиверса.Используя набор данных mtcars, вот где я начал:

mtcars %>% 
  dplyr::select(vs, am) %>%
  table() %>%
  chisq.test(.) 

, который выдает статистику теста хи-квадрат.Например, чтобы получить стандартизированные невязки, мой единственный успешный код такой:

mtcars %>% 
  dplyr::select(vs, am) %>%
  table() %>%
  chisq.test(.) -> chi.out

chi.out$stdres

     vs am       Freq
1  0  0  0.9523038
2  1  0 -0.9523038
3  0  1 -0.9523038
4  1  1  0.9523038

В идеале я хотел бы получить наблюдаемые значения и стандартизированные невязки в формате кадра данных.Примерно так:

cbind(as.data.frame(chi.out$observed),as.data.frame(chi.out$stdres))

  vs am Freq vs am       Freq
1  0  0   12  0  0  0.9523038
2  1  0    7  1  0 -0.9523038
3  0  1    6  0  1 -0.9523038
4  1  1    7  1  1  0.9523038

Наконец, я хотел бы сделать это по группам, например, по столбцу cyl в наборе данных mtcars.Кажется, что dplyr и какая-то версия карты мурлыкания с map_dfr или map_dfc добьются цели, но я не могу собрать их вместе.Заранее спасибо.

1 Ответ

1 голос
/ 25 марта 2019

Так что это мое предложение по решению.

library(dplyr)
library(reshape2)

mtcars %>% 
  select(vs, am, cyl) %>%
  table() %>%
  apply(3, chisq.test) %>%
  lapply(`[`, c(6,9)) %>%
  melt() %>%
  spread(key = L2, value = value) %>%
  rename(cyl = L1) %>%
  select(cyl, vs, am, observed, stdres) %>%
  arrange(cyl)


   cyl vs am observed     stdres
1    4  0  0        0 -0.6422616
2    4  0  1        1  0.6422616
3    4  1  0        3  0.6422616
4    4  1  1        7 -0.6422616
5    6  0  0        0 -2.6457513
6    6  0  1        3  2.6457513
7    6  1  0        4  2.6457513
8    6  1  1        0 -2.6457513
9    8  0  0       12        NaN
10   8  0  1        2        NaN
11   8  1  0        0        NaN
12   8  1  1        0        NaN

Выполняет тест хи-квадрат для каждой группы cyl. Группировка выполняется неявно в операторе select(). В конце вы получаете наблюдаемые значения и стандартизированные остатки для каждой комбинации cyl, vs, am. Должно быть применимо к любому фрейму данных.

Надеюсь, это то, что вы искали.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...