R言語で多変量解析7(ピアソンのχ二乗統計量, 独立性の検定)
ピアソンのχ二乗統計量
- 値が大きいほど、2つの質的変数間の相関が高いと考える、小さければ、互いに独立であると考える。
分割表による独立性の検定
- 質的2変数 x, y が与えられた時、ビアソンの統計量を用いて、以下の式が成り立つ時、xとyは有意水準5%で独立性が棄却され、相関があると判断する。
※ただし、 は、自由度 で、 分布の上側確率が 5[%] ( 0.05 ) の値 ( 面積 ) を表す。
例題
A | B | C | 合計 | |
---|---|---|---|---|
1 | 30 | 10 | 10 | 50 |
2 | 10 | 20 | 20 | 50 |
合計 | 40 | 30 | 30 | 100 |
Rには、chisq.testという関数でピアソンの 検定を行うことができる。入力には行列を用意してやれば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
値、自由度、p値を簡単に求めることができる。
したがって、と比較すれば良い。
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]。"