理学療法士がまとめたノート

統計学備忘録 since2016

Rを使って統計学を勉強するブログです

独立性の検定

独立性の検定
投稿日2016.11.4
更新日2017.10.24

f:id:yoshida931:20170913173322j:plain:w500
  
この分割表において独立とは  Ai ∩ Bj の各確率に対して
全ての i j(どの i j でも)に対して  P(Ai ∩ Bj )=P( Ai ) * P( Bj )  となる

AとBが完全に独立な場合の例
  A1 : A2 : A3  がどのBでも  1 : 3 : 6 
  B1 : B2 : B3  がどのAでも  1 : 3 : 5
f:id:yoshida931:20170913173555j:plain:w250

帰無仮説の表現いろいろ
事象AiとBjには有意な連関がない = 事象AiとBjは独立である 
A1 , A2 , ... , Ak の起こり方はどのBjに対しても共通である
全ての i jに対して  P(Ai ∩ Bj )=P( Ai ) * P( Bj )

期待度数(理論度数)
Ai の出現確率の推定値は  P( Ai ) = 行の周辺度数 / 総度数 = ni・ / n
Bj の出現確率の推定値は  P( Bj ) = 列の周辺度数 / 総度数 = nj・ / n
したがって セルOij の期待度数Eiは、総度数×セルの確率
Ei  =  n * P( Ai ∩ Bj )  = n * P( Ai ) * P( Bj )  =  n * ( ni・ / n ) * ( nj・ / n )

カイ2乗値
=  ∑∑ ( ( ( 観測度数 - 期待度数 )^2 ) / 期待度数 )


例)サンプルデータの独立性の検定を実施します
 まずは周辺度数を算出します

ym <- matrix(c(12, 10, 13, 20, 12, 16, 20, 15, 19),3,3)
addmargins(ym)

             Sum
    12 20 20  52
    10 12 15  37
    13 16 19  48
Sum 35 48 54 137


次は期待値を求めます

     [,1] [,2] [,3]
[1,] "E1" "E4" "E7"
[2,] "E2" "E5" "E8"
[3,] "E3" "E6" "E9"

E1 <- (52*35)/137
E2 <- (37*35)/137
E3 <- (48*35)/137
E4 <- (52*48)/137
E5 <- (37*48)/137
E6 <- (48*48)/137
E7 <- (52*54)/137
E8 <- (37*54)/137
E9 <- (48*54)/137

カイ2乗値を求めてみます  自由度 = ( 3-1 ) * ( 3-1 ) = 4

( 12 - E1 )^2 / E1 +
  ( 10 - E2 )^2 / E2 +
  ( 13 - E3 )^2 / E3 +
  ( 20 - E4 )^2 / E4 +
  ( 12 - E5 )^2 / E5 +
  ( 16 - E6 )^2 / E6 +
  ( 20 - E7 )^2 / E7 +
  ( 15 - E8 )^2 / E8 +
  ( 19 - E9 )^2 / E9
=0.5099473

P値

pchisq(0.5099473, 4, lower.tail = F)      # 累積分布 pchisq ( カイ二乗値 , 自由度 ) 
=0.9725254

帰無仮説は棄却できません.したがって行データと列データは独立しています.

Rの関数で確認します

chisq.test ( ym , correct=F )

	Pearson's Chi-squared test

data:  y
X-squared = 0.50995, df = 4, p-value = 0.9725

Yates(イェ-ツ)補正
chisq.test(x)
2行×2列のクロス集計表のデータに対して行われる補正分割表から得られる.分割表から得られるカイ二乗値は跳び跳びの値しかとらないがχ2 分布は連続分布である。 このため,2×2 分割表の場合には連続性の補正をしたほうがよい。検出力は低下するが、より正確な検定が可能になる。

フィッシャーの正確確率検定
fisher.test(x)
分割表において,期待値が 5 以下の桝目が全体の桝目の 20% 以上あるか,期待値が 1 以下の桝目が 1 つでもある場合には,χ2 分布を利用する「独立性の検定」は不適当である。そのような場合に実施する検定。

