カイ二乗検定

カイ二乗検定は、観測データの分布が理論値の分布に従うかどうかを検定する手法である。例えば、サイコロを60回ふったとき、各目が出る回数は次のようになったとき、理論値の分布に従うかどうかを検定する。

サイコロ目123456
出現回数121099137
理論値の分布101010101010

カイ統計量

カイ二乗検定を行うとき、まず統計量 Χ2 を次のようにして求める。ただし、観測データを oi、それに対応する理論値(期待値)を ei とする。

\[ \chi ^{2} = \sum_{i=1}^{n}\frac{(o_{i} - e_{i}^{2})}{e_{i}} \]

こうして、計算された Χ2 がカイ分布より求められた閾値と比較して、検定結果を下す。

たとえば、上記サイコロの実験を例にすると、

\[ \begin{eqnarray} \chi^{2} &=& \frac{(12-10)^{2}}{10} + \frac{(10-10)^{2}}{10} + \cdots + \frac{(7-10)^2}{2} \\ &=& 2.4 \end{eqnarray} \]

一方、自由度が 6 - 1 のカイ統計量の分布について、危険率が 1% のときの境界値は 15.09 で、Χ2 < 15.09 なので、帰無仮説を保留する。すなわち、観測データの分布と理論値の分布が等しい。つまり、この場合、このサイコロは歪みがあると言えない。

カイ二乗検定 (R)

R でカイ二乗検定を行うには chisq.test 関数を利用する。例えば、上記サイコロの実験の場合は次のようになる。

o <- c(12, 10, 9, 9, 13, 7)
e <- c(10, 10, 10, 10, 10, 10)

chisq.test(o, p = e / sum(e))
## 
## 	Chi-squared test for given probabilities
## 
## data:  o 
## X-squared = 2.4, df = 5, p-value = 0.7915

p-value が 0.01 よりも大きいので、危険率 1% 水準では帰無仮説は保留することになる。

カイ二乗検定 (Python)

Python の SciPy では chisquare メソッドを利用してカイ二乗検定を行う。

import numpy as np
from scipy import stats

o = np.array([12, 10, 9, 9, 13, 7])
e = np.array([10, 10, 10, 10, 10, 10])

stats.chisquare(o, f_exp = e)
## (2.3999999999999999, 0.79147412059432465)