カイ自乗値とalpha値から相当する自由度を求める
今、カイ自乗値がyのとき、自由度dの棄却検定を行って、タイプ1エラーがaであるとなるとする。
Rの関数を使えば、
a<-pchisq(y,d,lower.tail=FALSE)
という関係である。
今、aとdが与えられているときに、yを求める関数もRにはあって、
y<-qchisq(a,d,lower.tail=FALSE)
である。では、yとaが与えられているときに、dはどのようにして求めるか?
aが0.5未満のとき(厳密には、0.5より『十分に(!:後述、参照)小さいとき』)pchisq関数を用いて、一定の精度で推定する関数は末尾の通り。なお、この推定は次のような考えに基づく。
- サンプル数Nの2x2分割表のカイ自乗値の最大値は、2群のサンプル数N1,N2(N1+N2=N)が、きれいに分かれた、{[N1,0],[0,N2]}なる2x2表のときに得られて、その値はNである。
- を式変形して得られる。
- 今、このNサンプルが、すべて弁別可能であるとき、Nカテゴリに2群のうちのどちらか1群のサンプルが1つあてはまるような、2xN分割表であるとみなせる。この分割表では、第1群に1がN1個、0がN2個、第2群に1がN2個、0がN1個あり、周辺度数は、2群のそれぞれの和がN1、N2であって、Nカテゴリのそれぞれに各1サンプルがあるような、そんな分割表である。この分割表のカイ自乗値もNである。
- を式変形して得られる
- これは、サンプル数がNであるとき、自由度1のカイ自乗検定ではカイ自乗値の最大値がサンプル数Nに等しいことを示すとともに、自由度N(全員を弁別できるだけのカテゴリ数があるとき)のときに、そのカイ自乗値もNであることを意味している。全員が弁別できているときというのは、何も統計的に有意なことはいえないときであり、検定aは0.5になる。このことは、Rで
n<-seq(from=1,to=100,by=0.5) N<-n^2 plot(N,pchisq(N,N,lower.tail=FALSE))
のようにすることで、pchisq(N,N,lower.tail=FALSE)が0.5に収束することからも確認できる。
これを利用して、aが0.5未満のとき(pchisq(N,N,lower.tail=FALSE)の0.5への収束を考慮に入れて、aが、pchisq(N,N,lower.tail=FALSE)未満のとき)に、を満足するようなdを1からyの範囲で挟み撃ちにて、探索すれば、カイ自乗値とその検定aの値とから、それを与える自由度dが求まるものである。
引数は、探索の範囲がx1とx2(上述の通り、x1=1,x2=y)、yはカイ自乗値、aはタイプ1エラー、thresは、探索終了のための、dの精度を与えている
DF<-function(x1,x2,y,a,thres){ low=x1 mid=(x1+x2)/2 high=x2 L=pchisq(y,low,lower.tail=FALSE) M=pchisq(y,mid,lower.tail=FALSE) H=pchisq(y,high,lower.tail=FALSE) if(H-L<thres)tmp<-(low+high)/2 else if((L-a)*(M-a)<0) tmp<-DF(low,mid,y,a,thres) else if((M-a)*(H-a)<0) tmp<-DF(mid,high,y,a,thres) return (tmp) }