ほくそ笑む

R言語と統計解析について

aov() 関数の甘い罠(1)

統計言語 R には、分散分析(ANOVA)を行う関数 aov() があります。
例えば、次のようなデータがあったとします(data.txt)。

Group Value
A 1.0
A 1.1
B 1.2
B 1.3
C 1.4
C 1.5

これを分散分析してみます。

data <- read.table("data.txt", header=TRUE);
aov.result <- aov(Value ~ Group, data);
anova(aov.result);

結果は次のようになりました。

Response: Value
          Df Sum Sq Mean Sq F value  Pr(>F)  
Group      2  0.160   0.080      16 0.02509 *
Residuals  3  0.015   0.005                          

ここまではいいですね。
さて、ここで、Group を識別する記号(上ではA,B,C)はグループが区別できればなんだっていいはずです。
Web上を検索しても、色々なところで言われています。

ここのa1、a2、a3、a4 は水準の群(groups)を識別するラベルである。
よって、文字A、B、C、D、あ、い、う、え、1、2、3、4 などを用いてもよい。

R と分散分析

グループを識別する記号は何でもよい。この例では「A,B,C,D」を用いたが,「1,2,3,4」あるいは「FAT1,FAT2,FAT3,FAT4」でも問題ない。

一元配置の分散分析

というわけで、Group を識別する記号を A, B, C から 1, 2, 3 に変えたデータを作ってみましょう(data2.txt)。

Group Value
1 1.0
1 1.1
2 1.2
2 1.3
3 1.4
3 1.5

これを分散分析します。

data <- read.table("data2.txt", header=TRUE);
aov.result <- aov(Value ~ Group, data);
anova(aov.result);

Value はまったく同じなので、上と同じ結果が出るはずです。
ところが・・・

Response: Value
          Df Sum Sq Mean Sq F value   Pr(>F)   
Group      1  0.160 0.16000  42.667 0.002838 **
Residuals  4  0.015 0.00375                    

なんと、違う結果が出てしまいました。
これは一体どういうことなんでしょうか?
(つづく)