Python、Rでカイ二乗検定Chi-squared test on Python, R

カイ二乗検定

カイ二乗検定というと、適合度検定、一様性の検定、独立性の検定といろいろな検定を示しますが、ここでは独立性の検定について記します。

観測されたデータを水準ごとの分けた時に、その水準で仮定される分布(割合)通りに観測値かばらついているかどうかを調べるのが、適合度検定です。

水準に対して観測値のばらつきに偏りはない、つまり一様に分布されるはずと仮定しているのでなれば、一様性の検定ということになります。

独立性の検定は、水準ごとに分割した、分割表のデータが与えられたときに、その水準間において関係があるかどうかを調べます。

また、母分散の検定に対しても、分散に関する統計量がカイ二乗分布に従うことを利用して検定を行うため、同様にカイ二乗検定と呼ぶことがあるので、注意が必要です。

次のような a{\times}b 分割表のデータが得られたとします。

水準 \begin{array}{ccc} B_1&\cdots&B_b \end{array} 合計 T_{i\cdot}
\begin{array}{c} A_1 \\ \vdots \\ A_a \end{array} \begin{array}{ccc} x_{11}&\cdots&x_{1b} \\ \vdots&\ddots&\vdots \\ x_{a1}&\cdots&x_{ab}  \end{array} \begin{array}{c} T_{1\cdot} \\ \vdots \\ T_{a\cdot} \end{array}
合計 T_{{\cdot}j} \begin{array}{ccc} T_{{\cdot}1}&\cdots&T_{{\cdot}b} \end{array} T

一方、確率を以下のように置きます。

水準 \begin{array}{ccc} B_1&\cdots&B_b \end{array} 合計 T_{i\cdot}
\begin{array}{c} A_1 \\ \vdots \\ A_a \end{array} \begin{array}{ccc} p_{11}&\cdots&p_{1b} \\ \vdots&\ddots&\vdots \\ p_{a1}&\cdots&p_{ab}  \end{array} \begin{array}{c} 1 \\ \vdots \\ 1 \end{array}

このようにおくと、独立性の検定での帰無仮説「AB が独立である」は p_i_j=p_i_\cdot{\times}p_\cdot_j と表せます。

A_i, B_j の期待度数は t_i_j=\frac{T_i_\cdotT_\cdot_j}{T} となります。

水準 \begin{array}{ccc} B_1&\cdots&B_b \end{array} 合計 T_{i\cdot}
\begin{array}{c} A_1 \\ \vdots \\ A_a \end{array} \begin{array}{ccc} t_{11}&\cdots&t_{1b} \\ \vdots&\ddots&\vdots \\ t_{a1}&\cdots&t_{ab}  \end{array} \begin{array}{c} T_{1\cdot} \\ \vdots \\ T_{a\cdot} \end{array}
合計 T_{{\cdot}j} \begin{array}{ccc} T_{{\cdot}1}&\cdots&T_{{\cdot}b} \end{array} T

この時に、各観測値と期待度数との差の二乗を期待度数で割った値をすべて足した統計量

    \[\chi^2=\Sigma_{i=1}^a\Sigma_{j=1}^b\frac{(x_{ij}-t_{ij})^2}{t_{ij}}\]

は、帰無仮説のもとで、自由度 (a-1)\times(b-1) のカイ二乗分布で近似できます。

この値が自由度 (a-1)\times(b-1) のカイ二乗分布の上側 \alpha 点より大きいならば、帰無仮説を有意水準 \alpha で棄却します。

カイ二乗検定は近似であるため、期待度数 t_{ij} の中に 1 以下のものが1つでもあったり、 5 以下のものが20%あるような場合だと近似が悪くなるようで、そのような場合には、フィッシャーの正確確率検定を利用する方が良いようです。

参考: Python、Rでフィッシャーの正確確率検定

Python

GitHub: https://github.com/Gin04gh/samples_py/blob/master/Chi-squaredTest.ipynb

R

GitHub: https://github.com/Gin04gh/samples_r/blob/master/Chi-squaredTest.ipynb