对不同观察值具有不相等重复的数据帧执行逐行t.test

问题描述 投票:-1回答:1

例如,我有一个包含11列的数据框(附加了示例屏幕截图)。第一列列出了所有基因,接下来的十列是对照(C1-C5)和处理过的(T1-T5)样品的测量值。测量值未配对。我想执行逐行t.test并为每个基因添加一个带有p值的列作为数据帧的最后一列。但是,正如您在我的数据中看到的那样,由于进行实验的方式,我没有每个基因的所有重复(在对照和治疗条件下)的所有测量值。所以我在许多行中都有几个NA值。我如何在此数据框中执行逐行t.test而不因NA值而失败?谢谢!

example data

r dataframe na p-value
1个回答
0
投票

据我所知,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

查看here并检查与数据特征相符的wilcox.test()可用参数。尽管如此,请记住,如果减少测量,则测试的准确性和功效会更差。

© www.soinside.com 2019 - 2024. All rights reserved.