Насколько я знаю, 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()
, которые соответствуют характеру ваших данных. Тем не менее, имейте в виду, что если меньше измерений, то точность и мощность теста будут хуже.