■
2*2の分割表の検定と検出力の計算方法について
以下のようなデータが得られたする。
薬投与 | 未投与 | |
---|---|---|
効果あり | 5 | 7 |
効果なし | 13 | 12 |
さて,この薬に効果はあるのでしょうか?
(ぱっと見,完全になさそうですけど。)
> matrix(c(5,13,7,12),ncol=2)->data > data [,1] [,2] [1,] 5 7 [2,] 13 12 > chisq.test(data) Pearson's Chi-squared test with Yates' continuity correction data: data X-squared = 0.0563, df = 1, p-value = 0.8124
まずは検定(Yateの補正あり)を行った。
ふむ,統計量が0.05とかなり低めで,当たり前だけど,帰無仮説は棄却されなかった(p=0.81)。
でも,これってサンプル数が少なかったために起こったのかもしれない。
つまり,対立仮説が正しいのにそれを検出できなかったのかもしれない。ということで,パワーアナリシスを行う。
(はっきり言って例題悪すぎですね)
既存の関数でやろうとすると,pwrパッケージがよさそう。
うまくpwrパッケージを使うために以下の関数を作った。
sqr.exp<-function(x){ rowSums(x)->rt colSums(x)->ct n<-sum(x) ex<-outer(rt,ct)/n pex<-ex/sum(x) print(pex) }
ただ分割表の期待値の確率を算出する関数。
これで,さっきのも
> sqr.exp(data) [,1] [,2] [1,] 0.1577794 0.1665449 [2,] 0.3287071 0.3469686
となる。
で,
> sqr.exp(data)->data #格納 > ES.w2(data)->dataw #effect sizeを算出
で,pwrパッケージで
> pwr.chisq.test(w=dataw,df=1,N=37) Chi squared power calculation w = 9.423997e-17 N = 37 df = 1 sig.level = 0.05 power = 0.05 NOTE: N is the number of observations
なるほど。検出力は0.05。検出力もかなり低いので,第2種の過誤を犯している可能性も大いにある。と。
要は,サンプルサイズを増やせということですね。もしこれで検出力が高ければ,帰無仮説を棄却できなかったことは
ある程度確証のあることだと言える(のか?)。
でも,TYPE1errorが0.81の時点で,検出力はかなり低くなるような気が。
pwrパッケージの詳細はこちらに。