68. 多群の検定


例えば,A ,B ,C の 3 つの場所のリンゴの葉の長さを調べてみたところ,次のようなデータが得られた.

場所

 

葉の長さのデータ

A

80

73

80

82

74

B

73

68

81

85

 

C

85

93

88

 

 

検定を行うために,上記のデータを R に読み込ませる.

 
 length <- c(80,73,80,82,74,73,68,81,85,85,93,88)    # データ
 group  <- c( 1, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3)    # 群

平均値±標準偏差のプロット

各群について,平均値±標準偏差のプロットを行う場合は,パッケージ gplots 中の関数 plotmeans() を用いればよい.

 
 library(gplots)
 plotmeans(length ~ group)

この場合はデータが 1 元配置となっているが,データが 2 元配置となっている場合は関数 interaction.plot() で同様のプロットが行える.

 
 attach(ToothGrowth)
 interaction.plot(dose, supp, len, fixed=TRUE)

各群の平均値と標準偏差が分かっている場合は,パッケージ gplots 中の関数 plotCI() を用いればよい.

 
 tmp   <- split(length, group)
 means <- sapply(tmp, mean)
 stdev <- sqrt(sapply(tmp, var))
 n     <- sapply(tmp, length)               # この length は関数の length() である
 ciw   <- qt(0.975, n) * stdev / sqrt(n)
 plotCI(x=means, uiw=ciw, col="black", barcol="blue", lwd=1)

一元配置分散分析

場所により葉の長さに差があるかどうかを検定する場合は関数 oneway.test() を用いる.このとき引数はベクトルで与える.

 
 oneway.test(length ~ group, var=T)                    # 一元配置分散分析

        One-way analysis of means

data:  length and group 
F = 4.7828, num df = 2, denom df = 9, p-value = 0.03845

クラスカル・ウォリス検定(対応の無い多群の差の検定)

場所により葉の長さに差があるかどうかを検定する場合は関数 kruskal.test() でも検定できる.

 
 kruskal.test(length ~ group)          # クラスカル・ウォリス検定 
 
        Kruskal-Wallis rank sum test
 
data:  length by group 
Kruskal-Wallis chi-squared = 5.8408, df = 2, p-value = 0.05391

以下のようにしても良い.

 
 x <- c(80, 73, 80, 82, 74)
 y <- c(73, 68, 81, 85)
 z <- c(85, 93, 88)
 kruskal.test(x, y, z)

多重比較 

全体で差があるかないかを見るのではなく,各群の平均値の大きさを多重比較することも出来る.例えば,pairwise.t.test() で,検定全体の有意水準が 5% を超えないよう調整した上で,多重比較を行うことが出来る.調整の方法は "holm" や "bonferroni" の方法が選択できる.

 
 pairwise.t.test(length, group, p.adj = "bonf")
 
        Pairwise comparisons using t tests with pooled SD 
data:  length and group 
  1     2    
2 1.000 -    
3 0.074 0.059
P value adjustment method: bonferroni 

関数 pairwise.wilcox.test() を用いれば,ウイルコクソンの順位和検定で対比較を行うことが出来る.他にもテューキーの方法(関数 TukeyHSD())やウイリアムズ検定(パッケージ multcomp 中の関数 simtest(x ~ b, type="Williams"))が用意されている.

フリードマン検定(対応がある多群の差の検定)

例えば,A ,B ,C の 3 つの場所について,肥料の量を変えてリンゴを育てていき,しばらく育てた後のリンゴの重さを調べてみたところ,次のようなデータが取られた.

場所/肥料の量

 

10

20

30

40

A

180

193

200

201

B

150

189

186

190

C

144

178

166

173

肥料の効果があるかどうかを検定する場合はフリードマン検定を行う.

 
 x <- matrix(c(180,193,200,201,
               150,189,186,190,
               144,178,166,173), ncol=4, byrow=T)
 friedman.test(x)
 
        Friedman rank sum test
data:  x 
Friedman chi-squared = 7, df = 3, p-value = 0.0719

最後に,ここまでで紹介できなかった関数を挙げる: