在一些示例数据上使用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组。
答案 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.tri
或lower.tri
来消除冗余值。