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

まずは\chi^2検定(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パッケージの詳細はこちらに。