Rで学ぶ統計学7章(前半)

Download Report

Transcript Rで学ぶ統計学7章(前半)

第7章 分散分析
6章のt検定は2つの群の平均値を比較。
それに対し、分散分析は3つ以上の群
の平均値を比較
7.1 一元配置分散分析 (対応なし)
分散分析:3つ以上の群の平均値差の検定
(名前に惑わされないように)
例題:表4.1
A,B,C,Dの4群の母平均に差があるか?
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.1 一元配置分散分析(対応なし)を実行する
Rを用いた計算方法の紹介
(1)帰無仮説と対立仮説の設定
帰無仮説 H0:4群の母平均は等しい
対立仮説 H1:4群の母平均は等しくない
*注意
4群のうち1つだけ母平均が異なるような場合で
も対立仮説は成立
(2)検定統計量の選択
次のFを検定統計量とする:
群間平方和 群間の自由度
F
群内平方和 群内の自由度
これは帰無仮説(すべての群の母平均が等しいとき)
のもとで、確率分布のF分布に従う
*F分布の自由度は2種類:分子と分母の自由度
df関数:F分布の描画
使用法
df(値,分子の自由度,分母の自由度)
参考: dt関数やdchisq関数と同様、確率密度の値を返す関数
# 図7.1
0.4
0.3
0.2
0.1
0.0
df(x, 3, 16)
0.5
0.6
0.7
> curve(df(x,3,16),0,5)
0
1
2
3
x
4
5
(3)有意水準αの決定
ここでは有意水準は5%、つまりα=0.05とする
図7.1から明らかなように、F分布は正値を取る
⇒ 分散分析は常に片側検定
(4)検定統計量の実現値を求める
以下の3種類を紹介
(1) oneway.test関数
一元配置分散分析のみ実行可能
(2) aov関数
最も一般的
(3) anova関数
複数のモデルの比較など高度な分析に対応
実行例:データの準備
> 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)
> 統計テスト2 <- c(A,B,C,D)
> 指導法 <- c(rep("A",5),rep("B",5),rep("C",5),rep("D",5))
> 指導法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
*rep関数:rep(値,繰り返し回数) ー 指定した値を繰り返し回数分だけ繰り
返したデータを作る
* factor関数:要因ベクトルに変換する(分散分析のため必要)
(1) 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
*Fの実現値は7.11
(2) 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
> summary(aov(統計テスト2~指導法2))
Df Sum Sq Mean Sq F value Pr(>F)
指導法2 3 184.000 61.333
7.1111 0.002988 **
Residuals 16 138.000 8.625
oneway.test関数と同じ結果
--Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
分散分析表
(3) anova関数
> anova(lm(統計テスト2~指導法2))
Analysis of Variance Table
分散分析表
Response: 統計テスト2
Df Sum Sq Mean Sq F value Pr(>F)
指導法2
3 184.000 61.333 7.1111 0.002988 **
Residuals
16 138.000
8.625
oneway.test関数と同じ結果
--Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
*結果は分散分析表の形で出力、Fの実現値は7.11
⇒ 3つの関数とも、Fの実現値は一致
(5)帰無仮説の棄却or採択の決定
3つの関数のどれを使っても
検定統計量Fの実現値に対応するp値が出力
これにより帰無仮説を棄却するかどうか決め
ることができる
ここで問題: この例題の結果はどういうように
報告される?
ヒント:いずれも p-value = 0.002988 という出力
帰無仮説の棄却と採択の決定
• p値が0.002988。これは有意水準として設定
した0.05より小さいので帰無仮説を‥‥
棄却!
4つの指導法の間に有意な平均
値差が見られる
13
7.1.2 平方和の分解
分散分析の考え方の基礎の説明
(1)平方和の分解、(2)自由度の計算、(3)分散分析表の見方
群間平方和と群内平方和の説明のために...
> 全データ <- 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( )は引数の値のデータを横方向につないで行列を作る関数
群の平均と全平均
> 群平均 <- colMeans(全データ)
> 群平均
A
B
C
D
14.8 9.6 9.2 6.4
> 全平均 <- mean(全データ)
> 全平均
[1] 10
> 全平均行列 <- 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(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
> 全体 <- 全データ - 全平均行列 それぞれのデータに対する
> 全体
全平均との差
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
全平均からの差
> 群間 <- 群平均行列 - 全平均行列
> 群間
*効果 : 条件の違いで平均点を
[,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
> 群内 <- 全データ - 群平均行列 群内: それぞれの群の平均との差
> 全体^2
A B
[1,] 25 9
[2,] 1 4
[3,] 64 4
[4,] 16 4
[5,] 64 9
> 群間^2
[,1]
[1,] 23.04
[2,] 23.04
[3,] 23.04
[4,] 23.04
[5,] 23.04
C
0
16
1
9
4
D
0
9
49
25
9
[,2]
0.16
0.16
0.16
0.16
0.16
[,3]
0.64
0.64
0.64
0.64
0.64
[,4]
12.96
12.96
12.96
12.96
12.96
> 群内^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
> 全体平方和 <- sum(全体^2)
> 全体平方和
データ全体のばらつき
[1] 322
> 群間平方和 <- sum(群間^2)
> 群間平方和
群の違いによるばらつき
[1] 184
> 群内平方和 <- sum(群内^2)
> 群内平方和
[1] 138
同じ群におけるデータ
> 群間平方和+群内平方和
[1] 322
のばらつき
先の分散分析表から: 平均平方=平方和/自由度
Df Sum Sq Mean Sq F value Pr(>F)
指導法2 3 184.000 61.333 7.1111 0.002988
平方和(Sum of Squares)
Residuals 16 138.000
8.625
残差(Residual)
残差:「群の効果に応じて全員の得点が一律に押
し上げられたり引き下げられたりした」というだけ
では説明しきれないデータのばらつき
平方和の分解:
全体平方和=群間平方和+群内平方和
データ全体のばらつき(全体平方和)を
群の違いによって説明できる部分(群間平方和)
と、それでは説明できない部分(群内平方和)
に分解
自由度
群間の自由度=群の数-1
群内の自由度=(各群のデータ数-1)を全ての群について
合計
全体の自由度=全データ数-1
例題で自由度を計算
> 群間自由度 <- ncol(全データ)-1
> 群間自由度
[1] 3
> 群内自由度 <- (nrow(全データ)-1)*ncol(全データ)
> 群内自由度
[1] 16
> 全体自由度 <- length(全データ)-1
> 全体自由度
[1] 19
> 群間自由度+群内自由度
[1] 19
*ncol関数は行列の列(column)数を求める
*nrow関数は行列の行(row)数を求める
> 群間平均平方 <- 群間平方和/群間自由度
> 群間平均平方
[1] 61.33333
> 群内平均平方 <- 群内平方和/群内自由度
> 群内平均平方
[1] 8.625
> 全体平方和/全体自由度
[1] 16.94737
> var(統計テスト2)
[1] 16.94737
全データの不偏分散=全体平方和/全体の自由度
群間平方和 群間の自由度
F
群内平方和 群内の自由度
Fの定義式の分子と分母
分子: (群間平方和)/(群間の自由度)=群間の平均平方
分母: (群内平方和)/(群内の自由度)=群内の平均平方
これから
F=群間の平均平方÷群内の平均平方
群間の平均平方が群内の平均平方に比べてどれだけ大きいかを
表す
> F <- 群間平均平方/群内平均平方
>F
[1] 7.111111
平方和を図で表す
群間平方和/群間自由度
群内平方和/群内自由度
Sum Sp(184.00)/3
Sum Sp(138.00)/16
• 指導法の違い
• 勉強の個人差
• テスト当日の体調 etc..
こっちの値の方が大きいからデータのばらつきの原因が群間で起こってい
ると判断できそうだね!!
23
7.1.3 多重比較(Tukeyの方法)
一元配置分散分析の結果「帰無仮説が棄却」さ
れたとする
⇒群の母平均が等しくないことしかわからない
具体的にどの群とどの群の間に差があるかを
知りたい⇒多重比較
ここではTukey(テューキー)の方法の紹介
Tukeyの方法
*仮定:各群のデータ数nが等しい
各群の母分散も等しい
検定統計量q:
q
比較する群の平均値差
群内の平均平方 各群のデータ数
Tukeyの方法:例題
> mean(A)
[1] 14.8
> mean(D)
[1] 6.4
> nrow(全データ)
[1] 5
> 群内平均平方
[1] 8.625
> q <- abs(mean(A)-mean(D))/sqrt(群内平均平方/nrow(全データ))
>q
[1] 6.395651
Tukeyの方法:例題(続)
qtukey(下側確率、平均値の数、群内の自由度)
> qtukey(0.95,4,16)
> TukeyHSD(aov(統計テスト2~指導法2))
[1] 4.046093
Tukey multiple comparisons of means
> qtukey(0.05,4,16,lower.tail=FALSE)
95% family-wise confidence level
[1] 4.046093
Fit: aov(formula = 統計テスト2 ~ 指導法2)
有意水準5%で
有意差
があるのは...
$指導法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
7.2 一元配置分散分析 (対応あり)
一元配置分散分析(対応あり)では、同じ被験者が複
数の条件を経験するというような
対応があるデータ
(被験者内計画のデータ)
を比較対象とする
例題: 学生
線形代数
微分積分
確率統計
田中
7
5
4
岸
8
4
6
大引
9
7
7
吉川
5
1
2
荻野
6
3
5
7.2.1 対応がないものと見なして分散分析をしてみる
(1)帰無仮説と対立仮説の設定:
帰無仮説H0: 3教科の好意度の母平均は等しい
対立仮説H1: 3教科の好意度の母平均は等しくない
(2) 検定統計量の選択
F
(3) 有意水準: 5%
(4) 検定統計量の実現値
> 好意度 <- 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.533 11.267 2.6406 0.1121
Residuals 12 51.200
4.267
検定統計量の実現値はF=2.6406
p値=0.1121 > 0.05
ゆえに、5%水準で有意な差はない
7.2.2 一元配置分散分析 (対応あり)を実行する
(1)帰無仮説と対立仮説の設定
帰無仮説H0: 3教科の好意度の母平均は等しい
対立仮説H1: 3教科の好意度の母平均は等しくない
(2)検定統計量の選択
検定統計量としてFを利用
F
条件平方和/ 条件の自由度
残差平方和/ 残差の自由度
名前が変わっているが、分子の条件平方和、条
件の自由度は
対応のない一元配置分散分析の群間平方和、群
間の自由度と全く同じもの
(3)有意水準αの決定
有意水準は5%、つまりα=0.05
この検定は片側検定
(4)検定統計量の実現値を求める
aov関数を用いて検定統計量の実現値を求
める
> 好意度
[1] 7 8 9 5 6 5 4 7 1 3 8 6 7 2 5
> 科目
[1] 線形代数 線形代数 線形代数 線形代数 線形代数 微分積分 微分積分 微分積分
[9] 微分積分 微分積分 確率統計 確率統計 確率統計 確率統計 確率統計
Levels: 確率統計 線形代数 微分積分
> 人 <- factor(rep(c("田中","岸","大引","吉川","萩野"),3))
>人
[1] 田中 岸 大引 吉川 萩野 田中 岸 大引 吉川 萩野 田中 岸 大引 吉川 萩野
Levels: 岸 吉川 大引 田中 萩野
> summary(aov(好意度~科目+人))
Df Sum Sq Mean Sq F value Pr(>F)
科目
2 22.533 11.267 14.696 0.002095 **
人
4 45.067 11.267 14.696 0.000931 ***
Residuals 8 6.133 0.767
--Signif. Codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
検定統計量Fの
値はF=14.696
(5)帰無仮説の棄却or採択の決定
検定統計量Fは、2つの自由度が2と8のF分布(分
子の自由度が2、分母の自由度が8のF分布)に
従う
> qf(0.05,2,8,lower.tail=FALSE)
[1] 4.45897
*棄却域はF>4.46
検定統計量の実現値はF=14.7
したがって帰無仮説は棄却される
7.2.3 対応の有無による違い
この例題は
一元配置分散分析(対応なし)と同じ方法で検
定したときには有意ではない
対応を考慮すると有意になる
■対応を無視したときの分散分析表
Df Sum Sq Mean Sq F value
科目
2 22.533 11.267 2.6406
Residuals 12 51.200
4.267
Pr(>F)
0.1121
■対応を考慮したときの分散分析表
Df
科目
2
人
4
Residuals 8
Sum Sq Mean Sq F value
22.533 11.267 14.696
45.067 11.267 14.696
6.133
0.767
Pr(>F)
0.002095 **
0.000931 ***
検定統計量Fは、対応を無視した場合も対応を考慮した場合も、
「科目」の平均平方(Mean Sq)を「Residuals」の平均平方で割ったもの
●対応を無視した場合
F=11.267/4.267=2.6406
●対応を考慮した場合
F=11.267/0.767=14.696
対応を考慮するとFの分母である残差の平均
平方の値が小さくなるため、Fの値は大きくなり、
結果として有意になりやすくなる
なぜ対応を考慮すると残差の平均平方が小
さくなるか...
対応を無視したときの残差のばらつきから、
個人差によるばらつきを取り除くことができ
るから
7.2.4 平方和の分解と自由度の計算
一元配置分散分析での平方和の分解は、
●一元配置分散分析(対応なし) :
全体平方和=群間平方和+群内平方和
●一元配置分散分析(対応あり) :
全体平方和=条件平方和+個人差平方和+残差
平方和
続き
*一元配置分散分析(対応なし)における群内
平方和が、一元配置分散分析(対応あり)では
さらに個人差平方和と残差平方和に分解さ
れる
*個人差平方和とは、個人の違いにより説明
できる平方和のこと
平方和の分解の手順
> 全データ <- 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
> 全平均行列 <- 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
> 全体 <- 全データ-全平均行列
> 全体
[,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
> 個人差 <- 人平均行列-全平均行列
> 個人差
[,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
以上により、一元配置分散分析(対応あり)では、
全体平方和=条件平方和+個人差平方和+
残差平方和
と分解されることが確認できた
* それぞれの平方和に対応する自由度は次のように求める
• 条件の自由度=条件の数-1=3-1=2
• 個人差の自由度=人の数-1=5-1=4
• 残差の自由度=条件の自由度×個人差の自由度=2×4
=8
• 全体の自由度=全データ数-1=15-1=14
ここでも、平方和と同様に、
全体の自由度=条件の自由度+
個人差の自由度+残差の自由度
という関係が成り立つ