Выполнение большого количества 2-образных t-тестов в R - PullRequest
1 голос
/ 14 марта 2020

Итак, я создаю функцию, которая позволяет мне взять data.frame и получить для всех протестированных переменных фрейм данных p.values.

    # data and labels
my_data <- data.frame(matrix(data = rnorm(10000), nrow = 100, ncol = 10000))
labels <- sample(0:1, 100, replace = TRUE)


# append the labels to the data, then filter
my_data$labels <- labels

sample_1 <- dplyr::filter(.data = my_data, labels == 0)
sample_2 <- dplyr::filter(.data = my_data, labels == 1)


#perform a t-test on each column
p_vals <- data.frame()
for(i in c(1:10000)) {
    p_vals <- rbind(p_vals, t.test(x = sample_1[,i], y = sample_2[,i])$p.value)
}

return(p_vals)

Это функционально, но я думаю / надеюсь, что там было бы более эффективным способом сделать это без for l oop. Данные должны быть в строках, потому что для более поздних функций будет важно отслеживать, какая переменная имела какое значение p.

Ответы [ 2 ]

1 голос
/ 14 марта 2020

Вы также можете использовать пакет genfilter:

library(genefilter)
colttests(as.matrix(my_data[,-ncol(my_data)]),factor(my_data$labels))
1 голос
/ 14 марта 2020

Вместо разделения образцов вы можете использовать интерфейс формулы для t.test и sapply над столбцами my_data для проведения тестов:

p_vals <- sapply( my_data, function(x) t.test(x ~ labels)$p.value )

Это создаст вектор p-значения, порядок будет таким же, как в столбцах my_data

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