・Df = degree of freedom,自由度 ・Sum Sq = deviance (within groups, and ・residual),平方和(groupsとresidual) ・Mean Sq = variance (within groups, and ・residual),平均平方和(有groupsとresidual) ・F value = the value of the Fisher statistic test, so computed (variance within groups) / (variance residual),統計検定値 Pr(>F) = p-value

7.分散分析

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

一元配置分散分析を説明すると、2つの母平均の差の検定を3つ以上の母平均の間の差の検定

|表7.1指導法ごとに見た統計テスト2の得点| |—|—|—|—| |A|B|C|D| |15|13|10|10| |9|8|6|7| |18|8|11|3| |14|12|7|5| |18|7|12|7| 表7.1は、表2.1の「指導法データ」から、「統計テスト2」と「指導法」を抜き出し、統計テスト2の得点を指導法(AからD)ごとに、表に書き表したものです。 母集団ではこの4つの指導法の間に平均値の差はあるといえるでしょうか。

第5章の冒頭にも書いたように、標本の群間で平均値差があるからといって、母集団でも差があるとは限りません。4群とも母平均が全く同じでも、無作為に抽出された標本では、たまたまある群に得点の高い人が多く抽出されたり、逆に得点の低い人が多く抽出されたりする可能性があるからです。そこで、この得られた標本が、母平均の等しい4群から抽出される可能性が高いかどうかを検討するために行われる検定が分散分析です。つまり、平均値差の検定です。平均値差の検定というと第6章で学んだt検定がありますが、t検定は3つ以上の平均値差の検定には使えません(第19章を参照してください)。

7.1.1一元配置分散分析(対応なし)を実行する

5.1手順:やること
1. 母集団に関する帰無仮説と対立仮説(両側or片側検定)の設定
2. 検定統計量を選ぶ
3. 有意水準\(\alpha\)を決める
4.(データを収集した後)データから検定統計量の実現値を求める
5. 検定統計量の実現値が棄却域に入れば帰無仮説を棄却して、対立仮説を採択する。棄却域に入らなければ、帰無仮説を採択する
  • Rの関数を使って結果を得る方法を紹介します
  • Rの関数が出力する値の計算方法や分散分析の原理について解説すること にします。

(1)帰無仮説と対立仮説の設定 帰無仮説H0:4群の母平均は等しい(指導法の違いによる統計学の学習効果に 差はない) 対立仮説H1:4群の母平均は等しくない(指導法の違いにより、統計学の学習 効果に差がある)

ここで注意しなければならないのは、例えば4群のうち1つだけ母平均が異なる (残りの3群の母平均は全て同じ)ような場合でも対立仮説は成立しているということです

(2)検定統計量の選択 分般分析では、検定統計量として次のFを利用します。 \(F = \frac{群間平方和/群間の自由度}{群内平方和/群内の自由度}\)

式の中に出てくる2つの平方和と、2つの自由度にこつい、ては後で説明します。 この検定統計量は帰無仮説のもとで、すなわち全ての群の母平均が等しいときにはF分布という確率分布にしたがいます。F分布は自由度を2つ持ちます。これは df1とdf2と書かれたり、分子の自由度と分母の自由度とよばれたりします。 図7にF分布を描きました。これは分子の自由度3、分母の自由度16(df,=3、 42=16)のF分布をRで描いたものです。F分布を描くにはdf関数を利用しま す。df(値,分子の自由度,分母の自由度)といいう書式になります。df関数や dchisq 関数と同様、確率密度の値を返す関数です。

curve(df(x,3,16),0,5)

(3)有意水準aの決定 ここでは有意水準は5%、つまりa=0.05としておきます。図7.1を見ると分かるように。F分布は正の値しかとりま世ん。カイ二乗分布と同じように0を中心とした左右対称の分布にはならないのです。このため、分散分析は常に片側検定になります (4)機定統量の実現値を求める Rには分散分析を行うための网数がいvくつか用意されています。

①oneway.test間数 一元配置分散分析のみ実行可能 ②aov関数   最も一般的 ③ anova関数 複数のモデルの比較など高度な分析に対応

計算してみましょう。まずは、4群のデータを読み込ませます。

  A<-c(15,9,18,14,18) 
  B<-c(13,8,8,12,7) 
  C<-c(10,6,11,7,12) 
  D<-c(10,7,3,5,7)

4群20人まとめて「統計テスト2」という変数を作ります。

統計テスト2<- c(A,B,C,D)
統計テスト2
##  [1] 15  9 18 14 18 13  8  8 12  7 10  6 11  7 12 10  7  3  5  7

ここにどの指導法を受けたかを示すAからDという値を5回ずつ繰り返して格納しておきます。

指導法<-c(rep("A",5),rep("B",5),rep("C",5),rep("D",5))
指導法
##  [1] "A" "A" "A" "A" "A" "B" "B" "B" "B" "B" "C" "C" "C" "C" "C" "D" "D"
## [18] "D" "D" "D"

