①カイ2乗検定(χ²検定)とは

 分割表検定ともいい,データがいくつかのカテゴリに分けられているとき,それらのカテゴリ間の関連性や独立性を調べるために使用される統計的手法の一つである。一般的な方法は, カイ2乗検定 Chi-square test(χ² test)とフィッシャーの正確確率検定 Fisher’s exact testがある。 

 目的: 分割表に示される2つの変数が互いに独立で関連性があるかを検定する。

手順:

帰無仮説: 通常,「2つの変数は独立であり,関連性がない」という仮説。  

検定統計量: 観測度数と期待度数との差を計算し,カイ2乗統計量を算出し,そのp値が求められる。 p<0.05(5%) 場合,帰無仮説を棄却し,「2変数間に関連性がある」と判断する。観測度数は入力する。 期待度数は,自動算出される。期待度数が5以下のセルが20%未満であれば,カイ2乗検定法が適用される。 20%以上の場合,フィッシャーの正確確率検定法を適用する。よって,一般にこの二つの検定法を同時に使い, カイ2乗検定のp値またはフィッシャー検定法のp値が0.05未満ならば,帰無仮説を棄却し, 「統計的有意な関連性がある」と認める。

②データの入力

分割表データ 

#データの作成
data <- matrix(c(20, 10, 20, 30), nrow = 2, byrow = TRUE)
# 行と列の名前を設定
rownames(data) <- c("Nosmoking", "smoking")
colnames(data) <- c("NLC", "LC")
# データの表示
cat("\n入力した分割表:\n")
## 
## 入力した分割表:
print(data)
##           NLC LC
## Nosmoking  20 10
## smoking    20 30

Excelデータ 

#csvのデータを読み込み(プログラムと同じファルダに)
# setwd("pass to project-folder")#プログラムのファルダ指定
data1 <- read.csv("chi.csv", header = T, fileEncoding = "Shift-Jis")
# データの表示
cat("\n入力したデータ:\n")
## 
## 入力したデータ:
print(data1)
##    性別 A有効B無効
## 1  男性          A
## 2  男性          A
## 3  女性          A
## 4  女性          A
## 5  女性          A
## 6  男性          A
## 7  女性          A
## 8  男性          A
## 9  女性          A
## 10 女性          A
## 11 女性          A
## 12 男性          A
## 13 男性          A
## 14 女性          A
## 15 女性          A
## 16 女性          A
## 17 男性          A
## 18 男性          A
## 19 女性          A
## 20 女性          A
## 21 男性          B
## 22 男性          B
## 23 男性          B
## 24 女性          B
## 25 女性          B
## 26 男性          B
## 27 男性          B
## 28 女性          B
## 29 女性          B
## 30 男性          B
## 31 男性          B
## 32 男性          B
## 33 女性          B
## 34 女性          B
## 35 男性          B
## 36 男性          B
## 37 男性          B
## 38 女性          B
## 39 男性          B
## 40 男性          B
# 分割表の作成
data <- table(data1$性別, data1$A有効B無効)
cat("\n分割表:\n")
## 
## 分割表:
print(data)
##       
##         A  B
##   女性 12  7
##   男性  8 13

③プログラムと実行結果

 分割表の作成ができたら,共通の部分は以下のなる。即ち,下記のプログラムの「#—–以下プログラムは共通——」の以下の部分が共通である。ここで分割表の入力を例として,そのプログラムは以下になる。

# 分割表検定(カイ2乗検定)
#データの作成
data <- matrix(c(20, 10, 20, 30), nrow = 2, byrow = TRUE)
# 行と列の名前を設定
rownames(data) <- c("Nosmoking", "smoking")
colnames(data) <- c("NLC", "LC")
# データの表示
cat("\n入力した分割表:\n")
print(data)
#-----以下プログラムは共通------
# カイ二乗検定の実行
cat("\nカイ2乗検定のp値:", chisq.test(data)$p.valu, "\n")
# 期待度数の表示
cat("\n期待度数:\n")
print(chisq.test(data)$expected)
# 観測値 (observed)
observed <- as.matrix(data)
# 期待値 (expected)
expected <- chisq.test(data)$expected
# 残差 (observed - expected)
residuals <- observed - expected
cat("\n残差 (観測値 - 期待値):\n")
print(residuals)

# フィッシャーの正確確率検定
cat("\nフィッシャーの正確確率検定のp値:", fisher.test(data)$p.valu, "\n")

# 判定結果
if (chisq.test(data)$p.valu <= 0.05 | fisher.test(data)$p.valu <= 0.05){
  cat("\n**分割表の検定結果**\n2変数には統計的有意な関連性があると認めます。\n")
}else{
  cat("\n**分割表の検定結果**\n2変数には関連性があると認めません。\n")
}

プログラムの実行結果:

## 
## 入力した分割表:
##           NLC LC
## Nosmoking  20 10
## smoking    20 30
## 
## カイ2乗検定のp値: 0.03766692
## 
## 期待度数:
##           NLC LC
## Nosmoking  15 15
## smoking    25 25
## 
## 残差 (観測値 - 期待値):
##           NLC LC
## Nosmoking   5 -5
## smoking    -5  5
## 
## フィッシャーの正確確率検定のp値: 0.03683483
## 
## **分割表の検定結果**
## 2変数には統計的有意な関連性があると認めます。

このプログラムは,データを入力できたら,自動的に分割表を作成する。 分割表の検定法として,カイ2乗検定を行い,p値と期待値(度数)及び 残差(観測値-期待値)が出力される。また,フィッシャー検定のp値も 表示される(期待値が5未満のセルが20%以上ある場合を考慮するため)。 カイ2乗検定のp値またはフィッシャー検定法のp値が0.05未満ならば, 帰無仮説を棄却し,統計的有意な関連性があると認める。両方のp値とも 0.05以上ならば,帰無仮説を棄却できないため,統計的有意な関連性があると認めない。