【R】独立性の検定
マーケティング等で得られたデータの有意差検定を行うことがあります。クロス集計表から各項目に関連がない(独立)かどうかを確認するものです(Chi-square test of independence)。ここでは、例として統計検定2級2013年11月の問15を検討してみます。
ある病院で好きな酒の種類とアルコール依存症の関係を調べるため、分割表を次のように作成しました。この表について検討します。
| 依存症である | 依存症でない | |
| ビール | 86 | 13 |
| 日本酒 | 32 | 42 |
| 焼酎 | 92 | 105 |
| ウイスキー | 24 | 31 |
| ワイン | 22 | 43 |
まずは、モザイクプロットで眺めてみます。

カテゴリカルデータの視覚化に多用されるようです。各グループの割合が面積で表示され、一目で全体を眺められて便利です。また、残差によって色分けされ、有意に多いグループが青色、有意に少ないグループが赤色です。さらに、その大きさによって、おおむね5%で薄い色、0.01%で薄い色となるようです。
検討に使用したコードは次の通りです。カイ二乗検定を手動と関数の2種類で行ってみました。
# カイ二乗検定(独立性の検定)
# データの準備
dat<-c(86, 32, 92, 24, 22, 123, 42, 105, 31, 43)
DF<-as.data.frame(matrix(dat, 5, 2, byrow=F))
colnames(DF)<-c("依存症である", "依存症でない")
rownames(DF)<-c("ビール", "日本酒", "焼酎", "ウイスキー", "ワイン")
# モザイクプロットで眺めてみる
mosaicplot(DF, xlab="酒の種類", ylab="アルコール依存", shade=TRUE, main="酒の種類・アルコール依存")
# 手動でカイ二乗検定
# 各行の合計を求める
r_sum<-c()
for (i in row(DF)){
r_sum[i]<-sum(DF[i,])
}
# 各列の合計を求める
c_sum<-c()
for (j in col(DF)){
c_sum[j]<-sum(DF[,j])
}
# 全合計
t_sum<-sum(c_sum)
# 期待値を計算
E_DF<-data.frame()
for (i in row(DF)){
for (j in col(DF)){
E_DF[i, j]<-r_sum[i] * c_sum[j] / t_sum
}
}
# 検定統計量Tの計算
T<-sum((DF-E_DF)*(DF-E_DF)/E_DF)
# 自由度4(=(5-1)×(2-1)), 有意水準5%のカイ二乗値を求める。
qchisq(0.95, 4)
# Rの関数を使って計算
chisq.test(DF)
検定統計量\(\chi^2\)は分割表の\(i\)行\(j\)列の観測度数\(O_{i,j}\)と期待度数\(E_{i,j}\)から次式で求めます。
$$\chi^2={\displaystyle \Sigma_{i,j}^{n}}\frac{(O_{i,j}-E_{i,j})^2}{E_{i,j}}$$
ここで、期待度数は、
$$E_{i,j}=\frac{n_{i}m_{j}}{N}$$
\(n_{i}=\Sigma_{j} O_{i,j}\), \(m_{j}=\Sigma_{i} O_{i,j}\), \(N=\Sigma_{i}n_{i} = \Sigma_{j}m_{j}\)
で計算されます。
手動で検定統計量T(\(=\chi^2\))を求めた結果、3.606となりました。自由度4、有意水準5%のカイ二乗値を求めると9.488で、帰無仮説を棄却できず、酒の種類とアルコール依存症は、独立ではないとはいえない(関連があるとはいえない)ことになります。
同じことをRの\(chiqs.test()\)でも行ってみました。
R:
Pearson's Chi-squared test data: DF X-squared = 3.6059, df = 4, p-value = 0.462
と同じ結果が得られました。