t тест, сравнивающий одну строку (эталонный образец) со всеми другими строками во фрейме данных - PullRequest
0 голосов
/ 01 июня 2018

У меня есть подмножество моих данных ниже (набор данных).Он суммирует жизнеспособность клеток после обработки клеток различными препаратами (фактический набор данных имеет 1200 препаратов).Эксперимент проводился в трех экземплярах (образцы 1, 2 и 3).Для простоты я сгенерировал небольшой набор данных ниже:

             sample_01        sample02         sample03
untreated    100                120                110
drug1         50                 49                48
drug2         90                 87               80
drug3          40                43               42

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

Я пыталсяиспользуйте цикл for, но он не работал:

for (i in 1:nrow(dataset)) {
   x = dataset["untreated",]
   y = dataset[i,]
   result<-t.test(x,y)
}

1 Ответ

0 голосов
/ 08 июня 2018

Вот пример набора данных из вашего поста:

dataset <- data.frame(sample_01=c(100,50,90,40),
                      sample_02=c(120,49,87,43),
                      sample_02=c(110,48,80,42)
                      )
rownames(dataset) <- c("untreated", "drug1", "drug2", "drug3")

Ваш цикл выглядит нормально, требуется только две модификации:

1-й, вы должны начать цикл с 2 ине из 1, так как вы не хотите сравнивать первую строку с самим собой (без обработки).

2-й, вы должны хранить свои результаты в списке, а не перезаписывать переменную с именем "results", потому что тогда вы будетепереписывайте его каждый раз внутри цикла и в конце получите ответ только для последней строки.

Вот модификации:

results <- list()
for (i in 2:nrow(dataset)) {
  x <- dataset["untreated",]
  y <- dataset[i,]
  results[[i-1]] <- t.test(x,y)
}

Теперь вы можете получить p-значения:

> sapply(results, getElement, "p.value")
[1] 0.008337497 0.033407617 0.006107201

В качестве альтернативы, чтобы упростить задачу, вы можете рассмотреть возможность использования пакета:

library(matrixTests)
> row_t_welch(dataset[-1,], dataset["untreated",])
      obs.x obs.y obs.tot   mean.x mean.y mean.diff     var.x var.y   stderr       df  statistic      pvalue  conf.low  conf.high alternative mean.null conf.level
drug1     3     3       6 49.00000    110 -61.00000  1.000000   100 5.802298 2.039996 -10.513075 0.008337497 -85.50204 -36.497961   two.sided         0       0.95
drug2     3     3       6 85.66667    110 -24.33333 26.333333   100 6.489307 2.985027  -3.749758 0.033407617 -45.04393  -3.622734   two.sided         0       0.95
drug3     3     3       6 41.66667    110 -68.33333  2.333333   100 5.840472 2.093283 -11.699968 0.006107201 -92.41964 -44.247023   two.sided         0       0.95
...