rep関数はrep(値,繰り返し回数)として、指定した値を繰り返し回数分だけ 繰り返したデータを作るためのものです。上記の「指導法」の出力を見ると“Aの ように「”」がついています。これは「指導法」」に含まれているデータが文字型であることを表しています。しかし、分散分析を実行する関数では、このグループ分けに使う変数は文字型ではなく要因型(文字に数値が対応づけられたデータのタイプ)に変換する必要があります。

要因型ベクトルに変換するには factor 関数を利用します。

指導法2<-factor(指導法) 
指導法2
##  [1] A A A A A B B B B B C C C C C D D D D D
## Levels: A B C D

Rの関数を利用して分散分析を実行する準備ができました。まずは oneway. test関数を利用してみましょう。

oneway.test(統計テスト2~指導法2,var.equal=TRUE) 
## 
##  One-way analysis of means
## 
## data:  統計テスト2 and 指導法2
## F = 7.1111, num df = 3, denom df = 16, p-value = 0.002988

この関数はt.test関数と似ています。全ての群の母分散が等しいこと(分散 の等質性)が仮定できるときは「var.equal=TRUE」オプションを指定します。 分散の等質性が仮定できない場合は、「var.equal=FALSE」オプションを指定します(オプションを指定しないと、デフォルトでは分散の等質性が満たされないものとして検定を実行します)。ここでは分散の等質性が満たされているものと考えることにしま。

続いて、aov数を利用してみましよう。書き方は oneway .test関数と以 います。aov(分般分析の対験となる変数〜群分けのための変数)という式です。

aov(統計テスト2~指導法2)
## Call:
##    aov(formula = 統計テスト2 ~ 指導法2)
## 
## Terms:
##                 指導法2 Residuals
## Sum of Squares      184       138
## Deg. of Freedom       3        16
## 
## Residual standard error: 2.936835
## Estimated effects may be unbalanced

結果の出力は見やすいものにはならず、またFの実現値も出力してくれません。 summary /関数を使って、summary(aov())のように記述することで、結果が見やすくなります。

summary(aov(統計テスト2~指導法2)) 
##             Df Sum Sq Mean Sq F value  Pr(>F)   
## 指導法2      3    184   61.33   7.111 0.00299 **
## Residuals   16    138    8.63                   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

ここで出力されているものを分散分析表といいます。分散分析表から、検定統計量Fの実現値、p値を読み取ることができます。Fの実現値はFvalueの欄を見ると7.1111となっています。 oneway .test関数で求めた結 果と同じになることが確認できました。

最後に、 anova 関数を利用してみましょう。anova(1m(統計テスト2~指導法2)) という書き方をします。

anova(lm(統計テスト2~指導法2))  
## Analysis of Variance Table
## 
## Response: 統計テスト2
##           Df Sum Sq Mean Sq F value   Pr(>F)   
## 指導法2    3    184  61.333  7.1111 0.002988 **
## Residuals 16    138   8.625                    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

(5)帰無仮説の棄却or採択の決定 第6章までの検定の説明では、いつたん棄却域を求めてから検定統計量の実現値 が棄却域に入るかどうかで判断しました。しかしここで紹介したように、Rの関数 を用いて分散分析を実行すると、3つの関数のどれを使っても検定統計量Fの実現値に対応するp値も一緒に出力されるので、p値を見ることで、直接、帰無仮説を棄却するかどうかを決めることができます。この例ではp値は0.002988で、これは有意水準として設定した0.05よりも小さいですから、5%水準で4つの指導法の間に有意な平均値差が見られたということができます。

7.1.2平方和の分解

Rに備わっている関数を使うことで、とりあえず分散分析自体は行うことができ ました。しかし、検定統計量Fの計算に出てくる群間平方和や群内平方和とは一体 何なのか、また自由度はどうやって求めるのか、Rの関数が出力する分散分析表は何なのかについてはまだ説明していませんでした。そこで、ここでは分散分析の考え方の基礎となる平方和の分解について説明します。平方和という言葉についての説明は後で出てきます。当面は気にせずに読み進めてください。以下では、ベクトルや行列を扱った計算を行います。実際に行っている計算自体はごく単純なものです。なお、ベクトルや行列に関する基礎的な事柄や、Rでベクトル、行列を扱う方法などは第8章にまとめてあるので、必要に応じてそちらも参照してください。 分散分析用の関数では4群をまとめた長いベクトルを作りましたが、ここでは見 やすさと処理のしやすさのために、データを行列の形にしておきます。すでに作ってある2からDという変数(各群のデータが格納されていますね)を1つにまとめて、表7.1と同じ形の行列を作ってみましょう。

全データ<- cbind(A,B,C,D)
全データ
##       A  B  C  D
## [1,] 15 13 10 10
## [2,]  9  8  6  7
## [3,] 18  8 11  3
## [4,] 14 12  7  5
## [5,] 18  7 12  7

cbind ()という関数は、AからDのデータを横方向につないで行列を作る関数です。次に、各群の平均点を求めてみましよう。colMeans()が利用できます。次に20人全員の平均も求めてみましょう。

