四分表(クロス表)からχ二乗検定を行う

 四分表では下記の式でχ二乗統計値を求めるのが一般的ですが,名義変数やアウトカムの取る値が3以上の場合でもχ二乗検定を行うことは可能です.χ二乗統計値とは,全てのセルにおいて観察値 O と期待値 E の差を二乗した値を期待値 E で除し,それらを合計した値のことです.

\displaystyle\chi^2(df)=\sum\frac{(O-E)^2}{E}

df: degree of freedom

 四分表(クロス表)が下記のようである場合,χ二乗統計値は次の通りです.χ二乗統計値はχ二乗分布に従い,自由度1の場合,片側検定で p < 0.05 となるχ二乗統計値は 3.841, p < 0.01 だと 6.635, p < 0.001 だと 10.828 です.両側検定で p < 0.05 となるχ二乗統計値は 5.024, P < 0.01 だと 7.879 です.

  TRUE FALSE Marginal total
POSITIVE a b a + b
NEGATIVE c d c + d
Marginal total a + c b + d N 
\displaystyle \begin{array}{rcl}\chi^2&=&(ad-bc)^2\times\frac{N}{(a+b)(c+d)(a+c)(b+d)}\vspace{0.2in}\\\chi^2(Yates)&=&\left(|ad-bc|-\frac{1}{2}\right)^2\times\frac{N}{(a+b)(c+d)(a+c)(b+d)}\end{array}

χ二乗検定ではなく Fisher の直接確率検定を行うべき状況とは

 クロス表(四分表)を見て,各セルの期待値が 5 未満の割合が 20 % 以上存在する場合や,総数 N が 20 未満の場合にはχ二乗検定ではなく Fisher の直接確率検定を行うべきであるとされています.この辺り,本来なら Fisher の直接確率検定を行いたいが計算コストが高すぎてχ二乗検定で代用せざるを得なかった経緯があるのではないかと考えます.

 ここでは各セルの期待値を求める方法を述べます.一見して明らかですが,期待値は周辺度数 (marginal total) のみから算出されます.

 下表のようなクロス表があるとします.

  TRUE FALSE Marginal total
POSITIVE a b a + b
NEGATIVE c d c + d
Marginal total a + c b + d N 

 各セルの期待値は下記の通りです.

  TRUE FALSE Marginal total
POSITIVE (a + b)*(a + c)/N (a + b)*(b + d)/N a + b
NEGATIVE (c + d)*(a + c)/N (c + d)*(b + d)/N c + d
Marginal total a + c b + d N 

参照記事
対数を用いてFisherの直接確率検定を計算するには

対数を用いてFisherの直接確率検定を計算するには

 四分表を用いて2つの比率が等しいか異なるかを検定する方法としてはχ二乗検定が知られています.しかしχ二乗検定は総数が20未満の場合や期待値が5未満のマスがある場合には用いてはならないとされています.

 そのような場合でも,Fisherの直接確率検定を用いれば正確なp値が求まります.ただし階乗計算を要するために,オーバーフローを起こす可能性があります.実際 EXCEL のワークシート関数でも階乗の引数は 170 までです.これは EXCEL に限った問題ではなく,数値のデータ型の定義域の限界と考えられます.

 この問題法は対数を用いて乗除の計算を加減に変換することです.

  1. 階乗の乗除の対数をとる
  2. 対数により乗除が加減に変換されるため実際の計算をここで行う
  3. 得られた結果を指数に戻す
  TRUE FALSE Marginal total
POSITIVE a b a + b
NEGATIVE c d c + d
Marginal total a + c b + d N 
\displaystyle \begin{array} {rcl} P &=& \frac{(a+b)!(c+d)!(a+c)!(b+d)!}{N!a!b!c!d!}\vspace{0.2in}\\&=& \exp\left[LN \left( \frac{(a+b)!(c+d)!(a+c)!(b+d)!}{N!a!b!c!d!} \right) \right]\vspace{0.2in}\\ &=& \exp [LN((a+b)!) +LN((c+d)!) +LN((a+c)!) +LN((b+d)!)\vspace{0.2in}\\& & -LN(N!) -LN(a!) -LN(b!) -LN(c!) -LN(d!) ]\end{array}