読者です 読者をやめる 読者になる 読者になる

はしくれエンジニアもどきのメモ

情報・Web系技術の勉強メモ・備忘録です。

R言語で多変量解析7(ピアソンのχ二乗統計量, 独立性の検定)

R言語

ピアソンのχ二乗統計量

{\displaystyle \chi^2_0 = \sum_{i=1}^{行} \sum_{j=1}^{列} \frac{ ( n_{ij} - m_{ij} )^2 }{ m_{ij} } }

{\displaystyle 期待度数m_{ij} = \frac{ n_{i*}×n_{*j} }{ n } = \frac{ i番目の行合計×j番目の列合計 }{ 総合計 } } 

  • {\displaystyle \chi^2_0 }値が大きいほど、2つの質的変数間の相関が高いと考える、小さければ、互いに独立であると考える。

 

分割表による独立性の検定

  • 質的2変数 x, y が与えられた時、ビアソンの{\displaystyle \chi^2 }統計量を用いて、以下の式が成り立つ時、xとyは有意水準5%で独立性が棄却され、相関があると判断する。

                                    {\displaystyle \chi^{2}_{0} \geq\chi^{2}( \phi, 0.05 ) }

                                    {\displaystyle \phi = (行 - 1) \left( 列 - 1 \right)}

 ※ただし、  {\displaystyle \chi^{2}( \phi, 0.05 ) } は、自由度 {\displaystyle \phi } で、 {\displaystyle \chi^{2} } 分布の上側確率が 5[%] ( 0.05 ) の値 ( 面積 ) を表す。

 

例題

 ABC合計
1 30 10 10 50
2 10 20 20 50
合計 40 30 30 100

 Rには、chisq.testという関数でピアソンの{\displaystyle \chi^{2} } 検定を行うことができる。入力には行列を用意してやればok。

 mat <- matrix( 0, 2, 3 )
 mat[1,] <- c( 30, 10, 10 )
 mat[2,] <- c( 10, 20, 20 )
 mat
[,1] [,2] [,3]
[1,] 30 10 10
[2,] 10 20 20

 

chisq.test( mat )

Pearson's Chi-squared test

data: mat
X-squared = 16.6667, df = 2, p-value = 0.0002404

 {\displaystyle \chi^{2}_0 }値、自由度、p値を簡単に求めることができる。

 したがって、{\displaystyle \chi^{2}( \phi, 0.05 ) }と比較すれば良い。

qchisq( df = 2, p = 0.05, lower.tail = FALSE )
[1] 5.991465

 せっかくなので、比較して判定してくれる関数を作ってみる。

PearsonChiSquareTest <- function( mat, p = 0.05 ){
 test <- chisq.test( mat )
 chi2.0 <- test[1]$statistic

 chi2 <- qchisq( df = ( ( nrow( mat ) - 1 ) * ( ncol( mat ) - 1 ) ), p = p, lower.tail = FALSE )

 if( chi2.0 >= chi2 ){
  sprintf( "行と列は有意水準%.3f[%%]で独立性が棄却され、相関があると判断 [chi2.0:%f][chi2:%f]。", p * 100, chi2.0, chi2 )
 }else{
  sprintf( "行と列は有意水準%.3f[%%]で独立性が棄却されず、相関があるとはいえないと判断 [chi2.0:%f][chi2:%f]。", p * 100, chi2.0, chi2 )
 }

}

PearsonChiSquareTest( mat )
[1] "行と列は有意水準5.000[%]で独立性が棄却され、相関があると判断 [chi2.0:16.666667][chi2:5.991465]。"