8. 分散分析

分散分析とは、あるクラスA・B・Cごとのテストの平均点に差があるかどうか、というように標本の平均値の差の有無を検定する手法です。2群を比較したt検定との大きな違いは、3群以上の差異を検討できることにあります。Rでは一元配置分散分析を実行できる関数が複数用意だれていますが、本テキストでは1要因に限らず,2要因の分散分析も可能なaov関数とanova関数による方法を紹介します。

8.1. 一元配置分散分析(対応なし)

扱うデータ

ここでは、SPSSのサンプルデータから、salesperformance.csvを使用します。このデータは、2つ新しい販売トレーニング・コースの評価に関する架空のデータです。60人の従業員を3つのグループに分け、全員が標準のトレーニングを受けます。さらに、グループ2は技術的なトレーニングを受け、グループ3は実践的なチュートリアルを受けます。トレーニング・コースの最後にすべての従業員がテストを受け、そのスコアが記録されました。データ・ファイルの各ケースは個々の受講生を表し、その受講生が割り当てられたグループと、テストのスコアが記録されています。

図8-1 一元配置分散分析(対応なし)のデータ例
In [1]:
#作業ディレクトリの処理は既に行っていれば不要(復習)
getwd() #作業ディレクトリの確認
setwd("R:/WinPython/WinPython-64bit-3.6.1.0Qt5/notebooks/data") #作業ディレクトリの変更
'R:/WinPython/WinPython-64bit-3.6.1.0Qt5/notebooks'
In [2]:
data = read.csv("8-1.csv", header = TRUE) #データの読み込み
attach(data) #データ入力省略

要約統計量

In [3]:
summary(data) #要約統計量
boxplot(perform ~ group) #箱ひげ図
tapply(perform, group, mean) #perform の平均をグループごとに計算
     group      perform     
 Min.   :1   Min.   :32.68  
 1st Qu.:1   1st Qu.:64.79  
 Median :2   Median :74.94  
 Mean   :2   Mean   :72.14  
 3rd Qu.:3   3rd Qu.:81.19  
 Max.   :3   Max.   :89.69  
1
63.579
2
73.568
3
79.28

等分散性の検定

In [4]:
bartlett.test(perform ~ group) #等分散性の検定
	Bartlett test of homogeneity of variances

data:  perform by group
Bartlett's K-squared = 19.686, df = 2, p-value = 5.312e-05

p値 <0.05 なので帰無仮説が棄却され、1つの要因の各水準の分散は等しい

分散分析の実行

In [5]:
result = aov(perform ~ group)
summary(result)
            Df Sum Sq Mean Sq F value   Pr(>F)    
group        1   2465  2465.2   23.69 9.08e-06 ***
Residuals   58   6036   104.1                     
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

8.2. 一元配置分散分析(対応あり)

扱うデータ

ここでは,管理者が作成したデータを用いています。 8-2.csvは,30名の参加者が3つの異なるトレーニングを受けたあとのテストのスコアが記録されていると想定しています。

In [6]:
data = read.csv("8-22.csv", header = TRUE) #データの読み込み
attach(data) #データ入力省略

要約統計量

In [7]:
summary(data) #要約統計量
boxplot(score ~ training) #箱ひげ図
tapply(score, trainig, mean) #perform の平均をグループごとに計算
  participant     training      score      
 Min.   : 1.0   First :30   Min.   :30.00  
 1st Qu.: 8.0   Second:30   1st Qu.:41.25  
 Median :15.5   Third :30   Median :49.00  
 Mean   :15.5               Mean   :49.69  
 3rd Qu.:23.0               3rd Qu.:57.00  
 Max.   :30.0               Max.   :70.00  
Error in tapply(score, trainig, mean):  オブジェクト 'trainig' がありません 
Traceback:

1. tapply(score, trainig, mean)

分散分析

In [ ]:
summary(aov(score ~ participant + training))#x: 独立変数, y: 従属変数, t: 繰り返しの要因
In [ ]:
ここではトレーニングの違いによる平均値差を検定したかったので、見るべき箇所は「training」の行です。検定統計量はFの値は F = 85.360 であることがわかります。

8.3. 分散分析(二元配置)

一元配置分散分析は、ある一つの条件の違いによって母平均が異なるかどうかについて検定しました。ここでは、2つの条件の組合せによって、母平均が異なるかどうかを検定する二元配置分散分析を扱います。

二元配置分散分析(二要因対応なし)

In [ ]:
data = read.csv("8-3.csv", header = TRUE) #データの読み込み
attach(data) #データ入力省略
result = aov(C~A*B)
summary(result)

二元配置分散分析(二要因対応あり)

In [ ]:
data = read.csv("8-4.csv", header = TRUE) #データの読み込み
attach(data) #データ入力省略
result = aov(score~factor1*factor2+Error(id+id:factor1+id:factor2+id:factor1:factor2)) #a, b: 独立変数, y: 従属変数, t: 繰り返しの要因
summary(result)

二元配置分散分析(一要因のみ対応あり)

In [ ]:
data = read.csv("8-5.csv", header = TRUE) #データの読み込み
attach(data) #データ入力省略
result = aov(score~factor1*factor2+Error(id:factor1+id:factor1:factor2)) #a, b: 独立変数, y: 従属変数, t: 繰り返しの要因
summary(result)

8.4. 関数のオプション

関数 目的
bartlett.test(score ~ factor) Bartlettの等分散性の検定
aov(score ~ factor) 一元配置分散分析(対応なし)
aov(score ~ factor1 + factor2) 一元配置分散分析(対応あり)
aov(score ~ factor1 * factor2) 二元配置分散分析(二要因対応なし)
aov(score~factor1*factor2+Error(id+id:factor1+id:factor2+id:factor1:factor2)) 二元配置分散分析(二要因対応あり)
aov(score~factor1*factor2+Error(id:factor1+id:factor1:factor2)) 二元配置分散分析(二要因対応なし)