群平均<- colMeans(全データ)
群平均
##    A    B    C    D 
## 14.8  9.6  9.2  6.4
全平均<- mean(全データ)
全平均
## [1] 10

全データの平均(全平均)と各群の平均(群平均)を求めることができました。

全平均を要素とする行列を作ります。rep(全平均,20)として、全平均 (つまり10)を20回繰り返してベクトルを作り、それをmatr1X関数により5行 4列の行列に変換します。このように、Rではベクトルや行列を作るのに便利な関 数がいくつか用意されています。

全平均行列<- matrix(rep(全平均,20),nrow=5,ncol=4)
全平均行列
##      [,1] [,2] [,3] [,4]
## [1,]   10   10   10   10
## [2,]   10   10   10   10
## [3,]   10   10   10   10
## [4,]   10   10   10   10
## [5,]   10   10   10   10

下記の matrix 関数の pyro =TRUB オプションは、行列を作るときに行方向優先で割り当てるためのものです。群平均 ベクトルを縦に5回繰り返して並べて行列を作ります。

群平均行列<- matrix(rep(群平均,5),nrow=5,ncol=4,byrow=TRUE)
群平均行列
##      [,1] [,2] [,3] [,4]
## [1,] 14.8  9.6  9.2  6.4
## [2,] 14.8  9.6  9.2  6.4
## [3,] 14.8  9.6  9.2  6.4
## [4,] 14.8  9.6  9.2  6.4
## [5,] 14.8  9.6  9.2  6.4

全平均行列は、「全データ」と同じ5x4の行列で、要素が全て全平均10となって るものです。群平均行列は、「全データ」と同じ5x4の行列で、各列の要素がそれ ぞれの群平均になっているものです。ここから、いよいよ平方和を求めていくことになります。

全体<- 全データ-全平均行列
全体
##       A  B  C  D
## [1,]  5  3  0  0
## [2,] -1 -2 -4 -3
## [3,]  8 -2  1 -7
## [4,]  4  2 -3 -5
## [5,]  8 -3  2 -3

全データの個々の要素から全平均10をそれぞれ引いた ものです。つまり、それぞれのデータが全平均からどれくらいい離れているのかを示しています。

群間<- 群平均行列-全平均行列
群間
##      [,1] [,2] [,3] [,4]
## [1,]  4.8 -0.4 -0.8 -3.6
## [2,]  4.8 -0.4 -0.8 -3.6
## [3,]  4.8 -0.4 -0.8 -3.6
## [4,]  4.8 -0.4 -0.8 -3.6
## [5,]  4.8 -0.4 -0.8 -3.6

「群間」は、群平均行列と全平均行列との対応する要素をそれぞれ引 き算したもの、それぞれの群の平均が全平均からどれくらい離れているのかを示しています。 少し見方を変えると、例えばA群の人の「群間」」の値は4.8となっていますが、これは指導法Aを受けることで、平均点が全平均から4.8点押し上げられたと解釈することができます。同様に指導法Bを受けることによって、平均点が全平均から4.8点引き下げられたと見ることができます。このように条件の違いで平均点を押し上げたり引き下げたりする力を効果といいます。どの群も平均が同じなら、この群間の値は全て0になりますが、それは群の違いによる効果がないということができるわけです。したがって、分散分析は母集団において群の違いによる効果の有無を検定する手法であるという見方ができます。

群内<- 全データ-群平均行列
群内
##         A    B    C    D
## [1,]  0.2  3.4  0.8  3.6
## [2,] -5.8 -1.6 -3.2  0.6
## [3,]  3.2 -1.6  1.8 -3.4
## [4,] -0.8  2.4 -2.2 -1.4
## [5,]  3.2 -2.6  2.8  0.6

「群内」と名付けた行列は、全データの個々の要素からその要素が属する群の平均 を引いたものです。つまり、それぞれのデータが、その群の平均からどれくらい離れているのかを示しています。もし、同じ群の中のデータが全て同じであれば、その群については「群内」の値が全て0になるということです。この「群内」の値は、それぞれの群において、全員の得点が全平均から「群間」で見られた効果によって一律に押し上げられたり引き下げられたりした後で、指導法との相性やテストのときの体調など様々な要因によって生じた変動の大きさと見なすことができます。 ここで求めた、「全体」「群間」「群内」の各行列についてその要素を二乗してみます。

全体^2
##       A B  C  D
## [1,] 25 9  0  0
## [2,]  1 4 16  9
## [3,] 64 4  1 49
## [4,] 16 4  9 25
## [5,] 64 9  4  9

これらの値は各データが全平均に近いほど小さく、全平均から離れるほど大きくなります。もし全てのデータが同じ値であれば、この値は全て0になります。

群間^2
##       [,1] [,2] [,3]  [,4]
## [1,] 23.04 0.16 0.64 12.96
## [2,] 23.04 0.16 0.64 12.96
## [3,] 23.04 0.16 0.64 12.96
## [4,] 23.04 0.16 0.64 12.96
## [5,] 23.04 0.16 0.64 12.96

