T-тест для всех групповых комбинаций одного столбца внутри DataFrame - PullRequest
0 голосов
/ 25 апреля 2018

Я хочу запустить t-тесты и извлечь p-значения для всех комбинаций фактора группировки.Фрейм данных имеет только 2 столбца.Пример фиктивных данных:

set.seed(123)
df <- data.frame(
  Group = c(rep("A", 5), rep("B", 4), rep("C", 6)),
  Val = c(sample(101:200, 5, replace = T), sample(1:100, 4, replace = T), sample(1:100, 6, replace = T))
)

Требуемый вывод

data.frame(
  A = c(1, 0.00191, 0.00017),
  B = c(0.00191,1,0.88500),
  C = c(0.00017,0.88500,1)
)
        A       B       C
1 1.00000 0.00191 0.00016
2 0.00191 1.00000 0.88500
3 0.00016 0.88500 1.00000

Для удобства приведу функцию-обёртку для t.test, которая извлекает значение

tWrap <- function(x, y) t.test(x, y)$p.value

СпасибоЯ искал в Интернете решения, использующие group_by и purrr::map, но не могу взломать его.

Ответы [ 2 ]

0 голосов
/ 25 апреля 2018

раствор Base R

Я модифицировал tWrap

tWrap <- function(x) t.test(x$Var1, x$Var2)$p.value

L <- split(df$Val, df$Group)
pvals <- apply(expand.grid(L, L), 1, tWrap)
pvals_mat <- matrix(pvals, ncol=3)

             # [,1]        [,2]         [,3]
# [1,] 1.0000000000 0.001918324 0.0001655259
# [2,] 0.0019183244 1.000000000 0.8850039246
# [3,] 0.0001655259 0.885003925 1.0000000000
0 голосов
/ 25 апреля 2018

Данные:

set.seed(123)
df <- data.frame(
  Group = c(rep("A", 5), rep("B", 4), rep("C", 6)),
  Val = c(sample(101:200, 5, replace = T), sample(1:100, 4, replace = T), sample(1:100, 6, replace = T))
)

Код:

library(purrr)
# get group combinations
params_list <- combn(levels(df$Group), 2, FUN = list)
# perform t test for each combination
model_t <- map(.x = params_list, 
                .f = ~ t.test(formula = Val ~ Group, 
                                   data    = subset(df, Group %in% .x)))
# extract p values
t_pvals <- map_dbl(.x = model_t, .f  = "p.value")
names(t_pvals) <- map_chr(.x = params_list, .f = ~ paste0(.x, collapse = ""))
t_pvals
#           AB           AC           BC 
# 0.0019183244 0.0001655259 0.8850039246
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...