http://aoki2.si.gunma-u.ac.jp/lecture/Cross/Fisher.html


例)HairEyeColorを使って練習してみましょう!

HairEyeColor
str(HairEyeColor)

table [1:4, 1:4, 1:2] 32 53 10 3 11 50 10 30 10 25 ...
table [行数, 列数, 表数]

y<-addmargins(HairEyeColor) #周辺度数付き
#HairEyeColorの第一表(Sex = Male)にアクセスする
y[,,1]

       Eye
Hair    Brown Blue Hazel Green Sum
  Black    32   11    10     3  56
  Brown    53   50    25    15 143
  Red      10   10     7     7  34
  Blond     3   30     5     8  46
  Sum      98  101    47    33 279

帰無仮説:髪の色と目の色は連関がない(独立している)

それでは第一表(Sex = Male)のカイ二乗値を求めてみます

addmargins(HairEyeColor)    #これで周辺度数を確認します
mh<-HairEyeColor[,,1]       #第1表のみ抜き出します

       Eye
Hair    Brown Blue Hazel Green
  Black    32   11    10     3
  Brown    53   50    25    15
  Red      10   10     7     7
  Blond     3   30     5     8

xx<-matrix(c(56,143,34,46),4,4)   #行合計マトリックス

     [,1] [,2] [,3] [,4]
[1,]   56   56   56   56
[2,]  143  143  143  143
[3,]   34   34   34   34
[4,]   46   46   46   46

yy<-t(matrix(c(98,101,47,33),4,4))  #列合計マトリックス

     [,1] [,2] [,3] [,4]
[1,]   98  101   47   33
[2,]   98  101   47   33
[3,]   98  101   47   33
[4,]   98  101   47   33

xy<- xx*yy/279      #各データの期待度数マトリックス

         [,1]     [,2]      [,3]      [,4]
[1,] 19.67025 20.27240  9.433692  6.623656
[2,] 50.22939 51.76703 24.089606 16.913978
[3,] 11.94265 12.30824  5.727599  4.021505
[4,] 16.15771 16.65233  7.749104  5.440860

sum((mh-xy)^2/xy)      #X-squared カイ二乗値
= 41.28029

Rで確認してみます

chisq.test ( HairEyeColor[,,1] )

	Pearson's Chi-squared test

data:  HairEyeColor[, , 1]
X-squared = 41.28, df = 9, p-value = 4.447e-06

帰無仮説は棄却されたので、髪の色と目の色は独立ではない.つまり何らかの関連性があるということになりました.

それでは具体的にどのような関連性があったのかを調べてみます.

残差分析(残差=観測値−期待値)

y <- HairEyeColor[,,1]
ct <- chisq.test ( y )
# 期待値
ct$expected
# 標準化残差
ct$residuals
# 調整済み標準化残差の算出
resi<-ct$residuals/sqrt(outer(1-rowSums(y)/sum(y), 1-colSums(y)/sum(y)))

       Eye
Hair         Brown       Blue      Hazel      Green
  Black  3.8606619 -2.8839080  0.2261621 -1.6771901
  Brown  0.6951712 -0.4403935  0.2913436 -0.7098742
  Red   -0.7447775 -0.8790120  0.6221785  1.6879365
  Blond -4.4471040  4.4810956 -1.1850800  1.2785535

# 調整済み標準化残差のp値
p.value.matrix <- pnorm(abs(resi), lower.tail=FALSE)*2
round(p.value.matrix, 4)

       Eye
Hair     Brown   Blue  Hazel  Green
  Black 0.0001 0.0039 0.8211 0.0935
  Brown 0.4869 0.6597 0.7708 0.4778
  Red   0.4564 0.3794 0.5338 0.0914
  Blond 0.0000 0.0000 0.2360 0.2011

これは男性のデータなので
黒髪の男性では、茶色の目は有意に多く、青い目は有意に少ない.
金髪の男性では、茶色の目は有意に少なく、青い目は有意に多い.