配对t.test没有给出NA

时间:2017-11-28 12:23:45

标签: r statistics na

我正在使用配对t检验比较来自3个实验的测量值。 但是,如果缺少某些值(NA

,则无法获得结果

数据:

dat <- read.table(text='sample  G1  G2  G3
S1   0.002458717   0.01045769    0.003770503
S2   0.010009784   0.02465088    0.011505804
S3   NA            NA            0.006403423
S1   0.003458717   0.01145769    0.004770503
S2   0.011009784   0.02565088    0.012505804
S3   NA            NA            0.007403423
S1   0.001458717   0.00945769    0.002770503
S2   0.009009784   0.02365088    0.010505804
S3   NA            NA            0.0054034232', header=TRUE)

请注意,G1 / 2/3不是独立测量,而是代表已测试的不同基因。它们没有关系,每个G都需要一个t.test它自己。

t.test:

sig<-lapply(dat[-1], function(x) 
  pairwise.t.test(x, dat$sample,
                  p.adjust.method = "BH"))



 > sig
    $G1

        Pairwise comparisons using t tests with pooled SD 

    data:  x and dat$sample 

       S1 S2
    S2 -  - 
    S3 -  - 

    P value adjustment method: BH 

    $G2

        Pairwise comparisons using t tests with pooled SD 

    data:  x and dat$sample 

       S1 S2
    S2 -  - 
    S3 -  - 

    P value adjustment method: BH 

    $G3

        Pairwise comparisons using t tests with pooled SD 

    data:  x and dat$sample 

       S1      S2     
    S2 0.00024 -      
    S3 0.01803 0.00117

P value adjustment method: BH

我理解为什么S1 / 2和S3之间没有G1 / 2的比较,因为缺少值。但是,我不明白为什么没有比较S1和S2的结果?

谢谢!

1 个答案:

答案 0 :(得分:0)

对于pairwise.t.test,您需要一个响应和一个分组向量;所以问题在于数据格式,而不是NA。您只需相应地转换dat的数据(有关详情,请参阅?pairwise.t.test)。

以下是使用基本R函数stack

的一种方法
# Convert wide to long dataframe, then select values 
val <- stack(dat, select = -sample)$values;

# Sample labels (the grouping vector)
grp <- rep(dat$sample, 3);


pairwise.t.test(val, grp, p.adjust.method = "BH");
#    
#        Pairwise comparisons using t tests with pooled SD
#    
#data:  val and grp
#
#   S1     S2
#S2 0.0031 -
#S3 0.8160 0.0319

请注意,NA将自动省略(默认情况下)。