これらの值は各群平均が全平均に近いほど小さくますもし全て群の平均が 等しけれ全平均かこの值は全て0になります。

群内^2
##          A     B     C     D
## [1,]  0.04 11.56  0.64 12.96
## [2,] 33.64  2.56 10.24  0.36
## [3,] 10.24  2.56  3.24 11.56
## [4,]  0.64  5.76  4.84  1.96
## [5,] 10.24  6.76  7.84  0.36

これらの値は各データが群平均に近いほど小さく、群平均から離れるほど大きな 値になります。もし、ある群の中のデータが全て同じ値であれば、その群について はこの値は全て0となります。 こうして得られた、もとの行列の各要素を二乗した行列について、それぞれ要素 の和を求めてみましょう。「全体」行列の要素の二乗和を「全体平方和」、「群間」」行列の要素の二乗和を「群間平方和」、「群内」行列の要素の二乗和を「群内平方和」と名付けることにします。

全体平方和<- sum(全体^2)
全体平方和
## [1] 322

全体平方和は、1つひとつのデータの値から全平均を引いて二乗和を求めたもので す。これをサンプルサイズで割ればデータ全体の分散となりますから、これはデータ全体のばらつきの大きさを表しているといえます。

群間平方和<- sum(群間^2)
群間平方和
## [1] 184

群間平方和は、各群の平均と全平均の差についいて二乗和を求めたものです。これ は群の平均値のばらつきが大きいほど大きな値となります。あるいは群の効果が大きく異なれば群間平方和の値は大きくなります。つまり、群の違いによって生じるばらつきを表しているといえます。

群内平方和<- sum(群内^2)
群内平方和
## [1] 138

3つの平方和を求めることができました。ここで、先ほどaov関数を使ったときに出力された分散分析表を見てみます。

summary(aov(統計テスト2~指導法2))
##             Df Sum Sq Mean Sq F value  Pr(>F)   
## 指導法2      3    184   61.33   7.111 0.00299 **
## Residuals   16    138    8.63                   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

この Sum Sq という欄の数值が平方和( Sum of Squares)です。指導法2と書かれた行の平方和の値は184.000で、これは先ほど求めた群間平方和の値とびったり一致します。また、 Residuals と書かれた行の平方和の値は138.000で、これは上で求めた群内平方和の値とびったり一致します。Residualは日本語では残差とよばれることが多いですが、これは「群の効果に応じて全員の得点が一律に押し上げられたり引き下げられたりした」というだけでは説明しきれないデータのばらつ き(上では「群内」」の行列に現われている数値)という意味です。 この分散分析表で表れた2つの平方和を足してみる

群間平方和+群内平方和
## [1] 322

となりますが、この値は全体平方和の値とぴったり一致します。つま 全体平方和=群間平方和+群内平方和 という関係が成り立つということです。

この関係はこのデータでたまたま成り立っているのではなく、常に成り立つものです。見方を変えれば、3つの平方和を求める計算は、全体平方和を群間平方和と群内平方和に分ける作業であるということができます。これを平方和の分解といいます。全体平方和を群間平方和と群内平方和 に分解するということは、データ全体のばらつきを群の違いによって説明できる部 分と説明できない部分に分解することと見なせます。そして、群の違いによって説明できるばらつきが、群の違いでは説明できない、いわば、誤差によるばらつきに比べて十分大きければ、データのばらつきが生じた原因を群の違いによるものだと 考えることができるわけです。

群の平均值の違いを、データのばらつき(=平方和、つまり、分散のようなもの)によって説明しようとするのが分散分析ということになます、
分散分析表の见方と定統計量Fの計算について説明します。Fの定義式に出てきた群間平方和、群内平方和についてはすでに分かったので、あとは の曲度と群内の自由度を求めることができればFの镇を計算できることになります。自由度は上で求めた3つの平方和それぞれに対ように求めます。

  • 群間の自由度=群の数-1
  • 群内の自由度=(各群のデータ数一1)を全ての群について合計したもの
  • 全体の自由度=全データ数-1

例题のデータ(「全データ」)について、自由度を求めてみましょう。Rで計算するまでもないのですが、この值は後ほど使うので変数に代入しておきます。

群間自由度<- ncol(全データ)-1
群間自由度
## [1] 3
群内自由度<-(nrow(全データ)-1)*ncol(全データ)
群内自由度
## [1] 16
全体自由度<- length(全データ)-1
全体自由度
## [1] 19

ncl関数は行列の列数を求める関数、now関数は行列の行数を求める関数 です。length 関数は第2章で出てきましたが、このように行イ列に含まれる値の 数を数えるためにも利用できます。こうして3つの自由度が求められました。aov 関数などが出力した分散分析表では、自由度はDfの欄に表示されています。「指導法2」の自由度は3で、これは上で求めた群間の自由度と一致します。またResiduals/の自由度は16となっていて、これも上で求めた群内の自由度に一致します。また、群間平方和と群内平方和を足すと全体平方和になったように、自由度についても群間の自由度と群内の自由度を足すと必ず全体の自由度に一致します。

