Провести несколько T-тестов в R, конденсированный - PullRequest
0 голосов
/ 28 февраля 2019

Я хочу провести несколько t-тестов в R без необходимости выполнять копирование-вставку каждого теста.Каждый тест будет определять, существуют ли различия в «Типе» («Левый» или «Правый») при просмотре «Уровень_ #».В настоящее время у меня может быть:

t.test(Level_1 ~ Type, alternative="two.sided", conf.level=0.99)
t.test(Level_2 ~ Type, alternative="two.sided", conf.level=0.99)

Type Level_1 Level_2 Level_3
Left      17      50      98
Right     18      65      65
Left      23       7      19
Left      65       7     100
Right     9       13      17

Проблема в том, что у меня есть сотни "Level_ #" и я хотел бы знать, как автоматизировать этот процесс и вывести фрейм данных результатов.Моя мысль состоит в том, чтобы как-то включить функцию применения.

1 Ответ

0 голосов
/ 28 февраля 2019

Вы можете сделать это, используя подход tidyverse и пакеты purrr и broom.

require(tidyverse)
require(broom)

df %>% 
  gather(var, level, -type) %>% 
  nest(-var) %>%
  mutate(model = purrr::map(data, function(x) { 
    t.test(level ~ type, alternative="two.sided", conf.level=0.99, 
           data = x)}), 
    value = purrr::map(model, tidy), 
    conf.low = purrr::map(value, "conf.low"),
    conf.high = purrr::map(value, "conf.high"),
    pvalue = purrr::map(value, "p.value")) %>% 
  select(-data, -model, -value)

Вывод:

     var  conf.low conf.high    pvalue
1 level1 -3.025393  4.070641 0.6941518
2 level2 -3.597754  3.356125 0.9260015
3 level3 -3.955293  3.673493 0.9210724

Пример данных:

set.seed(123)
df <- data.frame(type = rep(c("left", "right"), 25), 
                 level1 = rnorm(50, mean = 85, sd = 5), 
                 level2 = rnorm(50, mean = 75, sd = 5), 
                 level3 = rnorm(50, mean = 65, sd = 5))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...