Выполнение теста t.test для ряда данных с неодинаковыми повторностями для разных наблюдений - PullRequest
0 голосов
/ 25 октября 2019

Скажем, например, у меня есть датафрейм с одиннадцатью столбцами (пример скриншота прилагается). В первом столбце перечислены все гены, а в следующих десяти столбцах приведены измерения для контрольных (C1-C5) и обработанных (T1-T5) образцов. Измерения не спарены.
Я хочу выполнить t.test по очереди и добавить столбец с p-значением для каждого гена в качестве последнего столбца кадра данных. Однако, как вы можете видеть из моих данных, у меня нет всех измерений для всех повторов (как в контрольных, так и в условиях лечения) для каждого гена из-за способа проведения эксперимента. Поэтому у меня есть несколько значений NA во многих строках.
Как выполнить t.test по строкам в этом кадре данных без сбоев из-за значений NA? Спасибо!

пример данных

1 Ответ

0 голосов
/ 25 октября 2019

Насколько я знаю, t.test не будет работать с NA's. Так что если мы сделаем что-то вроде:

Input = ("GeneID  C1  C2  C3  C4  C5  T1  T2  T3  T4  T5
          Gene1    5  1   7   9   2   7   5   4   4   3  
          Gene2    3  6   5   NA  NA  5   1   3   NA  NA
          Gene3    2  3   NA  NA  NA  NA  1   6   NA  NA
          Gene4    3  4   5   6   NA  3   4   5   NA  NA")

df = as.data.frame(read.table(textConnection(Input), header = T, row.names = 1))
df$pval <- apply(df,1,function(x) {t.test(x[2:6],x[7:11])$p.value})

Это приведет к ошибке, такой как not enough 'x' observations наверняка. Есть два варианта, вы можете игнорировать NA's, поэтому для Gene2 у нас будет C1,C2,C3 vs T1,T2,T3, потому что у нас есть только эти наблюдения. Во-вторых, мы можем выполнить непараметрический тест, который имеет меньшую мощность, но является более «гибким». T.test это хорошо, но много предположений должны быть выполнены. Количество выборок должно быть довольно большим и равным C против T. Более того, группы должны иметь нормальное распределение, по крайней мере, они схожи, это также относится к дисперсии ... В противном случае ваш тест будет искажен. Я рекомендую что-то вроде этого:

df$pval <- apply(df,1,function(x) {wilcox.test(x[2:6],x[7:11])$p.value})

      C1 C2 C3 C4 C5 T1 T2 T3 T4 T5      pval
Gene1  5  1  7  9  2  7  5  4  4  3 0.7109920
Gene2  3  6  5 NA NA  5  1  3 NA NA 0.1386406
Gene3  2  3 NA NA NA NA  1  6 NA NA 1.0000000
Gene4  3  4  5  6 NA  3  4  5 NA NA 1.0000000

Посмотрите здесь и проверьте доступные аргументы для wilcox.test(), которые соответствуют характеру ваших данных. Тем не менее, имейте в виду, что если меньше измерений, то точность и мощность теста будут хуже.

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