★ノンパラメトリック検定(続き)
◎ フィッシャーの正確検定(exactly検定)
フィッシャーの正確検定は
対応無しのχ2検定における条件を満たさない場合によく用いられます。
制限は次のものでした。(2×2表の場合=自由度1の場合)
@象者総数が20人以下である。
A期待値の中に5未満の数値が含まれる場合
フィッシャーの直接確率計算法とは(Fisher's) exact 検定とも呼ばれているもので、χ2検定に比べて正確なP値を計算できます。またχ2検定のような度数の制限もありません。たとえ升の中に0があっても使うことが出来ます。
実際の例では事業参加者総数が20人を下回る事も多く、あるいは越えたとしても分割表に0があったり、期待値表中5未満の数が現れたりする事はよくあり、フィッシャーの直接確率計算法を使う場面は多いと思われますが、手持ちの統計ソフトに常備されていない場合正攻法で行うと相当面倒くさい計算を強いられます。また、中高校で習う対数や順列組み合わせをしっかり覚えていないと計算どころではありません。
そういう意味から自己学習には辛いと思いますので、ほぼ独学教育ツールテキストの通りに載せます。この中ではエクセルの関数だけで、数学的な知識は必要ありませんが、手作業の多さにに手間取るかもしれません。
χ2検定では、χ2の統計量が近似的にχ2分布に従う事を利用して帰無仮説の棄却・採用を判断しましたが、直接確率計算法とは、その名前の通り直接棄却域を求めるものです。この直接確率計算法は、分割表における行の合計と列の合計を固定して、升の中の最も小さい度数に着目し、これを偏りの大きくなる方向へずらしていき、現在得られている度数より、更に偏った度数の全ての組み合わせを考え、それぞれの表に起こる確率を全て計算してその確率の総和を直接棄却域と比べる方法です。
これまでの検定は、分布を想定し、近似値的なものを求めていたのに対しこの検定は直接正確な確立を出します。
直接確率計算法と呼ばれる由縁です。
方法としては単純ですが、やり方は大変です。
次の分割表があると
|
|
|
合計 |
|
a |
b |
a+b |
|
c |
d |
c+d |
合計 |
a+c |
b+d |
a+b+c+d |
|
a+b、c+d、a+c、b+c が固定されて、a+b+c+d=n とすると、
この分割表における出現確率Pは
P={(a+b)!*(c+d)!*(a+c)!*(b+d)!} / n!*a!*b!*c!*d!
で計算されます。
ここで ! はびっくりマークではなく、階乗をするという数学記号です。
例えば、6! = 1 × 2 × 3 × 4 × 5 × 6 = 720 となります。
|
エクセルには、階乗を計算する関数FACTが備わっていますが、通常これを利用して計算を行います。
FACT(n) =n!
です。階乗の計算はこれで行います。
分割表の合計表示を見やすくするために
a+b=e、c+d=f、a+c=g、b+d=h、a+b+c+d=n と置き換えると
|
P={e!*f!*g!*h!} / n!*a!*b!*c!*d!
となります。これをFACT関数を利用して
P={FACT(e)*FACT(f)*FACT(g)*FACT(h)} / FACT(n)*FACT(a)*FACT(b)*FACT(c)*FACT(d)
を行えば結果は出てきます 。
|
しかし、これは a とかb とかの数が小さい場合はよいのですが、大きくなるとパソコンはオーバーフローしてしまいます。
オーバーフローとは、例えば電卓なのでかけ算を行い×を押して次に連続して=を押し続けるとE(エラー)表示となるあれです。
エクセルの場合 FACT(175)=175! までしか扱えません。総数が175名までは扱えると言うことではありません。
例えば、FACT(100) * FACT(100) でもオーバーフローします。フィッシャーの直接確率計算法では階乗と階乗のかけ算を強いられますので、簡単にオーバーフローしてしまいます。
これを回避する方法として、かけ算とわり算を交互にする事で少しは回避出来ますが、普通は対数変換を施して回避するのが常套手段です。(乗算は対数変換を施すと足し算に出来る)
以前エクセルにおける統計を扱った参考書では、フィッシャーの直接確率計算法をどう処理しているか近くの大きな書店で調べてきたことがあります。8冊ほどありましたが、フィッシャーの直接確率計算法を扱っているのは、4冊で、その内2冊が計算方法をVBAプログラムの形で載せていました。(他の2冊は上記に示した公式だけです)公開されているVBAプログラムを見る限り、確かにオーバーフローしないように対数変換しているものでした。これは非常に面倒ですし、ここでVBAプログラムを使う事は考えていません。もっと簡単に済ませる方法を紹介します。調べた限りどの本にもネットにも載っていないようですね。
組み合わせの公式
nCi = n! / (n-i)! / i!
を利用すると、求める確率Pは
P= ( e! f! g! h! ) / ( n! a! b! c! d! )= eCa × fCc / nCg
になります。nCi とはn個の中からi通りの組み合わせが出来る数を意味しています。10C4なら、210通りです。
nCiはエクセルにある組み合わせ関数COMBIN 関数を用います。
COMBIN 関数はエクセルにしては上出来で、計算結果にできるだけオーバーフローしないように処理されます。
COMBIN 関数は1030まではオーバーフローしません。この数値は現実的にフィッシャーの直接確率計算法を行う上では実用上問題ないでしょう。フィッシャーの直接確率計算法は総数が少人数の場合に用いるのが殆どなので。
COMBIN(n,i) はn=1030 , i=500 を越えるとオーバーフローしてしまいますが、1030を越える場合は対数変換を施し回避することも出来ます。
nCi =COMBIN(n,i) を利用すると、先程の分割表のPは、
P= COMBIN(e,a) / COMBIN(n,g) × COMBIN(f,c)
で計算されます。先にわり算しているのは、途中計算でオーバーフローしないよう配慮しているためです。
ところで、エクセルにはもう一つ超幾何分布関数を計算するHYPGEOMDIST関数が備わっています。まさにこのためにあるかのような関数です。
HYPGEOMDIST関数の式を見ると、COMBIN(e,a) / COMBIN(n,g) × COMBIN(f,c) と同じ式であることが分かります。
実際のアルゴリズムはこれを用いています。
エクセルのヘルプから引数を見ると次のようになります。
HYPGEOMDIST(標本の成功数,標本数,母集団の成功数,母集団の大きさ)
これでは意味が分かりにくいですから、先ほどの分割表に当てはめますと、
HYPGEOMDIST(c,g,f,n)
となり簡単に結果が得られます
。
では、実際に例題を通して解いて見ましょう。
保健指導に参加した9人としなかった9人の体重変化は次のようであった。
未受講者で変化無し6人、変化あり3人、受講者で変化無し2人、変化あり7人
指導効果があるのか検定し臨床的・保健的解釈を行いなさい。
|
無し |
あり |
合計 |
受講 |
2 |
7 |
9 |
未受講 |
6 |
3 |
9 |
合計 |
8 |
10 |
18 |
この分割表の出現確率を求めると、P=HYPGEOMDIST(6,8,9,18, 0)=0.0691
となります。
次に分割表における行の合計と列の合計を固定して、升の中の最も小さい度数に着目しこれを偏りの大きくなる方向へずらしていき、偏った度数の全ての組み合わせを考えます。
この例では、升の中の最も小さい度数は2ですから、これをずらしていくことになるのですが、行と列の各合計が固定されているので、0から8の範囲までしかずらせません。
この時、2を中心として片方向へずらすと、片側検定になります。後述しますが、フィッシャーの直接確率計算法では、片側検定で得られたP値を2倍しても両側検定のP値にはなりません。
ずらす方向は、帰無仮説の内容に依ります。この場合期待値のズレがどの程度食い違っているのかを見るためですので、最も小さい度数である受講者で、変化なしの2は食い違いが無ければ0になるはずです。(理想的な状況・・全員が変化した)従ってずらす方向は0へ向かって、2→1→0の3通りのパターンとなります。
受講者で、変化なしが2の場合は例題の表そのままですこれをP2としましょう。
これを1にずらした場合の表は、P1 とすると、
|
無し |
あり |
合計 |
受講 |
1 |
8 |
9 |
未受講 |
7 |
2 |
9 |
合計 |
8 |
10 |
18 |
P=HYPGEOM.DIST(7,8,9,18,0)=0.00740436
0へずらした場合の表を P0 とすると、
|
無し |
あり |
合計 |
受講 |
0 |
9 |
9 |
未受講 |
8 |
1 |
9 |
合計 |
8 |
10 |
18 |
P=HYPGEOM.DIST(8,8,9,18,0)=0.000205677
となりますので、確率の総和をPとすると、
P=P2+P1+P0 =0.0767
となります。これは直接有意確率を表しているので、5%(0.05)又は1%(0.01)と比べて判定します。
この場合 P=0.0767>0.05 なので、有意水準5%でも仮説は却下されない。即ち受講・未受講は体重変化には効果ないと判断されます。
フィッシャーの直接確率計算法は正確な検定ですので、片側検定だけで通用します。
これを両側検定で見る場合0へ向かってずらす方向とは逆の方向を考慮しなければなりません。
行と列の各合計が固定されているので、0から8の範囲ですから、2→3→4→5→6→7→8と7通りの表を作り確率を求めます
各確率は次のようになります。
P2=0.069107363
P3=0.241875771
P4=0.362813657
P5=0.241875771
P6=0.069107363
P7=0.00740436
P8=0.000205677
ここで、直接確率計算法の定義では、現在得られている度数より、更に偏った度数の全ての組み合わせを考えるとありますので、現在得られている度数は2ですからP2における確率より更に偏ったものを探します。具体的にはP2より大きな確率は除外すると言うことです。
P2より大きいのは、P3、P4、P5ですからこれらは除外されます。
従って、求める確率Pは、
P=P2+P1+P0+P6+P7+P8 =0.1534
この場合も P=0.1534>0.05 なので、有意水準5%でも仮説は却下されない。即ち受講・未受講は体重変化には効果ないと判断されます。(両側検定)
フィッシャーの直接確率計算法では、片側検定で得られたP値を2倍しても両側検定のP値にはなりませんと言いましたが、この例では、
P=P2+P1+P0+P6+P7+P8 =2(P2+P1+P0)
になっています。このように両側検定値=片側検定値の2倍となるのは、行の合計が一致した場合のみ(a+b=c+dの場合のみ)です。それ以外では片側検定で得られたP値を2倍しても両側検定のP値にはなりません。
|