群間自由度+群内自由度
## [1] 19

これで検定統計量Fの実現値を求める準備が整いました。しかし、分散分析表で はまだ Mean Sqという欄が残っています。これは平均平方とよばれるもので、平 方和÷自由度で求めることができます。

群間平均平方<- 群間平方和/群間自由度
群間平均平方
## [1] 61.33333
群内平均平方<- 群内平方和/群内自由度
群内平均平方
## [1] 8.625

分散分析表で「指法2/の Mean sq の值が61.333、「 Residuals のMean 5gの値が8625となっていますが、これらはそれぞれ上で求めた群間平均平方と 内平均平方の値と一致していることを確認してください。ちなみに、分散分析数に は表れていませんが、全体平方和を全体の自由度で割った平均平方は、全データの不偏分散となりますね。

全体平方和/全体自由度
## [1] 16.94737
var(統計テスト2)
## [1] 16.94737

最後に、検定統計量Fの値を求めます。Fの定義式にあった分子と分母はそれぞれ、

  • 分子=(群間平方和)/(群間の自由度)=群間の平均平方
  • 分母=(群内平方和)/(群内の自由度)=群内の平均平方

と置き換えられるので、Fは群間の平均平方÷群内の平均平方で求めることができ ます。これは群間の平均平方(=群の違いによって説明できるばらつき)が群内の 平均平方(=群の違いでは説明できない、誤差によるばらつき)に比べてどれだけ 大きいかを表すものです。

F<- 群間平均平方/群内平均平方
F
## [1] 7.111111

こうして検定統計量Fの実現値が7.1111と求められました。aov()などが出 力したFの値と一致することを確認することができます。

7.1.3多重比較( Tukey の方法)

キム仮説H0:4群の母平均は等しい(指導法の違いによる統計学の学習効果に差はない)

検定の結果、5%水準で有意となり、この帰無阪説が棄却されました。このことから分かるのは、「4つの指導法の母平均は等しくない」ということであって、具体 多重比較という方法を用いる必要があります。ここでは、 Tukey (テューキー)の方法とよばれる多重比較の方法を説明します。 各群におけるデータ数nが等しく、各群の母分散も等しいと仮定して、次式によ 検定就計量qを求めます。

\(q = \frac{|比較する群の平均値差|}{\sqrt{群内の平均平方/各群のデータ数}}\)

「指導法データ」の例で、AとDを比較してみましょう。qを求めるために必要な 情報として以下を利用します。これらを用いて、検定統計量qの実現値を計算します。

mean(A) #Aの平均
## [1] 14.8
mean(D) #Dの平均
## [1] 6.4
nrow(全データ) #各群のデータ数
## [1] 5
群内平均平方 #群内の平均平方
## [1] 8.625

検定統計量qの実現値を計算

q<- abs(mean(A)-mean(D))/sqrt(群内平均平方/nrow(全データ))
q
## [1] 6.395651

こうして検定統計量qの実現値が6.395651と求められました。続いて棄却域を求 めます(有意水準は5%とします)。このためには、qtukey関数を利用します。

qtukey(0.95,4,16)
## [1] 4.046093
qtukey(0.05,4,16,lower.tail=FALSE)
## [1] 4.046093

qukey(下側確率,平均値の数,群内の自由度)といいう書き方になります。1ower tail= FALSE オプションをつけて、qtukey(上側確率,平均値の数,群内の自由 1ower.tai1=FALSE)と書くこともできます。どちらも同じ結果4.046093が求 められます。この値が棄却の臨界値になります。よって、多重比較のための棄却域は>4.046093となります。検定統計量の実現値6.395651は棄却域に入りますので、指導法Aと指導法Dの間には5%水準で有意差があるということになります。 この他のペアについては、皆さんが各自でやってみてください。 Rの関数を用いてTukeyの多重比較を実行することもできます。このためには TUKEYHSD ()という関数を利用します。この関数の引数として、aov関数を指定してください。

TukeyHSD (aov(統計テスト2~指導法2)) 
##   Tukey multiple comparisons of means
##     95% family-wise confidence level
## 
## Fit: aov(formula = 統計テスト2 ~ 指導法2)
## 
## $指導法2
##     diff        lwr        upr     p adj
## B-A -5.2 -10.514108  0.1141085 0.0562227
## C-A -5.6 -10.914108 -0.2858915 0.0371222
## D-A -8.4 -13.714108 -3.0858915 0.0017736
## C-B -0.4  -5.714108  4.9141085 0.9963241
## D-B -3.2  -8.514108  2.1141085 0.3446966
## D-C -2.8  -8.114108  2.5141085 0.4561325

可能なペアの組み合わせが示され、それぞれのペアについて、平均値差(diff) と95%信頼区間の下限(lwr)と上限(upr)、p値(p adj)が示されます。

7.2一元配分散分析(対応あり)

まずは下記の例題を見てください。一元配置分散分析(対応ありい)を適用するの 、下の例題のようなデータになります。5人の学生それぞれについて3つの测 定黄があります。このように、同じ被験者が複数の条件を経験するようなデータ にれを被験者内計画のデータとよびます。山田·村井(2004)参照)は対応のあるでーたとなります。

