配对意味着多个群体?

时间:2015-03-02 20:35:05

标签: r

在一些示例数据上使用pairwise.t.test,我可以得到一个P值矩阵:

attach(airquality)
pairwise.t.test(Ozone, Month)

给出:

Pairwise comparisons using t tests with pooled SD 

data:  Ozone and Month 

    May     Jun     Jul     Aug    
Jun 1.00000 -       -       -      
Jul 0.00026 0.05113 -       -      
Aug 0.00019 0.04987 1.00000 -      
Sep 1.00000 1.00000 0.00488 0.00388

是否有一个选项(或者可能完全不同的功能?)来做同样的事情,但每个组之间的平均差异是什么?我找到的每个例子都指示我只从2组获得平均差异,而不是超过2组。

1 个答案:

答案 0 :(得分:3)

您可以使用outer功能执行此操作。

# Average monthly ozone
monthMean = tapply(airquality$Ozone, airquality$Month, mean, na.rm=TRUE)

# Difference between ozone levels in each pair of months
outer(monthMean, monthMean, FUN = "-")

          5         6           7           8         9
5  0.000000 -5.829060 -35.5000000 -36.3461538 -7.832891
6  5.829060  0.000000 -29.6709402 -30.5170940 -2.003831
7 35.500000 29.670940   0.0000000  -0.8461538 27.667109
8 36.346154 30.517094   0.8461538   0.0000000 28.513263
9  7.832891  2.003831 -27.6671088 -28.5132626  0.000000

请注意,矩阵值是行月减去列月。如果你想保留上三角或下三角,你可以这样做:

monthDiff = outer(monthMean, monthMean, FUN = "-")

# Keep upper triangle (set lower triangle to NA)
monthDiff[lower.tri(month.diff)] = NA

# Keep lower triangle (set upper triangle to NA)
monthDiff[upper.tri(month.diff)] = NA

如果您只想要月度差异的绝对值意味着:

outer(monthMean, monthMean, 
      FUN = function(m1, m2) {abs(m1 - m2)})

然后,您可以使用upper.trilower.tri来消除冗余值。