例题:表7.3は、ある大学の理工系学部の1年生5人に、線形代数、微分積分、 率統計に対する好意度を評定してもらったデータです。3つの数学科目に対 する好意度について有意な差があるといえるでしょうか。分散分析により確認してください。有意水準は5%とします。

|表7.3 3科目に対する好意度評定の結果| |学生|線形代数|微分積分|確率統計| |田中|7|5|8| |岸|8|4|6| |大引|9|7|7| |吉川|5|1|2| |荻野|6|3|5|

7.2.1対応がないものと見なして分散分析をしてみる

元配置分散分析(対応なし)で例として扱った指導法の違いによるテスト得点 のデータでは、20個のデータは全て異なる人から得られたものでした。一方、表 73のデータは、データの横の並び(各行)は同じ学生が回答したものです。今、同 じ人から3科目のデータが得られていることは気にせずに、対応のない一元配置分 分析を実行してみることにします。仮説は、

帰無仮説H0:3科目の好意度の母平均は等しい 対立仮説H1:3科目の好意度の母平均は等しくない です。

検定統計量は前節と同じFで、有意水準は5%とします。aov関数を用いて 分散分析を実行してみます。必要なものはn=15の好意度データが入った変数と、各データがどの科目のものであるかを示すための交数の2つです。

好意度<-c(7,8,9,5,6,5,4,7,1,3,8,6,7,2,5) 
科目<- factor(c(rep("線形代数",5),rep("微分積分",5),rep("確率統計",5)))
summary(aov(好意度~科目)) 
##             Df Sum Sq Mean Sq F value Pr(>F)
## 科目         2  22.53  11.267   2.641  0.112
## Residuals   12  51.20   4.267

分散分析表の結果を見ると、検定統計量の実現値はF=2.6406です。pは 0.121>0.05ですから、5%水準で有意な差はないことが分かります。D体は 一般に、対応のあるデータで、対応のあることを考慮せずに検定を行うと、定 力が低下して有意な結果が得られにくくなります。そこで、次項で行うように対応を考慮した分析を行います。

7.2.2一元配置分散分析(対応あり)を実行する

(1)帰無仮説と対立仮説の設定 帰無仮説Ho:3科目の好意度の母平均は等しい 対立仮説H:3科目の好意度の母平均は等しくない

(2)検定統計量の選択

分散分析では、検定統計量としてFを利用します。 \(F = \frac{条件平方和/条件の自由度}{残差の平方和/残差の自由度}\)

平方和や自由度の名前が変わっていますが、分子の条件平方和、条件の自由度は 対応のない一元配置分散分析の群間平方和、群間の自由度と全く同じものです。この例ではそれぞれの評定者が、比較したい3科目全てに回答しているので、「群」の比較ではなく「条件」の比較となっているために呼び名だけ変えてあります。

(3)有意水準aの決定 有意水準は5%、つまりa=0.05とします。この検定は片側検定になります。

(4)検定統計量の実現値を求める aov関数を用いて検定統計量の実現値を求めます。aov関数を用いるために必要 なデータのうち、好意度の値が入った「好意度」」と、科目を区別するための「科目」に前项で作ってあります

好意度
##  [1] 7 8 9 5 6 5 4 7 1 3 8 6 7 2 5
科目
##  [1] 線形代数 線形代数 線形代数 線形代数 線形代数 微分積分 微分積分
##  [8] 微分積分 微分積分 微分積分 確率統計 確率統計 確率統計 確率統計
## [15] 確率統計
## Levels: 確率統計 線形代数 微分積分

あとは、それぞれの好意度の値が誰の回答であるのかを示す変数である「人」を作ります

人<- factor(rep(c("田中","岸","大引","吉川","荻野"),3)) 
人
##  [1] 田中 岸   大引 吉川 荻野 田中 岸   大引 吉川 荻野 田中 岸   大引 吉川
## [15] 荻野
## Levels: 荻野 岸 吉川 大引 田中

一元配置分散分析(対応あり)ではaov関数を次のように書きます。

summary(aov(好意度~科目+人)) 
##             Df Sum Sq Mean Sq F value   Pr(>F)    
## 科目         2  22.53  11.267    14.7 0.002095 ** 
## 人           4  45.07  11.267    14.7 0.000931 ***
## Residuals    8   6.13   0.767                     
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

すると、上記のような分散分析表が出力されます。ここでは科目の違いによる平 均値差を検定したかったので、見るべきところは「科目」の行です。検定統計量F の值(Fva1ue)はF=14.696となります。

(5 ) 帰無仮説の棄却or採択の決定 p値に注目すると=0.002095ですから、5%水準で科目間に有意な差があるとい ことが分かります。また、「人」の行では、人による好意度の差が有意であるこ が示されていますが、個人差があるかどうかは関心の対象ではないので、ここで定Fは、2つの自由度が2と8のF分布(分子の自由 度か 2 的度が8のF分布)にしたがいます。それでは、有意水準5%のとさの国成 めてみましよう

qf(0.05,2,8,lower.tail=FALSE) #上側確率0.05に対応するFの値を求める  
## [1] 4.45897

棄却閾はF>4.45897となります。検定統計量の実現値はF=14695 この値は棄却域に入るので、帰無仮説は棄却されます。検定の結果は、「3つ 科日に対する好意度について、5%水準で有意差が見られた」などと報告

7.2.3対応の有無による違い

ここで注意してほしいのは、先ほど、一元配置分散分析(対応なし)と同じ方 で検定したときには有意ではなかつたのに、対応を考慮すると有意になるというこ とです。この2つの分散分析表を並べて比較してみます。

■対応を無視したときの分散分析表

好意度<-c(7,8,9,5,6,5,4,7,1,3,8,6,7,2,5) 
科目<- factor(c(rep("線形代数",5),rep("微分積分",5),rep("確率統計",5)))
summary(aov(好意度~科目)) 
##             Df Sum Sq Mean Sq F value Pr(>F)
## 科目         2  22.53  11.267   2.641  0.112
## Residuals   12  51.20   4.267

■対応を考慮したときの分散分析表

summary(aov(好意度~科目+人)) 
##             Df Sum Sq Mean Sq F value   Pr(>F)    
## 科目         2  22.53  11.267    14.7 0.002095 ** 
## 人           4  45.07  11.267    14.7 0.000931 ***
## Residuals    8   6.13   0.767                     
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

 「科目」の行に注目すると、自由度(Df)、平方和(Sum Sq)、平均平方(Meam Sq)の値は対応を無視しても考慮しても全く同じです。しかし、F値( F value は両者で大きく異なっています。また、「Residuals」の行を見ると、自由度、平方和、平均平方のいずれも、対応を考慮したときの値が小さくなっていること扮分かりますね。検定統計量Fは、対応を無視した場合も対応を考慮した場合も「科目」の平均平方(Mean Sq)を「Residuals」の平均平方で割ったものです。   ●対応を無視した場合 F=11.267/4.267=2.6406 ●対応を考慮した場合 F=11.267/0.767=14.696

つまり、対応を考慮するとFの分母である残差( Residual )の平均平方の値が小さくなるため、Fの値は大きくなり、結果として有意になりやすくなるのです。 対応を考慮すると残差の平均平方が小さくなるかというと、対応を無視した きの残差のばらつきから、個人差によるばらつきを取り除くことができるからで す。実際、対応を考慮した場合の「人」」(個人差)の平方和と「 Residuals 」の 平方和を足してみると、45.067+6.133=51.200となり、対応を無視したときの 「Residuals」の平方和(群内平方和)とびったり一致することが確認できます。 また、自由度についても同様に、対応を無視したときの「 Residua 1s」の自由度 (=12)が、対応を考慮したときには「人」の自由度(=4)と「 Residuals 」の 自由度(=8)に分解されています

7.2.4平方和の分解と自由度の計算

一元配置分散分析での平方和の分解は、 ●一元配置分散分析(対応なし) 全体平方和=群間平方和+群内平方和 ●一元配置分散分析(対応あり) 全体平方和=条件平方和+個人差平方和+残差平方和 となっています。

一元配置分散分析(対応なし)における群内平方和が、一元配置 分散分析(対応あり)ではさらに個人差平方和残差平方和に分解されるのです。 個人差平方和とは、個人の違いにより説明できる平方和のことです。表7.3のデ-夕は、5人の学生についてそれぞれ3つのデータが測定されています。同じ人が複 数の条件で測定されることで、データに個人の特徴が反映されることがあります。 具体的には、ある人からは一貫して高い値が得られ、また別な人からは一貫して低 い値が得られるというものです。そういった個人差によって生じるばらつきが個人 差平方和ということになります。 以下では、対応のない場合と同様、平方和の分解の手順を説明していくことにします。

全データ<- matrix(c(7,8,9,5,6,5,4,7,1,3,8,6,7,2,5),nrow=5,ncol=3)
全データ
##      [,1] [,2] [,3]
## [1,]    7    5    8
## [2,]    8    4    6
## [3,]    9    7    7
## [4,]    5    1    2
## [5,]    6    3    5
科目平均<- colMeans (全データ) 
科目平均
## [1] 7.0 4.0 5.6
人平均<- rowMeans(全データ)
人平均
## [1] 6.666667 6.000000 7.666667 2.666667 4.666667
全平均<- mean(全データ)
全平均
## [1] 5.533333

各科目の平均(科目平均)、各評定者の平均(人平均)、全データの平均(全平均 を求めることができました。平方和の分解を説明するために、これらの平均を要素 とする3つの行列を作っておきます。

全平均行列<- matrix(rep(全平均,15),nrow=5,ncol=3)
全平均行列
##          [,1]     [,2]     [,3]
## [1,] 5.533333 5.533333 5.533333
## [2,] 5.533333 5.533333 5.533333
## [3,] 5.533333 5.533333 5.533333
## [4,] 5.533333 5.533333 5.533333
## [5,] 5.533333 5.533333 5.533333
科目平均行列<- matrix(rep(科目平均,5),nrow=5,ncol=3,byrow=TRUE)
科目平均行列
##      [,1] [,2] [,3]
## [1,]    7    4  5.6
## [2,]    7    4  5.6
## [3,]    7    4  5.6
## [4,]    7    4  5.6
## [5,]    7    4  5.6
人平均行列<- matrix(rep(人平均,3),nrow=5,ncol=3)
人平均行列
##          [,1]     [,2]     [,3]
## [1,] 6.666667 6.666667 6.666667
## [2,] 6.000000 6.000000 6.000000
## [3,] 7.666667 7.666667 7.666667
## [4,] 2.666667 2.666667 2.666667
## [5,] 4.666667 4.666667 4.666667

3つの行列が準備できました。続いて、平方和を求めるために、3つの行列を用 いた計算を行っていきます。 まず、データ全体のばらつきを把握するために、各データの値から全平均を引きます。

全体<- 全データ-全平均行列 
全体
##            [,1]       [,2]       [,3]
## [1,]  1.4666667 -0.5333333  2.4666667
## [2,]  2.4666667 -1.5333333  0.4666667
## [3,]  3.4666667  1.4666667  1.4666667
## [4,] -0.5333333 -4.5333333 -3.5333333
## [5,]  0.4666667 -2.5333333 -0.5333333

次に、条件としての科目の違いによる効果(平均値を押し上げたり引き下げたりする力)を求めます。

条件<- 科目平均行列-全平均行列
条件 
##          [,1]      [,2]       [,3]
## [1,] 1.466667 -1.533333 0.06666667
## [2,] 1.466667 -1.533333 0.06666667
## [3,] 1.466667 -1.533333 0.06666667
## [4,] 1.466667 -1.533333 0.06666667
## [5,] 1.466667 -1.533333 0.06666667

続いて、評定者の違いによる効果を求めます。もともと数学が好きな人は、3科目とも好意度が高めでしょうから、そういう人が回答することによって、その人の 回答は全体的に押し上げられて平均値が高くなります。逆に数学が嫌いな人が回答 すると、その人の回答の平均値は全体的に引き下げられて平均値が低くなります。 これが個人差による効果です。

個人差<- 人平均行列-全平均行列
個人差
##            [,1]       [,2]       [,3]
## [1,]  1.1333333  1.1333333  1.1333333
## [2,]  0.4666667  0.4666667  0.4666667
## [3,]  2.1333333  2.1333333  2.1333333
## [4,] -2.8666667 -2.8666667 -2.8666667
## [5,] -0.8666667 -0.8666667 -0.8666667

条件(科目)の効果、個人差の効果がそれぞれ求められました。データの各値か ら、全平均、条件の効果、個人差の効果を全部引いて残ったものが、条件の効果で も個人差の効果でも説明できない(人による科目との相性などの)残差です。

残差<- 全データ-全平均行列-条件-個人差 
残差 
##            [,1]       [,2]        [,3]
## [1,] -1.1333333 -0.1333333  1.26666667
## [2,]  0.5333333 -0.4666667 -0.06666667
## [3,] -0.1333333  0.8666667 -0.73333333
## [4,]  0.8666667 -0.1333333 -0.73333333
## [5,] -0.1333333 -0.1333333  0.26666667

対応なしの場合と同様、各行列の各要素を二乗した行列について、それぞれ要素 の和を求めてみましよう。そして、「全体」行列の要素の二乗和を「全体平方和」、「条件」行列の要素の二乗和を「条件平方和」、「個人差」行列の要素の二乗和を「個人差 平方和」、「残差」行列の要素の二乗和を「残差平方和」と名付けることにします。

全体平方和<- sum(全体^2) 
全体平方和 
## [1] 73.73333
条件平方和<-sum(条件^2)
条件平方和
## [1] 22.53333
個人差平方和<-sum(個人差^2) 
個人差平方和 
## [1] 45.06667
残差平方和<-sum(残差^2) 
残差平方和
## [1] 6.133333
条件平方和+個人差平方和+残差平方和
## [1] 73.73333

以上により、一元配置分散分析(対応あり)では、

全体平方和=条件平方和+钢人差平方和+残差平方和

と、平方和が分解されることが確認できました。条件平方和、個人差平方和、残差 平方和が、それぞれaov関数によって出力された「科目」「人」「 Residuals」の平方和の値と一致していることを確かめてみてくださvいo また、それぞれの平方和に対応する自由度は次のように求めます。

条件の自由度=条件の数一1=3-1=2 個人差の自由度=人の数-1=5-1=4 残差の自由度=条件の自由度×個人差の自由度=2×4=8 全体の自由度=全データ数一1=15-1=14

ここでも、平方和と同様に、 全体の自由度=条件の自由度+個人差の自由度+残差の自由度 という関係が成り立ちます。分散分析表のDfの欄の数値と一致していることを確認してください。